sponge_lib/
generate_asm.rs1use 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}