【发布时间】:2015-07-11 09:06:04
【问题描述】:
在 x86 ASM 中,是否可以在不进行分支的加减运算时禁止溢出?例如,当从 0x01 中减去 0x02 时,它将设置为 0x00 而不是 0xFF。
我预计这可能是不可能的,所以我也有兴趣回答这个问题的更受限制的形式,其中只添加/减去 0x01。我有一个这样的想法(OF 是溢出标志):
dec eax
add eax,OF
我不知道其他架构,但是对于 i386,我找不到操作码,因为显然标志不能解释为整数并用于算术运算。我找到了一个可行的解决方案,但仅适用于未使用较高字节时的最低字节:
dec ax
sub al,ah
xor ah,ah
有没有更好的方法来做到这一点,也许也适用于更一般的情况?
【问题讨论】: