|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 傲天 于 2015-1-19 23:37 编辑
这是原答案:
补全程序,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
assume cs:code
code segment
start: mov ax,2000h
mov ds,ax
mov bx,0 s: mov cl,[bx]
mov ch,0
(inc cx);此处是要填空的地方。
inc bx
loop s
ok: dec bx ;dec的功能是bx=bx-1。
mov dx,bx
mov ax,4c00h
int 21h
code ends
end star
但这个空填的我不明白了:
这题是先把DS段地址设置成2000,然后用BX做偏移地址,查找每一个字节
这段代码应该是这样理解:把DS段偏移为0的字节赋给了CL,CH赋0,那么如果第一个字节为0,就应该跳出循环,因为找到为0的字节了,但中间加了一个inc cx,那么CL的值自然就等于1了,应该说CX的值为0001,CL的值为01,不管是哪种情况,CX均不为0。因为:CX不为0,那么就会继续Loop,前面的inc bx,就会查找下一个字节了,按这个理论,那么无论怎么查找,CX也不会为0,也就是会进入一个死循环。
所以,我认为这里应该什么也不填才对。
理由:如果什么也不填,那么第一个字节为0了,那么,inc bx就会指向下一个单元,执行到Loop时,就会跳出循环,执行OK的dec,使BX减1而指向原来正确的字节,如果CX不为0,那么inc BX会指向下一个单元,而把新的值赋给了CL,以此类推。
不知道我说的对不对,如果我说的不对,请指出我到底错在哪里了,谢谢!(排版没排好,代码中间有点乱)
|
|