writex8664 rust crate

Objective

This crate is written in the purpose of helping people implement a x8664 assembly backend for a compiler in rust. Thus, this crate implements data structures to write simple x8664 instructions but also type check those instructions.

Usage

Generate a Hello World program for x8664 macOS (also works on Linux) ```rust use writex86_64::*;

fn main() { let filename = "asmfile.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();

} ```

Contributing

Contribution are welcomed, you can also ask to add some instructions if you are using this crate and would want more instructions available.

Future work

We are currently trying to implement DWARF debug symbols. Any contribution, testing, comment are welcomed.

Project using this crate: