Website Summary Files Commits Branches @commit @diff @stats
path: root / assembler / src / parser
diff options
context:
space:
mode:
Commit34f98003e0a4c39120a177226fbc344d45289c41 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-02-15 08:08:57 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-02-15 08:09:04 +0200
Files835b191e7eea7a8af7922d1467b46fc6aa5f1d6e /assembler/src/parser
tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.tar
tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.tar.gz
tonkobali-34f98003e0a4c39120a177226fbc344d45289c41.zip
Parent3b7982a4c29570678f9606db05910e30d6fc5feb (diff)
feat(assembler): sub instruction and minor reformatting
1 files changed, 12 insertions, 13 deletions
-rw-r--r--assembler/src/parser/instruction.rs25
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,