我正try 在Rust中使用内联程序集执行write
系统调用.基本上,我正在try 复制this hello world example个.我试图将对字符串片的引用作为我的消息传递,但我收到了以下错误,这似乎与其本身相矛盾:
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
代码如下,但我的问题是:
- 还有比
*const str
更合适的指针吗? - 我还处于使用汇编的早期阶段,还有其他我遗漏的明显问题吗?
use std::arch::asm;
fn main() {
let msg = "Hello World!\n";
let len = msg.len();
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,
);
}
}
它运行在MacOSv13.6上,运行在M1芯片(Armv8.5-a)上.