assembly - 如何在 x86 程序集中设置或清除溢出标志?

标签 assembly x86 eflags

我想编写一个简单的代码(或算法)来设置/清除溢出标志。对于设置 OF,我知道我可以使用有符号值。但我怎么能清除呢?

最佳答案

有许多可能的解决方案。

例如, test al, al 将清除 OF标志而不影响寄存器内容。

或者,如果您不想影响其他标志,您可以直接修改 *FLAGS登记。例如,在 32 位中,这看起来像:

pushfd                   ; Push EFLAGS onto the stack
and dword [esp], ~0x800  ; Clear bit 11 (OF)
popfd                    ; Pop the modified result back into EFLAGS

编辑:更改 or al, altest al, alPeter Cordes ' 推荐。 (效果相同,但出于性能原因后者更好)

关于assembly - 如何在 x86 程序集中设置或清除溢出标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798572/

相关文章:

c - 如何为 ARM 上的每个任务定义堆栈

linux - 为什么 cmp 2, 2 不等于 0

assembly - 为什么仅在使用单类时才设置溢出标志?

assembly - x86 中的方向标志

c - 没有 `...` 的可变参数函数

assembly - 以16位数字作为输入并将其显示在屏幕上

gcc - 测试指令和与指令 x86

linux - 有什么方法可以在 Linux 上将二进制文件从 x86 重新编译到 ARM?

fpu 指令崩溃,asm 代码不工作

不更改 EFLAGS 的汇编语言指令