学习笔记-----浅谈汇编指令CMP运行机制

本文探讨了汇编指令CMP的工作原理,CPU如何通过CMP指令进行减法运算并更新标志位。内容包括:1. CMP指令执行后如何影响ZF, SF, CF, OF标志位;2. 无符号数和有符号数比较的判断依据;3. CMP指令结合跳转指令实现条件执行的示例,强调了CPU指令执行的顺序性以及避免意外执行的重要性。" 109580421,312817,Qt QML与osgEarth集成问题及解决,"['OpenGL', 'Qt应用开发', 'QML', 'osgEarth', '图形渲染']
摘要由CSDN通过智能技术生成

在汇编中,CMP和JMP指令常常用于比较操作,而且查看反汇编源码时也发现不管是.IF伪指令还是其他的底层都是用CMP实现的。

指令格式:

CMP 目的操作数,源操作数

计算机在遇到CMP指令的时候,CPU将目的操作数和源操作数做减法(即目的操作数-源操作数)从而根据运算结果修改标志位(如OF, CF , ZF, SF等)的值,然后接下来用相应的跳转指令来进行选择执行哪一段代码

另外,操作数有无符号是个头疼的事情,CPU并不能确定它运算的是有符号的减法还是无符号的减法,所以CPU会产生两套标志位。

由于我学的不是很深,下面只是简单的讨论一下CMP指令执行后标志位的结果(有错误请指出)


ZF: 置零标志位,当结果为0的时候ZF被赋值1

SF:负数标志位,当结果是负数的时候被赋值1

CF:进位/借位标志位,当最高位向它的上一位有借位或者进位的时候被赋值1

OF:溢出标志位,当有益处时(即运算结果超过了它的类型(如BYTE, WORD, DWORD)所能表示的范围)被赋值1

溢出的说明:两个正数相加,两个负数相加,正数减负数,负数减正数  都有可能溢出

      正数溢出变负数,负数溢出变正数

1:无符号数的比较

目的操作数 < 源操作数 ZF=0

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值