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

How can I set the carryflag adding two numbers (32bit)

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

所以,为了设置进位标志,我尝试了“4,294,967,295 + 1” 但是,没有设置进位标志。('CF' 没有在屏幕上显示)

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

    call read_int
    mov ebx, eax

    call read_int
    mov ecx, eax

    mov edx, ebx             ; add the two numbers, edx = ebx - ecx
    add edx, ecx

    mov eax, edx
    call print_int
    call print_nl
    dump_regs 1

然后我输入了 4294967295 和 1

如果您运行以下代码,您可以确信设置了进位标志:

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