Intel x86 Assembly& Microarchitecture 32位寄存器

示例

英特尔生产80386时,他们从16位处理器升级到了32位处理器。32位处理意味着两件事:要处理的数据都是32位,而要访问的内存地址是32位。为此,他们仍然与早期的处理器兼容,因此为处理器引入了全新的模式。它处于16位模式还是32位模式-但是您可以基于指令逐个覆盖此模式,以实现数据,寻址或两者!

首先,他们必须定义32位寄存器。他们通过简单地将现有的8名来自16位扩展到32位,并有给他们“扩展”的名字E前缀:EAX,EBX,ECX,EDX,ESI,EDI,EBP,和ESP。这些寄存器的低16位与以前相同,但寄存器的前半部分可用于诸如ADD和的32位操作CMP。上半部分无法像使用8位寄存器那样单独访问。

处理器必须具有单独的16位和32位模式,因为英特尔在许多操作中使用了相同的操作码:CMP AX,DX在16位模式和CMP EAX,EDX32位模式下,它们具有完全相同的操作码!这意味着相同的代码不能在两种模式下运行:

“立即移入AX”的操作码为0xB8,后跟立即数的两个字节:0xB8 0x12 0x34

“立即移动到EAX”的操作码为0xB8,后跟即时值的四个字节:0xB8 0x12 0x34 0x56 0x78

因此,assember必须知道处理器在执行代码时所处的模式,以便知道发出正确数量的字节。

以上是 Intel x86 Assembly& Microarchitecture 32位寄存器 的全部内容, 来源链接: utcz.com/z/337872.html

回到顶部