对第七章问题7.2的质疑
本帖最后由 开机中。。。 于 2011-6-20 15:49 编辑assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg segment
start:mov ax,datasg
mov ds,ax
mov si,0
mov di,16
mov cx,8 'mov cx,16
s: mov ax,
mov ,ax
add si,2 'inc si
add di,2 'inc di
loop s
mov ax,4c00h
int 21h
codesg ends
end start
书上写的很清楚si与di不能分为2个8位寄存器,所以原程序把 cx设置为8,但是大家注意代码中红色的代码,如果执行后,结果一样是正确的,何解? 不要告诉我多循环了8次,我要的答案是为什么’书上写的很清楚si与di不能分为2个8位寄存器‘在这里貌似不适用了,还是我根据代码理解错了?
呵呵 你并没有把 di 和 si分别分为两个8位寄存器
至于为什么循环 八次 就可以了
你想想:你在数据段定义字符串时是用db定义的 所以 就是一个字母一个“字节”而不是“字”
而你在循环里是:
mov ax,
mov ,ax
add si,2
add di,2
那么也就是说你一次性把两个字母进行了复制 也 就是说你一次性把一个“字”的数据复制到了后面所以只要复制八次
而原本如果按照一个字节一个字节复制当然是要十六次!
希望这样说你能看懂!呵呵呵呵………… 2字节 = 1字 即 2Byte = 1word
ax = 16位寄存器 所以一次可以传输2字节 01 00
ax= 0001 高8位寄存器AH =00 低8位寄存器al =01 OK,这个解释可以听懂,谢谢楼上2位朋友的耐心解答
页:
[1]