aboutsummaryrefslogtreecommitdiff
path: root/src/assembler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/assembler.rs')
-rw-r--r--src/assembler.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/assembler.rs b/src/assembler.rs
index 73dec00..784337b 100644
--- a/src/assembler.rs
+++ b/src/assembler.rs
@@ -26,6 +26,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" | "mul" | "div" | "call" => 3,
+ "sys" => 2,
"hlt" | "ret" => 1,
_ => panic!("Unknown instruction {}", tokens[0]),
}
@@ -190,6 +191,12 @@ pub fn assembler(source: &str) -> Vec<u8> {
bytes.push(Instruction::HLT as u8);
}
+ "sys" => {
+ let imm = tokens[1].parse().unwrap();
+ bytes.push(Instruction::SYS as u8);
+ bytes.push(imm);
+ }
+
_ => panic!("Line {}: unknown instruction", line_no + 1),
}
}