Skip to content

Commit e418601

Browse files
committed
add all multi-field instructions to lexer
1 parent c00c7e8 commit e418601

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed

src/assembler/lexer.rs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
22
assembler::{MaybeUnresolvedInstr, Op, PseudoOp, Token},
33
defs::LC3Word,
4-
instruction::{ADD_OPCODE, AND_OPCODE, ALL_JUMP_OPCODES, BRANCH_OPCODE, JSR_OPCODE, ALL_LOAD_OPCODES, ALL_STORE_OPCODES, TRAP_OPCODE},
4+
instruction::{ADD_OPCODE, AND_OPCODE, ALL_JUMP_OPCODES, BRANCH_OPCODE, JSR_OPCODE, ALL_LOAD_OPCODES, ALL_STORE_OPCODES, TRAP_OPCODE, NOT_OPCODE},
55
};
66
use anyhow::{bail, Result};
77

@@ -98,10 +98,38 @@ pub fn construct_instruction_pass(token_chain: &[Token]) -> Result<Vec<MaybeUnre
9898
Op::AND => (
9999
AND_OPCODE,
100100
[check_reg::<9>, check_reg::<6>, check_reg_or_offset::<0, 5>].as_slice()),
101-
Op::LD => (ALL_LOAD_OPCODES[0], [check_reg::<9>, check_offset::<0, 0>].as_slice()),
102-
Op::LDI => (ALL_LOAD_OPCODES[1], [check_reg::<9>, check_offset::<0, 0>].as_slice()),
103-
Op::LDR => (ALL_LOAD_OPCODES[2], [check_reg::<9>, check_reg::<6>, check_offset::<0, 6>].as_slice()),
104-
Op::LEA => (ALL_LOAD_OPCODES[3], [check_reg::<9>, check_offset::<0, 0>].as_slice()),
101+
Op::LD => (
102+
ALL_LOAD_OPCODES[0],
103+
[check_reg::<9>, check_offset::<0, 0>].as_slice()
104+
),
105+
Op::LDI => (
106+
ALL_LOAD_OPCODES[1],
107+
[check_reg::<9>, check_offset::<0, 0>].as_slice()
108+
),
109+
Op::LDR => (
110+
ALL_LOAD_OPCODES[2],
111+
[check_reg::<9>, check_reg::<6>, check_offset::<0, 6>].as_slice()
112+
),
113+
Op::LEA => (
114+
ALL_LOAD_OPCODES[3],
115+
[check_reg::<9>, check_offset::<0, 0>].as_slice()
116+
),
117+
Op::ST => (
118+
ALL_STORE_OPCODES[0],
119+
[check_reg::<9>, check_offset::<0, 0>].as_slice()
120+
),
121+
Op::STI => (
122+
ALL_STORE_OPCODES[1],
123+
[check_reg::<9>, check_offset::<0, 0>].as_slice()
124+
),
125+
Op::STR => (
126+
ALL_STORE_OPCODES[2],
127+
[check_reg::<9>, check_reg::<6>, check_offset::<0, 6>].as_slice()
128+
),
129+
Op::NOT => (
130+
NOT_OPCODE,
131+
[check_reg::<9>, check_reg::<6>].as_slice()
132+
),
105133
_ => todo!(),
106134
};
107135

0 commit comments

Comments
 (0)