Я пытаюсь отслеживать регистр EAX через каждый фрагмент кода в программе MASM32. Мне нужна помощь, чтобы объяснить, почему это такая ценность. Вот что у меня есть:
.DATA
alfa BYTE 96h
.CODE
start:
MOV EAX,0 ; move 0 to eax
MOV AL,alfa ; move 96h to AL, this says the value of eax is now positive 150
MOVZX EAX,alfa ; still says EAX is 96h and value is positive 150
MOVSX EAX,alfa ; says value is negative 106 and eax register is FFFFFF96
call DumpRegs
call WriteInt
exit
END start
Я использую DumpRegs
для отображения регистров и WriteInt
для печати значения EAX. У меня есть несколько вопросов:
- Когда
MOV AL, alfa
, он перемещаетalfa
в регистр EAX, разве AL не является 8-битным регистром? почему он это делает? ПочемуWriteInt
говорит, что значение +150? - Что делают
MOVZX
иMOVSX
? - Что делает
MOVZX EAX, alfa
? Ни одно из значений не изменилось? MOVSX EAX, alfa
, почему это -106 и регистр EAX FFFFFF96? Это потому, что он отрицательный?