aboutsummaryrefslogtreecommitdiff
path: root/newasm/statement.s
diff options
context:
space:
mode:
Diffstat (limited to 'newasm/statement.s')
-rw-r--r--newasm/statement.s17
1 files changed, 13 insertions, 4 deletions
diff --git a/newasm/statement.s b/newasm/statement.s
index 83f8d8d..4a199a6 100644
--- a/newasm/statement.s
+++ b/newasm/statement.s
@@ -7,24 +7,31 @@
// 1 reported an error
-// R1 input buffer
+// R4 input buffer
// R2 output buffer
statement:PUSH {LR}
BL whitespace
+ PUSH {R2}
BL label
+ POP {R2}
CMP R0, #2 // check for error code 2 (no colon)
BNE 1f
ADR R0, no_colon
B err_exit
1: BL whitespace
+ PUSH {R2}
BL opcode
+ POP {R2}
BEQ 2f
ADR R0, no_opcode
B err_exit
-2: MOVS R0, #0
- POP {PC}
-
+2: LDR R0, [R2]
+ BL lookup
+ BEQ 3f
+ ADR R0, not_found
+ B err_exit
+3: POP {PC} // success code already in R0
err_exit: BL putstrln
MOVS R0, #1 // return code 1 (there was an error)
POP {PC}
@@ -33,3 +40,5 @@ err_exit: BL putstrln
no_colon: .asciz "Error: Expected colon at end of label"
.align 4
no_opcode: .asciz "Error: Expected an opcode"
+ .align 4
+not_found: .asciz "Error: Opcode not found"