代码之家  ›  专栏  ›  技术社区  ›  G S

16位程序集:无法取消某些寄存器的引用

  •  -1
  • G S  · 技术社区  · 7 年前

    mov si, word [reg]

    哪里 reg 是一些寄存器。如果 规则 bx ,但当它是 ax , cx dx

    1 回复  |  直到 7 年前
        1
  •  7
  •   fuz    7 年前

    bx
    si
    di
    bp
    bx + si
    bx + di
    bp + si
    bp + di
    

    同样,SIB寻址也不适用于16位寻址模式。

    如果您想使用其他索引寄存器,您可以始终使用32位寻址模式,例如。 [eax] . 只要您在80386或更新的处理器上运行代码,这种方法就可以工作。

    在32位模式和长模式下,此方案被更改,因此8个可能的索引寄存器中的7个引用eax、ebx、ecx、edx、esi、edi和ebp,而引用esp的内容则表示存在sib字节,从而允许已知的 [base+index*scale] 寻址模式。