Nasm - Как программа отслеживает, в каком регистре хранятся отрицательные или положительные значения - PullRequest
1 голос
/ 22 декабря 2019

Очевидно, есть Знак-Флаг. Но когда у меня есть фрагмент кода, например:

             ;starts with parry, zero set
mov eax, 100 ; mov does not affect the flags
neg eax      ; sets carry, adjust and sign, unsets zero
mov ebx, 4000000000; mov does not affect the flags
mov ecx, eax ; mov does not affect the flags
mov edx, 50  ; mov does not affect the flags

add ebx, edx ; unsets all set flags, value of ebx is 4000000050

У меня возникают проблемы с пониманием того, как программа знает, что add ebx, edx равно 4000000050.

Помните, что флаг знака все еще установленот отрицания eax.

И поскольку сборка не имеет типов, подобных C, которые различают signed и unsigned и ebx установлен старший бит, значение, хранящееся в ebx, может быть его действительнымзначение или это может быть его 2 дополнением. Мы не знаем.

По крайней мере, это мое понимание. Так как же программа узнает, что ebx равно +4000000000, а не отрицательному значению, дополнение 2 к которому равно 4000000000 в двоичном.

...