当前位置: 首页 > article >正文

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

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

文章目录

  • 算术运算(ADD/SUB)影响标志位
    • ADD指令
    • SUB指令
    • NEG指令
  • INC/DEC指令影响标志位
    • INC指令
    • DEC指令
  • 布尔指令影响标志位
    • AND指令
    • OR指令
    • NOT指令
    • XOR指令
    • TEST指令
  • 移位指令影响标志位
    • 逻辑移位(SHL/SHR)
    • 算术移位(SAL/SAR)
    • 循环移位(ROL/ROR)
    • 带进位的循环移位(RCL/RCR)
    • 双精度移位(SHLD/SHRD)
  • 乘/除法影响标志位
    • 无符号乘法(MUL)
    • 有符号乘法(IMUL)
      • 单操作数
      • 双操作数
      • 三操作数
  • 无符号除法(DIV)
  • 有符号除法(IDIV)

算术运算(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后,所有算术运算状态标志位的值都不确定。

未完,有待添加

http://www.lryc.cn/news/2416513.html

相关文章:

  • 开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享
  • C++编程学习50个经典网站 强力推荐
  • 备战数学建模48-数学规划模型终结篇(全)(攻坚战13)
  • C# 使用cefsharp点播m3u8在线视频流
  • Shellshock
  • invalidateRect解析
  • 【域名购买到备案及公安备案,全流程解析】
  • (五十一)时间序列分析二:平稳时间序列分析(ARMA)
  • 6to4隧道和6in4隧道的区别
  • 高分一号影像处理流程
  • postgresql 设置执行命令超时时间
  • nginx + lua环境配置
  • 【Excel系列9】-- 28个基础图表
  • 在JavaEye晃了一个来月真的感慨。
  • 从零开始搭建 reviewboard 环境(四) -- reviewboard 的安装过程中的问题解决
  • IP欺骗
  • 使用NE555制作多谐振荡器
  • MFC的坐标转换GetClientRect/GetWindowRect/ClientToScreen/GetCursorPos/ScreenToClient
  • Collections.synchronizedMap()与ConcurrentHashMap的区别
  • C++中critical section的使用
  • 高等数学学习笔记——第九十九讲——一阶线性微分方程组
  • 初学C语言以及C语言的常见概念
  • Sublime text 3最新注册码
  • Windows Installer Clean Up 软件正常卸载不了时,请它帮忙!
  • cocostudio使用基本要点汇总
  • AIS(自动识别系统)介绍
  • 【.NET】.NET 框架概述
  • fastDB个人使用心得
  • 进化算法——多目标优化
  • MNE溯源fieldtrip官网教程