- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
11.9 检测比较结果的条件转移指令 至于究竟在je之前使不使用cmp指令,在于我们的安排。 je检测的是ZF位置,不管je 前面是什么指令,只要CPU执行je指令时,ZF=1,那么就会发生转移。 比如 11.9 检测比较结果的条件转移指令 比如: mov ax,0 add ax,0 je s inc ax s: inc ax 执行后,(ax)=1。add ax,0使得ZF=1,所以je指令将进行转移。 11.9 检测比较结果的条件转移指令 可在这个时候发生的转移确不带有“相等则转移”的含义。因为此处的je指令检测到的ZF=1 ,不是由cmp等比较指令设置的,而是由add指令设置的,并不具有“两数相等”的含义。 但无论“ZF=1” 的含义如何,是什么指令设置的,只要是ZF=1,就可以使得je指令发生转移。 11.9 检测比较结果的条件转移指令 CPU提供了cmp指令,也提供了 je 等条件转移指令,如果将它们配合使用,可以实现根据比较结果进行转移的功能。 但这只是“如果”,只是一种合理的建议,和事实上常用的方法。 但究竟是否配合使用它们,完全是你自己的事情。 这就好像,call和ret指令的关系一样。 11.9 检测比较结果的条件转移指令 对于jne、jb、jnb、ja、jna等指令和cmp指令配合使用的思想和je相同,可以自己分析一下。 虽然我们分别讨论了cmp指令和与其比较结果相关的有条件转移指令,但是它们经常在一起配合使用。 所以我们在联合应用它们的时候,不必再考虑cmp指令对相关标志位的影响和je 等指令对相关标志位的检测。 11.9 检测比较结果的条件转移指令 因为相关的标志位,只是为cmp和je等指令传递比较结果。 我们可以直接考虑cmp和je等指令配合使用时,表现出来的逻辑含义。 它们在联合使用的时候表现出来的功能有些像高级语言中的IF语句。 11.9 检测比较结果的条件转移指令 我们来看一组程序: data段中的8个字节如下: data segment db 8,11,8,1,8,5,63,38 data ends (1)编程:统计data段中数值为8的字节的个数,用ax保存统计结果。 (2)编程:统计data段中数值大于8的字节的个数,用ax保存统计结果。 (3)编程:统计data段中数值小于8的字节的个数,用ax保存统计结果。 11.9 检测比较结果的条件转移指令 (1)编程:统计data段中数值为8的字节的个数,用ax保存统计结果。 编程思路:初始设置(ax)=0,然后用循环依次比较每个字节的值,找到一个和8相等的数就将ax的值加1。 程序如下 另一种实现方式 11.9 检测比较结果的条件转移指令 mov ax,data mov ds,ax mov bx,0 ;ds:bx指向第一个字节 mov ax,0 ;初始化累加器 mov cx,0 s: cmp byte ptr [bx],8 ;和8进行比较 jne next ;如果不相等转到next,继续循环 inc ax ;如果相等就将计数值加1 next: inc bx loop s ;程序执行后: (ax)=3 11.9 检测比较结果的条件转移指令 mov ax,data mov ds,ax mov bx,0 ;ds:bx指向第一个字节 mov ax,0 ;初始化累加器 mov cx,0 s: cmp byte ptr [bx],8 ;和8进行比较 je ok ;如果相等就转到ok,继续循环 jmp short next ;如果不相等就转到next,继续循环 ok: inc ax ;如果相等就将计数值加1 next: inc bx loop s 11.9 检测比较结果的条件转移指令 比起第一个程序,它直接的遵循了“等于8则计数值加1”的原则,用je指令检测等于8的情况,但是没有第一个程序精简。 第一个程序用 jne 检测不等于 8 的情况 ,从而间接地检测等于 8 的情况。 要注意在使用 cmp 和条件转移指令时的这种编程思想。
原创力文档


文档评论(0)