assembly - ADD 可以同时设置进位和溢出标志吗?

标签 assembly x86 integer-overflow

我已经从事 assembly 工作几个月了。我知道进位标志和溢出标志的区别。

我的问题(我在谷歌上找不到答案)是是否可以同时激活进位和溢出标志。我不知道我在哪里听说只能激活一个标志(或进位或溢出)(不能同时激活)。

假设我们有下一个代码:

xor eax, eax
xor ebx, ebx
mov al, 128
mov bl, 128
add al, bl

最后一行是否激活了 C 和 O 标志? (注意 al 和 bl 符号相同)

在上述情况下,我会说只有进位会被激活。我错了吗?

最佳答案

您可以将此结果推广到同时设置 C 和 O 的确切条件。加法中 C 和 O 的规则是(至少这是一种可能的表述)

  • C = 高位进位
  • O = 最高位进位 XOR 最高位进位

因此它们都可以为真,即恰好在最高位有进位但没有进位时。

关于assembly - ADD 可以同时设置进位和溢出标志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182045/

相关文章:

c - 用更大数组的字符填充 char 数组 | @ assembly IA32

arrays - 从 gdb 中的 .bss 打印 "array"

winapi - 如何在MASM32中循环播放声音文件

GCC ASM 优化问题还是隐形幽灵?

mips - mips 中的算术溢出

assembly - Linux 上 x86 的内存寻址模式解释

assembly - x86 汇编中的 LEA

c - 为什么 gcc 在优化版本中使用 jmp 调用函数

c++ - C++中俄罗斯农民算法中的整数溢出

rust - 在 Rust 中左移 (<<) 时如何惯用地测试溢出?