4 个版本
0.2.0 | 2022年11月22日 |
---|---|
0.1.2 | 2022年11月16日 |
0.1.1 | 2022年10月20日 |
0.1.0 | 2022年10月20日 |
#810 在 数据结构
170KB
4.5K SLoC
write_x86_64 rust 库
目标
此库旨在帮助人们使用 Rust 实现编译器的 x86_64 汇编后端。因此,此库实现了用于编写简单的 x86_64 指令的数据结构,并检查这些指令的类型。
使用方法
为 x86_64 macOS 生成 Hello World 程序(也适用于 Linux)
use write_x86_64::*;
fn main() {
let file_name = "asm_file.s";
let text_ss = Segment::label(new_label("main"))
+ pushq(reg!(RBP))
+ leaq(lab!(new_label("my_string")), RDI)
+ call(reg::Label::printf())
+ leaq(lab!(new_label("my_string2")), RDI)
+ call(reg::Label::printf())
+ xorq(reg!(RAX), reg!(RAX))
+ popq(RBP)
+ ret();
let data_ss = Data::label(new_label("my_string"))
+ data::dasciz("Hello".to_string())
+ Data::label(new_label("my_string2"))
+ data::dasciz(" World\\n".to_string());
let file = file::File {
globl: Some(new_label("main")),
text_ss,
data_ss,
};
file.print_in(file_name).unwrap();
}
贡献
欢迎贡献,如果您使用此库并且希望添加更多指令,也可以提出要求。
未来工作
我们目前正在尝试实现 DWARF 调试符号。欢迎任何贡献、测试和评论。
使用此库的项目
- Rust 子集的编译器:https://github.com/samsa1/SamRustCompiler