assembly - ARMv8 程序集,如何将值从 w 寄存器移动到 x 寄存器?
问题描述
在 ARMv8 程序集中,如果我执行以下操作,编译器会发送错误消息:
mov w19, #16
mov x20, w19
如何将值从 aw 寄存器移动到 ax 寄存器,以及如何将值从 ax 寄存器移动到 aw 寄存器?
解决方案
在 ARMv8 中,您所拥有的只是 32、64 位 GPR,它们作为“X”寄存器访问。Arm 架构提供了使用“W”名称访问这些寄存器的低 32 位的指令,即“W”寄存器是“X”寄存器的 32 位别名。体系结构不支持同时包含“X”和“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 立即数、MOVK 等。有关这些指令的详细信息,请参阅 arm 架构参考手册。
推荐阅读
- java - 类型 java.lang.Object 无法解析,它本质上是从 reuired .class 文件中引用的
- kotlin - 格式 LocalDateTime 响应 json
- c# - 从通过主键和外键连接的多个表中移动数据
- swift - 在视图控制器之间传递数据时如何过滤 NSPredicate
- ios - NSAttributed Text,在 iOS 中带有一条线和某个角度
- java - 我将如何修复语法错误插入“}”以完成块
- windbg - Windbg javascript转储dml
- mysql - 使用 IF 逻辑在存储过程中调用存储过程
- javascript - React 组件重新安装在另一个组件上的 props 更改
- reactjs - React-router + 子目录 + 参数 - 如何使用/配置?