参考了《汇编语言 基于x86处理器》第七版
转载请注明出处
如果有错误的地方请指正,谢谢。
文章目录
算术运算(ADD/SUB)影响标志位
ADD指令
-
有符号:
两数相加,如果超过有符号数最大取值范围时(如8位有符号数大于127),OF置位。 -
无符号:
两数相加,如果超过无符号数最大取值范围时(如8位无符号数最大取255)CF置位。
根据目标操作数修改:OF/CF/ZF/SF/AF/PF
示例:-128-1执行后,CF标志位与OF标志位分别是多少? CF=0 OF=1
SUB指令
-
有符号:
两数相减,如果超过有符号数最小取值范围时(如8位有符号数小于-128),OF置位。 -
无符号:
两数相减,如果被减数小于减数,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时:
溢出标志位无定义。
- 不修改符号标志位、零标志位、奇偶标志位、辅助进位标志位。
带进位的循环移位(RCL/RCR)
- 进位标志位为移入CF的位
-
移位次数等于1时:
如果移位后的符号与移位前的符号相反,溢出标志位置位。 -
移位次数大于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后,所有算术运算状态标志位的值都不确定。
未完,有待添加