Max*_*art 2 assembly inline-assembly rust arm64
我正在尝试write使用 Rust 中的内联汇编来执行系统调用。基本上我正在尝试重现这个 hello world 示例。我试图传递对字符串切片的引用作为我的消息,但我收到以下错误,该错误似乎与其自身相矛盾:
cannot use value of type `*const str` for inline assembly
only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly
Run Code Online (Sandbox Code Playgroud)
代码如下,但我的问题是:
*const str?cannot use value of type `*const str` for inline assembly
only integers, floats, SIMD vectors, pointers and function pointers can be used as arguments for inline assembly
Run Code Online (Sandbox Code Playgroud)
它在 MacOS v13.6、M1 芯片 (Armv8.5-a) 上运行。
好吧,根据程序集的要求,宽引用、宽指针和细指针&str之间存在细微差别。尽管错误消息可能会使细指针的要求更加明确。幸运的是,有一种方法可以将 a 转换为适当的指针,毫不奇怪地称为*const str&stras_ptr
use std::arch::asm;
fn main() {
let msg_str = "Hello World!\n";
let len = msg_str.len();
let msg = msg_str.as_ptr();
unsafe {
asm!(
"mov X0, #1", // specify stdout
"adr X1, {msg}", // point to message
"mov X2, {len}", // specify message length
"mov X16, #4", // specify syscall number for 'write'
"svc #0x80", // syscall
msg = in(reg) msg,
len = in(reg) len,
);
}
}
Run Code Online (Sandbox Code Playgroud)
确实更进一步,但我无法测试手臂组件,所以它仍然无法为我编译。