最近开发的项目,为了线程安全,统一改用rust语言进行编写和移植,但是头疼之处在于原项目c++代码内嵌了汇编,而且这种汇编涉及到cpu特殊指令的操作,无法转换为C语言代码,于是乎我就开始研究如何在rust语言中内嵌汇编代码。在国外论坛上找了好半天,终于找到一种方法,就是使用std::arch模块提供的 asm! 宏来实现内嵌汇编,这些代码将被插入到Rust程序生成的机器码中。
这里以32位x86汇编代码举例,执行一条最简单的add指令,示例代码如下:
use std::arch::asm;
fn main() {
let mut a: i64 = 10;
let mut b: i64 = 20;
let mut aa: i64 = a;
unsafe {
asm!("add {0}, {1}", inout(reg) a, in(reg) b);
}
println!("{} + {} = {}", aa, b, a);
}
其实就是将a和b相加,将计算的结果放入a,输出结果如下图所示:
终于搞定了,不过感觉rust的语法总是怪怪的,可能因为我也是个新手吧。