题目:下面的程序将datasg段的中a处的8个数据累加,结果保存到b处的字中,补全程序
assume cs:codesg,es:datasg
datasg segment
a db 1,2,3,4,5,6,7,8
b dw 0
datasg ends
codesg segment
start:
____(1)____
____(2)____
mov si,0
mov cx,8
s:
mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
codesg ends
end start
分析:虽然一开始的时候把datasg的开始地址赋值给了es,也就是说在执行程序时数据默认是从ds加偏移地址中取出要改成冲es加偏移地址中获取。所以要把datasg的值给es。所以有
assume cs:codesg,es:datasg
datasg segment
a db 1,2,3,4,5,6,7,8
b dw 0
datasg ends
codesg segment
start:
mov ax,datasg
mov es,ax;我原本以为也可以是mov ds,ax。但是经过调试,发现结果不正确
mov si,0
mov cx,8
s:
mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
codesg ends
end start
- [mywiil] 我没用书上的入栈出栈写,就是先看看不用书上的方法能做出来否? ============== 不错 09/19 09:24
- [njutyangxiao] 谢谢你的指导 09/18 17:00
- [younggay] 嗯,应该说理解的没问题。 09/18 15:41
- [njutyangxiao] 检测点16.1的题目是中是这样定义的: a dw 1,2,3,4,5,6,7,8 b dd 09/16 11:23
- [njutyangxiao] 嗯,谢谢指导 09/16 11:22
- [wsrf] assume伪指令指定了段中标号与相应段寄存器的联系。 09/16 09:46
- [wsrf] 没有问题,不过源代码中 a db 1,2,3,4,5,6,7,8 b dw 0 怎么 09/16 09:43
- [njutyangxiao] 谢谢,keep moving! 09/16 09:06
- [njutyangxiao] 谢谢你的指导 09/16 09:05
- [njutyangxiao] 谢谢你的指导 09/16 09:05
[ wsrf 发表于 2009-09-16 09:46 ]
assume伪指令指定了段中标号与相应段寄存器的联系。
[ njutyangxiao 发表于 2009-09-16 11:22 ]
嗯,谢谢指导