如何设置两个数字(32位)相加的进位标志

时间:2018-11-09 00:50:59

标签: assembly x86 carryflag

我使用read_int得到了两个数字,并加上了两个数字。 最后,我检查了EFLAGS(dump_regs)。

因此,要设置进位标记,我尝试了“ 4,294,967,295 + 1” 但是,进位标记未设置。(“ CF”未显示在屏幕中)

如果我要设置进位标志,我需要什么数字?

Output

x = value
n = index

minimum: 1
roll: 1
n: 4
x: 1
1
roll: 2
n: 3
x: 2
2
roll: 3
n: 2
x: 3
3
roll: 5
n: 1
x: 5
5

然后我输入了4294967295和1

1 个答案:

答案 0 :(得分:0)

如果运行以下代码,则可以使自己相信进位标志已设置:

call read_int    ;Input say 150
mov ebx, eax
call read_int    ;Input say 180

add al, bl       ;This produces a carry because 150+180=330 DOESN'T FIT the 8-bit register AL

setc al          ;AL becomes 1
movzx eax, al    ;EAX becomes 1
call print_int   ;Show it

用不会产生进位的数字进行验证:

call read_int    ;Input say 80
mov ebx, eax
call read_int    ;Input say 125

add al, bl       ;This produces NO carry because 80+125=205 DOES FIT the 8-bit register AL

setc al          ;AL becomes 0
movzx eax, al    ;EAX becomes 0
call print_int   ;Show it