我正在 Mac/aarch64 上运行书中的 代码示例,并收到编译错误。
fn dereference(ptr: *const usize) -> usize {
let mut res: usize;
unsafe {
asm!("mov {0}, [{1}]", out(reg) res, in(reg) ptr)
};
res
}
我得到:
error: expected compatible register or logical immediate
--> src/main.rs:20:15
|
20 | asm!("mov {0}, [{1}]", out(reg) res, in(reg) ptr)
| ^
|
note: instantiated into assembly here
--> <inline asm>:1:10
|
1 | mov x8, [x0]
| ^
搜索了错误消息后,我相信架构与它有关,但我还没有弄清楚如何修复它。我正在查看 Rust inline assembly 文档,但由于该主题对我来说是全新的,因此我无法将无法编译的示例映射到我在文档中看到的内容。
当然,花了很多时间但直到我发布这个问题后,我才找到答案。
Arm64
装配中的模板应该是"mov {0}, {1}"
,而不是"mov {0}, [{1}]"
。
有什么帮助:
add
示例也无法为我编译。
add
上谷歌搜索
Arm64
后,我发现了汇编备忘单,它表明
add
的语法在此架构上与
x86/x86-64
完全不同(3 个参数而不是 2 个)。
mov
指令的语法,发现了问题。