intel x86 32位寄存器混乱

时间:2012-02-04 00:06:53

标签: assembly 32-bit nasm cpu-registers

我一直在尝试在我的Linux操作系统上学习32位Intel x86 nasm语法汇编,我遇到了关于四个通用32位寄存器的问题。

根据我 的想法,eax是一个32位寄存器,应该用 16位寄存器ax,后者被细分为ah(高8位)和al(低8位)。和ebx,ecx和edx一样。

然而,在阅读一篇快速文章后,我变得有些困惑。

32位寄存器是由16位寄存器组成的(后者又由两个8位寄存器组成)还增加了16位?

到目前为止,我在谷歌上看到的所有结果都说明了它们的用途,而不是它们的实际构成。

2 个答案:

答案 0 :(得分:4)

你完全正确。其中四个通用寄存器EAXEBXECXEDX组成如下(我在示例中使用了累加器):

  1. 首先,我们有16位字的低字节和高字节。所以,AX = AH || AL
  2. 然后,我们有AX的16位扩展名,它构成了dword。所以,EAX = EAX(31:16) || AX
  3. (在AMD64中)然后将dword寄存器扩展为qword寄存器。因此,我们有RAX = RAX(63:32) || EAX
  4. ||运算符是连接运算符。您应该注意,此规则不适用于其他四个通用寄存器ESPEBPESIEDI

答案 1 :(得分:0)

正如您所设想的那样,32位寄存器(如eax)可以在其最重要的部分访问,因为axax本身被分割为ah并且al ... ebx同样如此......