鱼C论坛

 找回密码
 立即注册
查看: 3052|回复: 2

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

[复制链接]
发表于 2011-5-7 14:25:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
刚刚看完这节的视频.以为这个题目轻而易举的,谁知道一大堆问题来了!
我们看程序:
assume cs:code
code segment
start:     mov ax,2000h
             mov ds,ax
             mov bx,0
s:          mov cl,[bx]
             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啊 那他也往下面去了 那就错了啊!

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










想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-5-7 14:29:08 | 显示全部楼层
好吧 上面有个地方打错了 就是 OK: DEC OK 改为:ok: dec bx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2016-5-21 18:18:55 | 显示全部楼层
OK: DEC OK 改为:ok: dec bx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 16:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表