进位标志未设置。 86 ASM

问题描述:

可能重复:
about assembly CF(Carry) and OF(Overflow) flag进位标志未设置。 86 ASM

我想看看是否增加两个无符号双字后发生矣。

这样的:

 add edx, eax   ; edx will hold the numeric value 
     wait     ; not really needed 
     jc bad     ; jmp to bad if carry bit is set 
     jo bad     ; jmp to bad if overflow bit is set (Yes for signed) 

然而,无论是溢出标志或携带标志相应地设置。出于测试的目的,我确实会增加32位寄存器的值。 (在添加之后,值将环绕)

如何检查两个数字是否相加会导致溢出?

+1

在执行add指令之前,edx和eax的值是什么?如果他们都是0,那么不,我怀疑既没有进位也没有溢出。 – 2012-03-15 03:56:59

+0

@Mike,在问题中我注意到我确保edx和eax中的值足够大,可以引起溢出或携带。但无论如何,进旗不设置。 – Dacto 2012-03-15 04:19:12

+2

删除'wait'。然后查看添加和减去整数以及如何在[本答案](http://*.com/a/8037485/968261)中设置进位和溢出相关问题的示例。很可能你的数字太小而不能导致CF = 1或OF = 1。您也可能会混淆读写寄存器(您的edx或eax没有加载您需要的数据,或者由于其他代码错误而无法区分溢出和非溢出情况)。告诉我们更多关于你的代码或者展示它。 – 2012-03-15 05:24:20

溢出用于带符号的加法和减法。

你应该看看进位标志的无符号加和减法。

+0

在我的问题中,我注意到进位标志也没有适当设置。 – Dacto 2012-03-15 04:18:02