什么样的价值是EAX每个指令执行后?

问题描述 投票:1回答:1

我想通过在MASM32程序代码的各段以跟踪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的值。我有一些疑问:

  1. MOV AL, alfa,它移动到alfa EAX寄存器,是不是AL 8位寄存器?它为什么要这样做呢?为什么WriteInt说,该值+150?
  2. 什么MOVZXMOVSX吗?
  3. 是什么MOVZX EAX, alfa办?该值都发生了变化?
  4. MOVSX EAX, alfa,为什么-106和EAX寄存器FFFFFF96?是不是因为它是负的?
assembly x86 masm cpu-registers masm32
1个回答
3
投票

您初始化qazxsw PI为0,所以该值为0

eax

该寄存器的剩余部分时,AL是不客气不改变,因此它保持不变。

为了说明这一点:

mov eax, 0
EAX-----
    AX--
    AHAL
00000000

mov al, 96h

EAX-----
    AX--
    AHAL
00000096

mov eax, -1 EAX----- AX-- AHAL ffffffff mov al, 96h EAX----- AX-- AHAL ffffff96 加载具有符号扩展的值。由于096h是负(最高位被置位),它会在符号扩展到整个32位寄存器。

qazxsw POI未签署扩展并清除位。

© www.soinside.com 2019 - 2024. All rights reserved.