ARMv8汇编,如何将值从w寄存器移动到x寄存器



在ARMv8程序集中,如果我执行以下操作,编译器将发送错误消息:

mov    w19,    #16
mov    x20,    w19

如何将一个值从w寄存器移动到x寄存器,以及如何将值从x寄存器移动到w寄存器?

在ARMv8中,您所拥有的只是32、64位GPR,它们作为'X'寄存器访问。Arm体系结构提供了使用"W"名称访问这些寄存器的低32位的指令,即"W"寄存器是"X"寄存器的32位别名。体系结构不支持同时包含"X"one_answers"W"记忆的指令,而只支持"X"或"W"。当您写入"W"寄存器时,"X"中的高32位将被清除为零。

Mov W1, W2       // zero-extend w2 into x1

在上述指令中,W1的高32位被清零,并将W2的低32位复制到W1中。

通常不支持在同一条指令中混合使用寄存器大小,所以像这样的指令不会组合在一起。

Mov X1, W2      // error: mismatched register sizes

Mov指令还有其他变体,如MOVZ、MVN、Mov immediate、MOVK等。有关这些指令的详细信息,请参阅arm架构参考手册。

最新更新