【发布时间】:2014-03-11 19:03:43
【问题描述】:
我试图通过 MASM32 程序中代码的每个 sn-p 来跟踪 EAX 寄存器。我需要帮助解释为什么它是它的价值。这就是我所拥有的:
.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?是因为它是负面的吗?
【问题讨论】:
-
每条指令的作用应该在处理器手册中说明。如果处理器手册中有您不明白的地方,请说得更具体。
标签: assembly x86 masm cpu-registers masm32