每天一道汇编题(2)

博主是个大笨比,只会阿巴阿巴阿巴

题目:

编写汇编源程序,求出首地址为BUF的10个有符号字的内容之和,并存入字变量SUM单元

分析:
1.首地址为BUF
2.10个有符号字的和
3.存入自变量sum单元

命令指令
lea将源操作数的有效地址传入寄存器
offset返回变量或标号在段内的地址偏移量
xlatbx 存表的首地址,al存内存偏移量,执行xlat后,以寄存器ds的内容为段基址,以bx+al 为偏移地址,在表中取一个字节送入al

思路:找到地址,循环求和

方法一:

Data segment
	buf dw 1,2,3,4,5,6,7,8,9,0
	sum dw ?
Data ends

Stack segment
Stack ends

Code segment
	assume cs:Code,ds:Data,ss:Stack
Start:
	mov ax,data
	mov ds,ax
	;================================================================================
	;与下面的lea等价的写法  
	;MOV bx,offset buf
	lea bx,buf;取出buf的有效偏移地址 
	mov cx,10 ;赋值cx为10(循环次数为10)
	mov ax,0  ;清空ax寄存器
loop_to_add:
	add ax,[bx] ;寄存器间接寻址,找到buf的首地址
	add bx,2    ;bx + 2 向后寻找下一个数字
	loop loop_to_add
	mov sum,ax
	;================================================================================	
	MOV ah,4ch
	INT 21h
	Code ends
end Start
	

方法二:(使用xlat指令)

Data segment
	buf dw 1,2,3,4,5,6,7,8,9,0
	sum dw ?
Data ends

Stack segment
Stack ends

Code segment
	assume cs:Code,ds:Data,ss:Stack
Start:
	mov ax,data
	mov ds,ax
	;================================================================================
	;与下面的lea等价的写法  
	;MOV bx,offset buf
	lea bx,buf;取出buf的有效偏移地址 
	mov cx,10 ;赋值cx为10(循环次数为10)
	mov al,0  ;清空ax寄存器的低8位
	mov dx,0  ;清空dx寄存器
loop_to_add:
	xlat
	add dl,al   ;通过查表指令xlat可知取出的内容存在al中
	add bx,2    ;bx + 2 向后寻找下一个数字
	mov al,0    ;让bx偏移就够了
	loop loop_to_add
	mov sum,dx
	;================================================================================	
	MOV ah,4ch
	INT 21h
	Code ends
end Start

如有错误,请指正,万分感激

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值