|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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啊 那他也往下面去了 那就错了啊!
希望大家帮我指出我的错误 可能我陷入了死胡同里了!帮我纠正顺便给出正确的程序! 谢谢 ……
|
|