如何在稳定的 Rust 中为 `"={ecx}"(features) 编写内联汇编?
How do I write inline assembly for `"={ecx}"(features)` in stable Rust?
我有以下内联程序集,它曾经在 Rust 中工作,但似乎对语法进行了一些更改,它在 "={ecx}(features)
处抛出错误并显示消息 expected type
。我如何用新的汇编语法重写它?
use std::arch::asm;
let features: u32;
unsafe {
asm!("mov eax, 1
cpuid"
: "={ecx}"(features)
:
: "eax"
: "intel"
);
}
let support: u32 = (features >> 25) & 1;
试试这个:
use std::arch::asm;
fn main() {
let features: u32;
unsafe {
asm!("mov eax, 1",
"push rbx",
"cpuid",
"pop rbx",
out("ecx") features,
out("eax") _,
out("edx") _,
);
}
println!("features: {:x}", features);
}
请注意,您不能破坏 ebx
,因为它由 LLVM 内部使用,因此您需要保存和恢复它。
我有以下内联程序集,它曾经在 Rust 中工作,但似乎对语法进行了一些更改,它在 "={ecx}(features)
处抛出错误并显示消息 expected type
。我如何用新的汇编语法重写它?
use std::arch::asm;
let features: u32;
unsafe {
asm!("mov eax, 1
cpuid"
: "={ecx}"(features)
:
: "eax"
: "intel"
);
}
let support: u32 = (features >> 25) & 1;
试试这个:
use std::arch::asm;
fn main() {
let features: u32;
unsafe {
asm!("mov eax, 1",
"push rbx",
"cpuid",
"pop rbx",
out("ecx") features,
out("eax") _,
out("edx") _,
);
}
println!("features: {:x}", features);
}
请注意,您不能破坏 ebx
,因为它由 LLVM 内部使用,因此您需要保存和恢复它。