Y.H 发表于 2011-5-7 14:25:30

第九章:检测题9.3-->指令的使用方法和该题的一些问题!

刚刚看完这节的视频.以为这个题目轻而易举的,谁知道一大堆问题来了!
我们看程序:
assume cs:code
code segment
start:   mov ax,2000h
             mov ds,ax
             mov bx,0
s:          mov cl,
             mov ch,0
                                     ;问题 这时是填什么指令?loop ok(按题目要求填的)还是 jcxz ok (运用知识扩张的)就在这里问题来了,下面再讨论这里
       inc bx
loop s

ok:      dec ok
             mov dx,bx
             mov ax,4c00h
             int 21h
code ends
end start

如果那里填的指令时 LOOP OK(我也不知道填这指令对不对 暂且 先填LOOP 标号 这个格式的指令)
那么:如果第一次执行时2000:0里面就为0,bx=0 cx=0 Loop ok就不会循环 然后 inc bx 再然后 loop s 咋办 还 cx-- ?
好吧 就算不减 那就不循环咯 那就往下面去吧 dec bx 好吧 正确了 但关键是如果第一次执行时2000:0为1那么LOOP OK 这里把CX减1为零就不会跳到标号OK这里的吧? 然后又是 inc bx 再 LOOP S(还减吗?)再 DEC BX 然后 大家都知道了吧 根本不是预想的正确值

好 在用JCXZ OK 这条指令试试
用了这条指令 如果第一次执行 2000:0出为零 那么就会跳到标号OK处吧?跳了 然后为什么 DEC BX 这里为什么减掉BX的值不必要的啊?
好吧如果第一次执行2000:0不是0 是1那么 JCXZ OK 就不跳了 就 INC BX 然后 loop s 把cx中的1减掉为0 那就往下面去了吧 这时 2000:0根本就不是0啊 那他也往下面去了 那就错了啊!

希望大家帮我指出我的错误 可能我陷入了死胡同里了!帮我纠正顺便给出正确的程序! 谢谢 ……










Y.H 发表于 2011-5-7 14:29:08

好吧 上面有个地方打错了 就是 OK: DEC OK 改为:ok: dec bx

干点坏事sky 发表于 2016-5-21 18:18:55

OK: DEC OK 改为:ok: dec bx
页: [1]
查看完整版本: 第九章:检测题9.3-->指令的使用方法和该题的一些问题!