aboutsummaryrefslogtreecommitdiff
path: root/src/assembler.rs
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2026-01-08 18:47:07 +0530
committerkrolxon <krolyxon@tutanota.com>2026-01-08 18:47:07 +0530
commit3372e774e9505acdc3778a8155476cca4bfbd3e8 (patch)
tree60131fe5c0367a9ab9908b33bcfe81f6aaece543 /src/assembler.rs
parent68d85406ef834312b39474c11be09e5ed1a228b4 (diff)
add MUL & DIV
Diffstat (limited to 'src/assembler.rs')
-rw-r--r--src/assembler.rs21
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);
}