Sing 发表于 2012-2-24 21:13:24

关于检测点9.1jmp指令的用法

本人是汇编新手,现在看到关于jmp指令的运用,遇到不懂的地方,请大家帮我解决一下。
检测点9.1那三题不会做,还请您把详细过程教授给我,在这谢谢你们了。

风剑河 发表于 2012-2-24 21:13:25

当()=0时,我们就找到了第一个值为0的字符,然后(cl)=()=0cx=0,然后是我们填程序的地方,如果我们能用jcxz指令。再看转移到标号ok之后的指令,bx自减1,然后才是dx=bx,那么bx就不是“0”的偏移地址了,所以此处不能用jcxz。那么以cx=0为条件的转移指令还有什么呢?那就是loop了,loop是当cx不等于0时转移,cx=0时继续下条指令。程序中已经有个loop了,当cx=0时CPU就会执行loop后面一条指令,即bx自减1。这么来看此处似乎不需要填什么东西程序就能满足要求了。但是loop循环的关键是CX,CPU对loop的执行过程是:读取指令loop s → ip=ip+2 → (cx)=(cx)-1 → 判断cx是否为零 →cx不为零则ip指向标号S,cx等于零,则ip不变,读取下一条指令。所以当此程序CX=0时,loop命令会先令cx-1=-1再判断cx是否为零,我们为了使cx-1之后仍然为零让loop后不跳转,那么此处我们应该填入:add cx,1
或者 inc cx

Sing 发表于 2012-2-27 09:46:47

风剑河 发表于 2012-2-25 14:28 static/image/common/back.gif
当()=0时,我们就找到了第一个值为0的字符,然后(cl)=()=0cx=0,然后是我们填程序的地方,如果我们能用jc ...

非常感谢你的帮助。

非同凡想 发表于 2012-2-27 23:57:08

建议你仔细挺好小甲鱼针对这章内容的讲解后再来做题,另外,如果真的想寻求帮助,建议你把具体哪里不懂的地方说明,也好我们来共同商议答案

Sing 发表于 2012-3-2 13:57:00

非同凡想 发表于 2012-2-27 23:57 static/image/common/back.gif
建议你仔细挺好小甲鱼针对这章内容的讲解后再来做题,另外,如果真的想寻求帮助,建议你把具体哪里不懂的地 ...

嗯嗯。好的。谢谢你的建议哦。
页: [1]
查看完整版本: 关于检测点9.1jmp指令的用法