aboutsummaryrefslogtreecommitdiff
path: root/newasm/parsers/label.s
diff options
context:
space:
mode:
authorJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-08-23 19:46:17 -0500
committerJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-08-23 19:46:17 -0500
commit80d8f3ae48255f786bd4d52a1819ea0c339f6946 (patch)
tree70126a16181caf459cfcf79fce983655a7a704e5 /newasm/parsers/label.s
parentb08def431c09449b5ad2ff4379fb403b2e1bf67b (diff)
Add register parser and binary search for opcodes
Diffstat (limited to 'newasm/parsers/label.s')
-rw-r--r--newasm/parsers/label.s30
1 files changed, 30 insertions, 0 deletions
diff --git a/newasm/parsers/label.s b/newasm/parsers/label.s
new file mode 100644
index 0000000..4770e6c
--- /dev/null
+++ b/newasm/parsers/label.s
@@ -0,0 +1,30 @@
+.syntax unified
+.cpu cortex-m0plus
+.thumb
+
+.type label, %function
+.global label
+
+// 1 unexpected begin char
+// 2 doesn't end with colon
+
+// R4 input buffer
+// R2 output buffer
+
+label: PUSH {LR}
+ LDRB R0, [R4] // get a char
+ CMP R0, 0x61 // a
+ BLO 1f
+ CMP R0, 0x7A // z
+ BLS 2f
+1: MOVS R0, #1 // return code 1 (expected lowercase)
+ POP {PC}
+2: BL symbol
+ LDRB R0, [R4] // get a char
+ CMP R0, ': // colon
+ BEQ 3f
+ MOVS R0, #2 // return code 2 (expected colon)
+ POP {PC}
+3: ADDS R4, 1 // consume the colon
+ MOVS R0, #0 // return code 0 (success)
+ POP {PC}