1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
.syntax unified
.cpu cortex-m0plus
.thumb
.type symbol, %function
.global symbol
// 1 unexpected begin char
// R1 input buffer
// R2 output buffer
symbol: PUSH {LR}
LDRB R0, [R1] // get a char
BL goodchar // check if valid symbol char
BEQ loop
MOVS R0, #1 // unexpected begin char
POP {PC}
loop: ADDS R1, 1 // consume the character
STRB R0, [R2] // store in temp buffer
ADDS R2, 1 // advance temp buffer pointer
LDRB R0, [R1] // get another character
BL goodchar // check if valid symbol char
BEQ loop // if so keep getting chars
MOVS R0, #0 // return code success
STRB R0, [R2] // write null byte
POP {PC}
goodchar: CMP R0, '$
BEQ good
CMP R0, '.
BEQ good
CMP R0, '0
BLO bad
CMP R0, '9
BLS good
CMP R0, 'A
BLO bad
CMP R0, 'Z
BLS good
CMP R0, '_
BEQ good
CMP R0, 'a
BLO bad
CMP R0, 'z
BHI bad
good: CMP R0, R0
bad: BX LR
|