gpt4 book ai didi

assembly - armv8中的MOV指令使用哪个处理器部分

转载 作者:行者123 更新时间:2023-12-02 17:10:55 25 4
gpt4 key购买 nike

假设我有以下指令 - MOV X5, XZR
该 MOV 伪指令将使用处理器硬件的哪一部分?我的意思是 - MOV 指令需要使用 ALU 还是内存?显然需要访问寄存器。

我很好奇,因为我正在阅读教科书“计算机组织与设计”,其中作者讨论了两期处理器。 2条指令位于同一个数据包中的要求是,如果一条指令是Memory指令,则另一条指令必须是ALU/Logic或分支。我上面提到的指令后面是一个分支指令,我不确定这两条指令是否可以在同一个数据包中。

如果您可以分享一些有关如何实际实现该伪指令的信息,那也会非常有帮助。感谢您的帮助。

最佳答案

XZR 是一个寄存器的别名,它总是返回 0,并且不能更改为除 0 之外的任何值。它是 AArch64 中的新功能,但其他 RISC(例如 MIPS)始终有一个零寄存器。 (32位ARM/Thumb ARMv8模式是一种不同的架构,一些AArch64 CPU也可以执行。)

寄存器不存在于内存中,也不涉及内存,除非指令将数据从内存移动到寄存器,反之亦然。

该指令基本上是通过将一个寄存器复制到另一个寄存器来将寄存器 X5 设置为零。

ARM 是整个“RISC”范例的一部分,但在实际效率上有所妥协。 AArch64 使其更加精简,删除了一些使现代超标量管道变得复杂的 ARM 东西,并将寄存器扩展到 64 位。该 RISC 范例的一些设计原则是:

  • 提供了大量的寄存器。 AArch64 有 32 个整数寄存器,而 ARM 中有 15 个(不包括程序计数器)。 (与当时 x86 的 8 相比,这仍然很大)。
  • 有指令从寄存器加载和存储数据(因此 RISC 也称为“加载-存储架构”)
  • 其他指令(例如 ADD、SUB 等)仅在寄存器上工作 - 寄存器与内存的操作有限。因此,不会使用“将内存位置 1000 处的内容添加到寄存器 X”之类的内容 - 您必须“使用内存位置 1000 处的内容加载 X2”,然后“X = X + X2”。 (add reg, mem 甚至 add mem,reg 是 RISC 避免的经典 CISC 功能。)

因此,考虑到这一遗留问题,您可能会将这条指令放入“ALU”类别中,因为它根本不与内存通信,并且它仅在整数寄存器上运行(而不是 FP/向量) )。就管道的其余部分而言,它仅读取和写入整数寄存器值,而不是内存,并且不分支。

但是 ALU 在 CPU 上的作用是:ALU 接受输入,执行操作,然后将其传递到输出。在 RISC 中,输入始终是寄存器。

使用 MOV,没有任何操作,输入只是传递到输出。它可以绕过 ALU,或者为了简单起见,数据路径仍然通过带有控制信号的 ALU,使其执行类似于 0 的 OR 操作,因此值保持不变。

如您所见,现实世界并不像教科书那么整洁。我不知道任何给定 ARM CPU 中的管道实际上是如何工作的。

关于assembly - armv8中的MOV指令使用哪个处理器部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com