Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 未设置进位标志。x86 ASM_Assembly_Overflow - Fatal编程技术网

Assembly 未设置进位标志。x86 ASM

Assembly 未设置进位标志。x86 ASM,assembly,overflow,Assembly,Overflow,可能重复: 我正在尝试查看在添加两个无符号DWORD之后是否发生进位 像这样: 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 ;

可能重复:

我正在尝试查看在添加两个无符号DWORD之后是否发生进位

像这样:

       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位reg的值太大。(添加后,值环绕)


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

溢出用于有符号加减


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

在执行加法指令之前,edx和eax的值是多少?如果两者都为0,则为否,我怀疑不会设置进位或溢出。@Mike,在问题中,我注意到我确保edx和eax中的值足够大,足以导致和“溢出”或进位。但无论如何,未设置进位标志。请删除
wait
。然后,在相关问题中查看整数加减的示例以及进位和溢出的设置。很可能您的数字太小,导致CF=1或OF=1。也可能是读写寄存器时出错(edx或eax没有加载所需的数据,或者由于某些其他代码错误,无法区分溢出和非溢出情况)。告诉我们有关您的代码的更多信息或显示它。您真的非常想在调试器中执行上述操作,并查看
edx
eax
之前的
add edx,eax
以及
add edx,eax
之后的
eflags
中的内容-1。如果eax=0xffffffff和edx=0写入时,
添加edx,eax
将设置进位标志。如果不是这样,您可能没有正确读取CF,或者无法确保eax和edx实际持有您声称持有的值。在我的问题中,我注意到进位标志也没有正确设置。