Как установить флаг переноса, добавив два числа (32 бита) - PullRequest
0 голосов
/ 09 ноября 2018

Я получил два числа, используя 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

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете убедиться в том, что установлен флаг переноса, если вы запустите следующий код:

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
...