Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 是零寄存器';zr';在aarch64地面上?_Assembly_Cpu Registers_Zero_Arm64 - Fatal编程技术网

Assembly 是零寄存器';zr';在aarch64地面上?

Assembly 是零寄存器';zr';在aarch64地面上?,assembly,cpu-registers,zero,arm64,Assembly,Cpu Registers,Zero,Arm64,最近开始使用AArch64汇编,我注意到它有一个严格为零分配的寄存器,而(大多数)其他体系结构只需xor var,var 我读到的关于zr的网站解释说它是零的参考点,听起来很像我在直流电子中对地的定义。而且因为ARM是业余爱好者使用的,所以在代码中将电路中的地连接到零对我来说是有意义的 我相信这比这复杂得多,但这是一个安全的类比吗?与其他获取“0”的方法相比,使用此寄存器会产生不同的结果吗 零寄存器xzrrespwzr是Aarch64 ISA中一个可爱的设计技巧。它的寄存器号是31,就像堆栈指针

最近开始使用AArch64汇编,我注意到它有一个严格为零分配的寄存器,而(大多数)其他体系结构只需
xor var,var

我读到的关于zr的网站解释说它是零的参考点,听起来很像我在直流电子中对地的定义。而且因为ARM是业余爱好者使用的,所以在代码中将电路中的地连接到零对我来说是有意义的


我相信这比这复杂得多,但这是一个安全的类比吗?与其他获取“0”的方法相比,使用此寄存器会产生不同的结果吗

零寄存器
xzr
resp
wzr
是Aarch64 ISA中一个可爱的设计技巧。它的寄存器号是31,就像堆栈指针
sp
resp一样<代码>wsp。根据上下文,寄存器编号31指的是其中一个


这个可爱的技巧使Aarch64 ISA能够简化其指令集。例如,
cmpxn,xm
指令实际上是
subsxzr,xn,xm
,也就是说,它是一个减法运算,结果被丢弃。A
movxn,xm
只是一个
orrxn,xzr,xm
。寄存器31只有在有意义的地方才被识别为堆栈指针,并且指令集被巧妙地选择,因此您几乎从未触及过这个细节。

您可以将该寄存器中的位看作是硬连接到地的。但向其写入不会导致短路。一个更好的类比是Unix
/dev/zero
:放弃写入,将读取作为零字节的无限流

但不,它不是一个“参照物”,因为事物是相对于它来衡量的。无论AArch64是否有此寄存器,CPU中都可能存在逻辑
0
位,并且不会将它们与寄存器进行比较以确定它们是否为真/假。从电气上讲,逻辑
1
通常是高电压,
0
=接地,因此门会将其输入与接地进行比较,并且任何位置的所有
0
位都等效于接地。(这可能是一个严重的过度简化,当然,在ALU或其他东西的内部,位可能是反转的或不存在的,只是在逻辑上存在于其他一些表示中)

所以作为一个类比,它根本不起作用。作为对其物理/电气实现方式的描述,它也不完全起作用。它需要在不发生短路的情况下丢弃写操作。并且在具有寄存器重命名的CPU中,它需要在RAT(寄存器分配表)中使用特殊的大小写,以跟踪这样一个事实:写入被丢弃,依赖链不会通过
xzr
传播。如果你忽略了这一点,你可以想象一个SRAM单元的替代品,输入断开,输出硬连线为零


看起来措辞笨拙;更好的描述是零寄存器是一个固定常量,它会自动丢弃写操作


读取它会为您提供一个固定的常量零,这有时很有用(例如,用于将零存储到内存中,而无需先将寄存器归零)。除非该上下文会为同一寄存器编号提供
sp
别名;我对AArch64不太了解。

要回答我认为是你的标题问题,我认为这不是一个特别“安全”(有用)的类比

电气工程中的接地概念具有非常特定的语义和许多相关概念,但与“固定零寄存器”只有非常切向的关系,因为在这两种情况下都涉及数字零

除了这两个概念中都存在零之外,我看不出这个类比有什么用处。它几乎肯定不能反映寄存器是如何实现的,也不能让您将电气工程知识中的概念映射到ARM组装编程中。如果您有一个关于零寄存器如何工作的问题(例如,“写入时发生了什么?”),您似乎不太可能通过引用您的类比来回答它

我不知道(未链接的)站点为什么使用术语reference point表示零,但我认为完全忽略“reference point”语言是安全的。只是零。当你读它是零,当你写它时,它什么也不做。这一点的有用性在中进行了解释

综上所述,如果你发现这个类比对你来说是一个有用的心理构造,那么在你自己的学习过程中使用它并没有错

aarch64中的零寄存器“zr”是否基本接地。。。这是一个安全的类比吗

不,有各种各样的硬件逻辑零寄存器的位是否接地并不重要,因为这只是一个实现细节。您只需要将其视为数字值零,以及如果我们读取或写入该寄存器会发生什么。在使用软件时,不要考虑底层电路

例如,许多体系结构可能使用带0V表示逻辑1的反向逻辑(),那么零寄存器将实际连接到Vcc。或者其他一些使用平衡逻辑,其中逻辑0和1由−分别为Vcc和Vcc。在这种情况下,零寄存器将连接到−Vcc也不是接地


但是为什么要有一个零寄存器呢

RISC的一般原理是避免在每条指令中访问内存,而只允许加载/存储指令接触内存。因此,RISC架构需要大量寄存器来减少溢出到内存的需要

几乎所有其他RISC体系结构都至少有32个寄存器,因此值得为零常量指定一个寄存器。我们可以看到:has
%g0
,has
$0
$0
,(stric