汇编语言中常用指令对标志位寄存器的影响

参考了《汇编语言 基于x86处理器》第七版
转载请注明出处
如果有错误的地方请指正,谢谢。

算术运算(ADD/SUB)影响标志位

ADD指令

  1. 有符号:
    两数相加,如果超过有符号数最大取值范围时(如8位有符号数大于127),OF置位。

  2. 无符号:
    两数相加,如果超过无符号数最大取值范围时(如8位无符号数最大取255)CF置位。

         根据目标操作数修改:OF/CF/ZF/SF/AF/PF

示例:-128-1执行后,CF标志位与OF标志位分别是多少? CF=0 OF=1

SUB指令

  1. 有符号:
    两数相减,如果超过有符号数最小取值范围时(如8位有符号数小于-128),OF置位。

  2. 无符号:
    两数相减,如果被减数小于减数,CF置位。

         根据目标操作数修改:OF/CF/ZF/SF/AF/PF

示例:-128+1执行后,CF标志位与OF标志位分别是多少? CF=0 OF=0

NEG指令

  • NEG是汇编指令中的求补指令,NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位取反后加1。
  • 对任何非0的操作数使用NEG指令都将CF置位。
  • 根据目标操作数修改:CF/OF/ZF/SF/AF/PF

INC/DEC指令影响标志位

INC指令

  • 不影响进位标志位,根据目标操作数修改溢出标志位、符号标志位、奇偶标志位、零标志位,辅助进位标志位。 OF/SF/PF/ZF/AF

DEC指令

  • 不影响进位标志位,根据目标操作数修改溢出标志位、符号标志位、奇偶标志位、零标志位,辅助进位标志位。 OF/SF/PF/ZF/AF

布尔指令影响标志位

布尔指令:AND/OR/NOT/XOR/TEST

AND指令

  • 清除进位标志位和溢出标志位,根据目标操作数修改符号标志位、奇偶标志位、零标志位,辅助进位标志位无定义。 SF/PF/ZF

OR指令

  • 清除进位标志位和溢出标志位,根据目标操作数修改符号标志位、奇偶标志位、零标志位,辅助进位标志位无定义。 SF/PF/ZF

NOT指令

  • 不修改标志位

XOR指令

  • 清除进位标志位和溢出标志位,根据目标操作数修改符号标志位、奇偶标志位、零标志位,辅助进位标志位无定义。 SF/PF/ZF

TEST指令

  • 清除进位标志位和溢出标志位,根据目标操作数修改符号标志位、奇偶标志位、零标志位,辅助进位标志位无定义。 SF/PF/ZF

移位指令影响标志位

移位指令:逻辑移位(SHL/SHR)、算术移位(SAL/SAR)、循环移位(ROL/ROR)、带进位的循环移位(RCL/RCR)、双精度移位(SHLD/SHRD)

逻辑移位(SHL/SHR)

  • 进位标志位为移入CF的位
  • 根据目标操作数修改溢出标志位、符号标志位、零标志位、奇偶标志位,辅助进位标志位无定义。 CF/OF/SF/ZF/PF

算术移位(SAL/SAR)

  • 进位标志位为移入CF的位
  • 根据目标操作数修改溢出标志位、符号标志位、零标志位、奇偶标志位,辅助进位标志位无定义。 CF/OF/SF/ZF/PF

循环移位(ROL/ROR)

  • 进位标志位为移入CF的位
  1. 移位次数等于1时:
    如果移位后的符号与移位前的符号相反,溢出标志位置位。

  2. 移位次数大于1时:
    溢出标志位无定义。

  • 不修改符号标志位、零标志位、奇偶标志位、辅助进位标志位。

带进位的循环移位(RCL/RCR)

  • 进位标志位为移入CF的位
  1. 移位次数等于1时:
    如果移位后的符号与移位前的符号相反,溢出标志位置位。

  2. 移位次数大于1时:
    溢出标志位无定义。

  • 不修改符号标志位、零标志位、奇偶标志位、辅助进位标志位。

双精度移位(SHLD/SHRD)

  • 进位标志位为移入CF的位

  • 根据目标操作数修改溢出标志位、符号标志位、零标志位、奇偶标志位,辅助进位标志位无定义。
    CF/OF/SF/ZF/PF

乘/除法影响标志位

包括无符号乘法(MUL)、有符号乘法(IMUL)、无符号除法(DIV)、有符号除法(IDIV)

无符号乘法(MUL)

  • 如果乘积的高半部分不为0则进位标志位、溢出标志位置位。
    也就是说运算结果超过无符号数最大取值范围(如8位无符号数大于255),则进位标志位、溢出标志位置位。

  • 符号标志位、零标志位、辅助进位标志位、奇偶标志位无定义

有符号乘法(IMUL)

单操作数

  • 如果乘积的高半部分不是低半部分符号位的扩展,那么进位标志位、溢出标志位置位。
  • 也就是说运算结果不在8位有符号数取值范围内(如8位有符号数取值:-27 ~ 27-1),进位标志位、溢出标志位置位。
  • 符号标志位、零标志位、辅助进位标志位、奇偶标志位无定义

双操作数

  • 按照目标操作数的大小来截取乘积,如果被丢弃的是有效位,那么进位标志位、溢出标志位置位。
  • 也就是说运算结果不在8位有符号数取值范围内(如8位有符号数取值:-27 ~ 27-1),进位标志位、溢出标志位置位。
  • 符号标志位、零标志位、辅助进位标志位、奇偶标志位无定义

三操作数

同双操作数

无符号除法(DIV)

执行DIV或IDIV后,所有算术运算状态标志位的值都不确定。

有符号除法(IDIV)

执行DIV或IDIV后,所有算术运算状态标志位的值都不确定。

未完,有待添加

  • 12
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值