- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11.8 cmp指令 现在我们可以看出比较指令的设计思路,即:通过做减法运算,影响标志寄存器,标志寄存器的相关位记录了比较的结果。 反过来看上面的例子 cmp ax,ax 11.8 cmp指令 指令 cmp ax,bx 的逻辑含意是比较ax和bx中的值,如果执行后: 11.8 cmp指令 同 add、sub 指令一样,CPU 在执行cmp指令的时候,也包含两种含义: 进行无符号数运算和进行有符号数运算。 所以利用cmp指令可以对无符号数进行比较,也可以对有符号数进行比较。 11.8 cmp指令 上面所讲的是用 cmp 进行无符号数比较时,相关标志位对比较结果的记录。 下面我们再来看一下如果用cmp来进行有符号数比较时,CPU用哪些标志位对比较结果进行记录。 11.8 cmp指令 我们以cmp ah,bh为例进行说明: cmp ah,bh 如果(ah)=(bh) 则(ah)-(bh)=0,所以:ZF=1; 如果(ah)≠(bh) 则(ah)-(bh) ≠0,所以:ZF=0; 所以,我们根据cmp指令执行后ZF的值,就可以知道两个数据是否相等。 11.8 cmp指令 我们继续看,如果(ah)(bh)则可能发生什么情况呢? 对于有符号数运算,在 (ah)<(bh) 情况下,(ah)-(bh)显然可能引起SF=1,即结果为负。 11.8 cmp指令 比如: (ah)=1,(bh)=2: 则(ah)-(bh)=0FFH,0FFH 为 -1 的补码,因为结果为负,所以SF=1。 (ah)=0FEH,(bx)=0FFH: 则(ah)-(bh)=2-(-1)=0FFH,因为结果为负,所以SF=1。 11.8 cmp指令 通过上面的例子,我们是不是可以得到这样的结论: cmp 操作对象1,操作对象2 指令执行后,SF=1,就说明操作对象1<操作对象2? 当然不是。 我们再看两个例子。 11.8 cmp指令 (ah)=22H,(bh)=0A0H: 则(ah)-(bh)=34-(-96)=82H,82H是-126的补码,所以SF=1。 这里虽然SF=1,但是并不能说明(ah)(bh),因为显然34-96。 11.8 cmp指令 两个有符号数A 和B 相减,得到的是负数,那么可以肯定AB,这个思路没有错误; 关键在于我们根据什么来断定得到的是一个负数。 CPU将 cmp 指令得到的结果记录在flag的相关标志位中。 11.8 cmp指令 我们可以根据指令执行后,相关标志位的值来判断比较的结果。 单纯地考察SF 的值不可能知道结果的正负。因为SF 记录的只是可以在计算机中存放的相应位数的结果的正负。 比如add ah, al执行后,SF记录的是ah中的8位二进制信息所表示的数据的正负。 11.8 cmp指令 cmp ah,bh执行后,SF记录的是(ah) -(bh)所得到的8位结果数据的正负; 虽然这个结果没有在我们能够使用的寄存器或内存单元中保存,但是在指令执行的过程中,它暂存在CPU 内部的暂存器中。 11.8 cmp指令 所得到的相应结果的正负,并不能说明,运算所应该得到的结果的正负。 这是因为在运算的过程中可能发生溢出。 如果有这样的情况发生,那么,SF的值就不能说明任何问题。 11.8 cmp指令 比如: mov ah,22H mov bh,0A0H sub ah,bh 结果SF=1,运算实际得到的结果是(ah)=82H,但是在逻辑上,运算所应该得到的结果是:34-(-96)=130。 11.8 cmp指令 就是因为130 这个结果作为一个有符号数超出了-128~127这个范围,在ah 中不能表示,而ah中的结果被CPU当作有符号数解释为-126。 而SF被用来记录这个实际结果的正负,所以SF=1。 但SF=1不能说明在逻辑上运算所得的正确结果的正负。 11.8 cmp指令 又比如: mov ah,0A0H mov bh,0CBH cmp ah,bh 结果SF=1,运算 (ah)-(bh) 实际得到的结果是D5H,但是在逻辑上,运算所应该得到的结果是:160-(-53)=213。 11.8 cmp指令 但是逻辑上的结果的正负,才是cmp指令所求的真正结果,因为我们就是要靠它得到两个操作对象的比较信息。 所以cmp 指令所作的比较结果,不是仅仅靠SF就能记录的,因为它只能记录实际结果的正负。 11.8 cmp指令 我们考虑一下 ,两种结果之间的关系,实际结果的正负,和逻辑上真正结果的正负,它们之间有多大的距离呢? 从上面的分析中,我们知道,实际结果
您可能关注的文档
最近下载
- 最新2023版知识产权贯标GBT29490 09知识产权维护运用控制程序(含表单)[知识产权合规管理体系文件].docx
- 煤矿合法股权转让协议9篇.docx VIP
- GB_T 9711-2023石油天然气工业 管线输送系统用钢管.doc VIP
- 导体结构设计.xls VIP
- 电梯安全风险管控清单.doc VIP
- 生殖医学中心专业技术人员考核试题及答案.docx VIP
- 2024年度健康体检大数据蓝皮书.pdf
- 部编版语文六年级上册第四单元教案+教学反思(共6篇).pdf VIP
- 球墨铸铁管与其它管材的连接件技术规范.docx VIP
- NB∕T 11273-2023 工业锅炉设计文件鉴定技术导则.pdf
文档评论(0)