Понимание регистра EFL в x86, переход от 1 к 0 до -1 и обратно - PullRequest
0 голосов
/ 23 февраля 2020

Моя книга и большинство источников показывают, что когда флаг переноса изменяется с 0 на 1, но я не понимаю, почему регистр EFL изменяет значения гораздо большими приращениями, как показано ниже: я помещаю комментарии, показывающие изменение значения регистра. как при переходе от 0 к 1 и обратно к 0 до -1.

mov eax , 0FFFFFFFFh
add eax , 1         ;flag from A12 to 257
inc eax             ; flag to 203
neg eax             ; flag to 297
inc eax             ; flag to 257
dec eax             ; flag to 297

inc eax             ; flag to 257
dec eax             ; flag to 297

mov ebx , 0         ;flag doesnt move
sub ebx , 1         ;flag doesnt move

inc ebx             ; flag move to 257
dec ebx             ; flag move to 297


dec eax             ; flag to 283

mov ebx , 0         ;flag doesnt move
sub ebx , 1         ;flag to 297

mov eax , 00FFFFFFFh    ;flag doesnt move
add eax , 1         ;flag to 216

mov ebx , 0Fh           ;flag doesnt move
sub ebx , 1         ;flag to 202

1 Ответ

1 голос
/ 23 февраля 2020

Как отметил @prl в комментариях, не имеет смысла рассматривать флаги как одно значение. Биты в регистре флагов - это отдельные флаги, и помимо IOPL их следует рассматривать как отдельные объекты.

Википедия имеет описание и ссылки, которые служат хорошей отправной точкой для точного определения того, как они работа.

...