HTT_音乐 发表于 2014-6-18 09:47:22

检测点9.3

assume cs:code

code segment
start:      mov ax, 2000H
                mov ds, ax
                mov bx, 0
      s:      mov cl,
                mov ch, 0
                jcxz ok
                inc bx
                loop s
      ok:      dec bx
                mov dx, bx
               
                mov ax, 4c00H
                int 21H
code ends

end start这题和上次9.2一样,不过就是把jmp无条件跳转转换为loop循环

轻轻爱你一生 发表于 2014-8-27 10:50:07

如果的值为01H,赋给CL后,CX=0001H,执行,到LOOP时,CX=CX-1,loop失效,继续往下执行岂不是最后得到DX偏移地址是错误的?

nulptr 发表于 2015-5-18 21:51:43

同意2楼。
assume cs:code

code segment
start:      mov ax, 2000H
                mov ds, ax
                mov bx, 0
      s:      mov cl,
                mov ch, 0
                inc cx
                inc bx
                loop s
      ok:      dec bx
                mov dx, bx
               
                mov ax, 4c00H
                int 21H
code ends

end start
这样比较正确。当(CX)=0时,inc cx;和loop s;会导致(CX)=0退出循环,得到偏移地址保存在DX中。

月下33 发表于 2017-12-10 16:48:52

2,3楼很棒,感谢感谢终于懂了,我一直觉得那个空是多余的,现在懂了。

719871782 发表于 2017-12-15 22:36:26

nulptr 发表于 2015-5-18 21:51
同意2楼。

这样比较正确。当(CX)=0时,inc cx;和loop s;会导致(CX)=0退出循环,得到偏移地址保存在DX中 ...

前辈,你这么改,程序只会一直循环在S那个循环里,dx永远也得不到偏移量啊

719871782 发表于 2017-12-15 22:48:46

719871782 发表于 2017-12-15 22:36
前辈,你这么改,程序只会一直循环在S那个循环里,dx永远也得不到偏移量啊

我错了请见谅啊

酿泉为酒 发表于 2018-1-25 11:18:08

719871782 发表于 2017-12-15 22:36
前辈,你这么改,程序只会一直循环在S那个循环里,dx永远也得不到偏移量啊

LOOP指令会先执行cx-1项,所以我觉得不存在你说的无法跳出循环吧

布谷lyc 发表于 2018-5-10 09:49:29

酿泉为酒 发表于 2018-1-25 11:18
LOOP指令会先执行cx-1项,所以我觉得不存在你说的无法跳出循环吧

666

布谷lyc 发表于 2018-5-10 09:54:54

布谷lyc 发表于 2018-5-10 09:49
666

3楼正解,3楼和7楼分析很棒,执行loop指令时,cx还会再减去1,所以不光是不存在跳不出循环的问题,而且这个inc cx用的精妙
页: [1]
查看完整版本: 检测点9.3