sponge_lib/
generate_asm.rs

1use crate::parse_tokens::ParsedToken;
2
3pub fn generate(parsed_tokens: &[ParsedToken]) -> String {
4    let mut asm_code = String::new();
5
6    asm_code.push_str("section .data\n\n");
7    asm_code.push_str("section .bss\n\n");
8    asm_code.push_str("section .text\n");
9    asm_code.push_str("    global _start\n\n");
10    asm_code.push_str("_start:\n");
11
12    for token in parsed_tokens {
13        match token {
14            ParsedToken::VariableAssignment { name, value } => {
15                asm_code.push_str(&format!("    mov {}, {}\n", name, value));
16            }
17        }
18    }
19
20    asm_code.push_str("\n    ; Exit the program\n");
21    asm_code.push_str("    mov rax, 60        ; System call for exit\n");
22    asm_code.push_str("    xor rdi, rdi       ; Exit code 0\n");
23    asm_code.push_str("    syscall            ; Invoke the system call\n");
24
25    asm_code
26}