|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
5.程序如下,编写CODE段中的代码,将A段和B段中的数据依次相加,将结果存到C段中。
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
d segment
db 0,0,0,0,0,0,0,0
d ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,d
mov ss,ax
mov ax,0
mov bx,0
mov dx,0
mov cx,8
s: mov al,[bx]
mov dl,es:[bx]
add al,dl
mov ss:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
问题1:上面说将结果放到c段,我将第三段设置成c segment的时候,MASM并不能通过,换成了d则通过了,请问是什么原因?
问题2:这个程序我虽然写好了,A+B=C,结果也依次送到C里了,但是我对这个程序并不满意,我觉得是否太麻烦了?A+B=C就用到4个寄存器,那要是A+B+C+D+E+F=G,(让A段+B段+...F段送到G段,那怎么操作?寄存器不够用啊?)希望老师能够告诉如何简化这个程序。最好用1-2个寄存器就可以吧这个程序完成,比如只用到ax,bx,就能够区分各个段的地址(cx是循环计数可以不算在内),就可以完成这个程序。
|
|