diff options
| Commit | 34f98003e0a4c39120a177226fbc344d45289c41 (patch) | |
|---|---|---|
| Author | 2025-02-15 08:08:57 +0200 | |
| Committer | 2025-02-15 08:09:04 +0200 | |
| Files | 835b191e7eea7a8af7922d1467b46fc6aa5f1d6e /assembler/src/parser | |
| tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.tar tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.tar.gz tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.zip | ||
| Parent | 3b7982a4c29570678f9606db05910e30d6fc5feb (diff) | |
feat(assembler): sub instruction and minor reformatting
1 files changed, 12 insertions, 13 deletions
| -rw-r--r-- | assembler/src/parser/instruction.rs | 25 |
diff --git a/assembler/src/parser/instruction.rs b/assembler/src/parser/instruction.rs index 8fe21c1..2d6b9ec 100644 --- a/assembler/src/parser/instruction.rs +++ b/assembler/src/parser/instruction.rs @@ -61,15 +61,6 @@ impl Instruction { return Err(ArgumentError::NotLocation); } }, - "inc" | "dec" => { - self.check_args_len(1)?; - }, - "add" => { - self.check_args_len(2)?; - }, - "mov" => { - self.check_args_len(2)?; - }, "beq" => { self.check_args_len(2)?; @@ -77,9 +68,14 @@ impl Instruction { return Err(ArgumentError::NotLocation); } }, - "rts" => { - self.check_args_len(0)?; - }, + + "rts" + => self.check_args_len(0)?, + "inc" | "dec" + => self.check_args_len(1)?, + "add" | "sub" | "mov" + => self.check_args_len(2)?, + _ => return Err(ArgumentError::UnknownInstruction), } Ok(()) @@ -105,6 +101,9 @@ impl Instruction { Instruction::new_subleq(&Z, &self.args[1], &Address::Instruction(next + 2)), Instruction::new_subleq(&Z, &Z, &Address::Instruction(next + 3)), ], + "sub" => vec![ + Instruction::new_subleq(&self.args[0], &self.args[1], &Address::Instruction(next + 1)), + ], "mov" => vec![ Instruction::new_subleq(&self.args[1], &self.args[1], &Address::Instruction(next + 1)), Instruction::new_subleq(&self.args[0], &Z, &Address::Instruction(next + 2)), @@ -146,7 +145,7 @@ impl Instruction { pub(crate) fn collapse_len(&self) -> usize { match &*self.name { - "subleq" | "jmp" | "inc" | "dec" + "subleq" | "jmp" | "inc" | "dec" | "sub" => 1, "add" => 3, |
