diff options
| author | krolxon <krolyxon@tutanota.com> | 2026-01-08 18:47:07 +0530 |
|---|---|---|
| committer | krolxon <krolyxon@tutanota.com> | 2026-01-08 18:47:07 +0530 |
| commit | 3372e774e9505acdc3778a8155476cca4bfbd3e8 (patch) | |
| tree | 60131fe5c0367a9ab9908b33bcfe81f6aaece543 /src/assembler.rs | |
| parent | 68d85406ef834312b39474c11be09e5ed1a228b4 (diff) | |
add MUL & DIV
Diffstat (limited to 'src/assembler.rs')
| -rw-r--r-- | src/assembler.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/assembler.rs b/src/assembler.rs index e7aa305..1b9c85b 100644 --- a/src/assembler.rs +++ b/src/assembler.rs @@ -25,7 +25,7 @@ fn is_reg(s: &str) -> bool { fn instr_size(tokens: &[String]) -> u16 { match tokens[0].as_str() { - "mov" | "add" | "sub" | "jmp" | "jz" | "jnz" | "cmp" => 3, + "mov" | "add" | "sub" | "jmp" | "jz" | "jnz" | "cmp" | "mul" | "div" => 3, "hlt" => 1, _ => panic!("Unknown instruction {}", tokens[0]), } @@ -153,6 +153,25 @@ pub fn assembler(source: &str) -> Vec<u8> { } } + "mul" => { + let r1 = parse_reg(&tokens[1]); + let r2 = parse_reg(&tokens[2]); + + bytes.push(Instruction::MUL as u8); + bytes.push(r1); + bytes.push(r2); + + } + + "div" => { + let r1 = parse_reg(&tokens[1]); + let r2 = parse_reg(&tokens[2]); + + bytes.push(Instruction::DIV as u8); + bytes.push(r1); + bytes.push(r2); + } + "hlt" => { bytes.push(Instruction::HLT as u8); } |
