汇编-进位标志VS溢出标志

标签 assembly x86 carryflag eflags signed-overflow

我有下一个代码:

mov al, -5
add al, 132
add al, 1

据我检查,溢出标志和进位标志将在第一个操作中设置,而在第二个操作中,仅设置溢出。

但我不明白为什么:

  1. 在无符号数中,结果为 143 (8FH),适合 8 位无符号数(小于 255)=> 不应设置进位标志。在有符号数中,结果为127,适合8位有符号,不应该设置溢出。

怎么了?谢谢。

最佳答案

当两个正数相加的结果为负数或 两个负数相加的结果是正数。 例如: +127+1=?

+127=0111 1111
  +1=0000 0001
     ---------
     1000 0000 

当我们查看两个操作数的符号位和 结果发现发生了溢出,答案不正确。

关于汇编-进位标志VS溢出标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8496185/

相关文章:

delphi - 将 Delphi 风格的 ASM 翻译成英文?

c - 如何修复 68HC11 编译器生成无效的 JMP/BRA 代码

assembly - 如果距开始位置 <128 字节,则访问结构成员会更快?

c++ - 为什么 SSE 有 128 位加载功能?

assembly - ASCII 调整和十进制调整指令如何工作?

assembly - x86 sbb 与第一个和第二个操作数具有相同的寄存器

c++ - 使用进位标志的高效 128 位加法

assembly - 10 个用户在汇编中输入数字的平均值

c - 理解这些汇编指令