Assembly CPU寄存器单个或寻址部分

Assembly CPU寄存器单个或寻址部分,assembly,cpu-registers,att,Assembly,Cpu Registers,Att,很抱歉,这个难以理解的标题,我无法再编一个更好的了。 我正试图学习汇编(AT&T)并对寄存器有一个问题: 寄存器名是否访问完全不同且独立的内存?或者它们是否允许访问一个寄存器的特定较小部分,从而寻址相同的内存? e、 g:al是否寻址ax、eax和rax的最低8位,以便修改ah修改ax、eax和rax的9-16位?或者ah、al、ax、eax和rax都是不同的独立寄存器吗? 提前感谢 Moritz需要澄清的是:寄存器不驻留在内存中,也没有地址 是的,AX是EAX寄存器的低16位AH和AL是AX的

很抱歉,这个难以理解的标题,我无法再编一个更好的了。
我正试图学习汇编(AT&T)并对寄存器有一个问题:
寄存器名是否访问完全不同且独立的内存?或者它们是否允许访问一个寄存器的特定较小部分,从而寻址相同的内存? e、 g:al是否寻址ax、eax和rax的最低8位,以便修改ah修改ax、eax和rax的9-16位?或者ah、al、ax、eax和rax都是不同的独立寄存器吗?
提前感谢

Moritz

需要澄清的是:寄存器不驻留在内存中,也没有地址

是的,
AX
EAX
寄存器的低16位
AH
AL
AX
的高8位和低8位。这是一个单独的寄存器,具有不同的名称,用于不同的访问方式。这是针对x86的:


图像来源:

需要澄清的是:寄存器不驻留在内存中,也没有地址

是的,
AX
EAX
寄存器的低16位
AH
AL
AX
的高8位和低8位。这是一个单独的寄存器,具有不同的名称,用于不同的访问方式。这是针对x86的:


图像来源:

除了通用寄存器部分之间的重叠外,
mm
寄存器别名为x87堆栈,
xmm
寄存器重叠
ymm
寄存器(如适用)。

除了通用寄存器部分之间的重叠,
mm
寄存器别名为x87堆栈,
xmm
寄存器重叠
ymm
寄存器(如适用)。

寄存器使用称为触发器的某种类型的电子周期,触发器是存储0或1并保持其存储的周期。N大小寄存器是由N个触发器组成的块。触发器看起来像这样:

  • 时钟:是一个触发器,当它被激活时,数据被传递,因此ascendent不会存储任何数据0或1。它由CPU中的控制单元控制
  • 输入:是一个1位的输入,微小的导线,在触发器中存储0或1
  • 输出:是可以读取数据的输出
在32位寄存器中,其中32个在一个块中对齐,具有32位输入和32位输出:

注意,在此寄存器中没有子寄存器,如
eax
ax
ah
al
。我猜英特尔的人必须使用4位时钟,而不是1位作为:

  • 第一个时钟,激活所有32位触发器,
    eax
  • 第二个时钟,仅激活较低的16位触发器,
    ax
  • 第三个时钟,仅激活第二个8位,
    ah
  • 第四个时钟,仅激活前8位,
    al
类似于(8个FF,8个触发器,点表示线路连接在那里):

现在,当处理器对指令进行解码时,它可以使用指令的操作码告诉您需要哪条指令、目标是哪一个寄存器、要触发哪一个时钟:

[b0] ff             mov    $0xff, %al
[b4] ff             mov    $0xff, %ah
[66 b8] ff ff       mov    $0xffff, %ax
[b8] ff ff ff ff    mov    $0xffffffff, %eax

不动产可能不同,但原理是一样的。你可以在任何逻辑设计或计算机体系结构书籍中阅读更多关于这方面的内容,但你不需要在汇编中启动程序,但它将帮助你理解这方面的工作原理。

寄存器使用一种称为触发器的电子循环,触发器是一种存储0或1并保持存储的循环。N大小寄存器是由N个触发器组成的块。触发器看起来像这样:

  • 时钟:是一个触发器,当它被激活时,数据被传递,因此ascendent不会存储任何数据0或1。它由CPU中的控制单元控制
  • 输入:是一个1位的输入,微小的导线,在触发器中存储0或1
  • 输出:是可以读取数据的输出
在32位寄存器中,其中32个在一个块中对齐,具有32位输入和32位输出:

注意,在此寄存器中没有子寄存器,如
eax
ax
ah
al
。我猜英特尔的人必须使用4位时钟,而不是1位作为:

  • 第一个时钟,激活所有32位触发器,
    eax
  • 第二个时钟,仅激活较低的16位触发器,
    ax
  • 第三个时钟,仅激活第二个8位,
    ah
  • 第四个时钟,仅激活前8位,
    al
类似于(8个FF,8个触发器,点表示线路连接在那里):

现在,当处理器对指令进行解码时,它可以使用指令的操作码告诉您需要哪条指令、目标是哪一个寄存器、要触发哪一个时钟:

[b0] ff             mov    $0xff, %al
[b4] ff             mov    $0xff, %ah
[66 b8] ff ff       mov    $0xffff, %ax
[b8] ff ff ff ff    mov    $0xffffffff, %eax

不动产可能不同,但原理是一样的。您可以在任何逻辑设计或计算机体系结构书籍中阅读更多关于这方面的内容,但在汇编中启动程序时不需要使用它,但它将帮助您了解这些内容的工作原理。

感谢您的精彩解释和图片。你能告诉我这是否也适用于x86_64 RAX(等)寄存器吗?@MoritzPetersen是的,它也适用于64位寄存器谢谢你的解释和图像。你能告诉我这是否也适用于x86_64 RAX(等)寄存器吗?@MoritzPetersen是的,它也适用于64位寄存器谢谢-这让它更容易理解。内存的工作方式是一样的吗?@MoritzPetersen不完全一样,一般来说,内存有输入端口,用于将数据写入位单元,输出用于读取,时钟用于读取和写入,有许多类型的内存,每种类型的内存存储位的方式都不同。您可以查找内存阵列,也可以查看内存阵列