Push 发表于 2012-1-25 01:56:31

9.3检测点问题

检测点9.3(第173页)
----------------------
补全程序,利用loop指令,实现在内存2000H段中查找第一个值为0的byte,找到后,将它的偏移地址存储在dx中。


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
那inc cx这条指令只是为了让其符合cx=cx-1这个条件?其实这个循环写不写都是无所谓的?

小马过河 发表于 2012-1-25 01:56:32

如果 么有inc cx   可能产生两种情况   1: 地址执行到找到1时就停止了或   程序卡死 循环无限次

芒果0011 发表于 2012-1-29 12:44:04

为什么会卡死?会无限制循环?

哈喇子淌一手 发表于 2012-8-27 21:40:14

what a mother fucking exercise it is!why adding a stupid "OK" in line 14?

C开头 发表于 2012-8-27 23:08:32

小马过河 发表于 2012-1-25 01:56 static/image/common/back.gif
如果 么有inc cx   可能产生两种情况   1: 地址执行到找到1时就停止了或   程序卡死 循环无限次

亲,说真的,觉得没那个inc cx才是对了的啊。mov cl,mov ch,这两条指令就把数据段中的每一个数据都定义到了cx上了的啊。loop指令不是遇到cx=0的时候才向下执指令的嘛。既然那两条指令就定义cx,为什么还要加一个inc cx那样就算是遇到了在数据中的0时候,cx也会被inc cx加成1的啊,那样就土无限的循环了的啊?你说的,如果 么有inc cx   可能产生两种情况   1: 地址执行到找到1时就停止了或   程序卡死 循环无限次,真的一点也没懂的啊。

huanglanting 发表于 2016-5-9 23:04:30

loop时 先cx=cx-1,cx=0就向下走,如果读取的数字为0,那么cx=0,必须要inc 加1才能满足cx-1后=0,然后跳出循环,这是 bx已经加1,所以 ok: dec bx

zzzz76 发表于 2016-5-10 10:48:07

一楼正解啊,不加就boom boom boom 了

兰陵月 发表于 2016-5-11 13:28:27

huanglanting 发表于 2016-5-9 23:04
loop时 先cx=cx-1,cx=0就向下走,如果读取的数字为0,那么cx=0,必须要inc 加1才能满足cx-1后=0,然后跳出 ...

如果找到cx=0,不inc cx
则0-1=FFFF,会不断循环,最后陷入死循环。

这个题目构思非常巧妙,编程思想值得借鉴啊
页: [1]
查看完整版本: 9.3检测点问题