我一直在尝试在我的Linux操作系统上学习32位Intel x86 nasm语法汇编,我遇到了关于四个通用32位寄存器的问题。
根据我 的想法,eax是一个32位寄存器,应该用和 16位寄存器ax,后者被细分为ah(高8位)和al(低8位)。和ebx,ecx和edx一样。
然而,在阅读一篇快速文章后,我变得有些困惑。
32位寄存器是由16位寄存器组成的(后者又由两个8位寄存器组成)还增加了16位?
到目前为止,我在谷歌上看到的所有结果都说明了它们的用途,而不是它们的实际构成。
答案 0 :(得分:4)
你完全正确。其中四个通用寄存器EAX
,EBX
,ECX
和EDX
组成如下(我在示例中使用了累加器):
AX = AH || AL
AX
的16位扩展名,它构成了dword。所以,EAX = EAX(31:16) || AX
。RAX = RAX(63:32) || EAX
。 ||
运算符是连接运算符。您应该注意,此规则不适用于其他四个通用寄存器ESP
,EBP
,ESI
和EDI
。
答案 1 :(得分:0)
正如您所设想的那样,32位寄存器(如eax
)可以在其最重要的部分访问,因为ax
和ax
本身被分割为ah
并且al
... ebx
同样如此......