aboutsummaryrefslogtreecommitdiff
path: root/newasm/statement.s
blob: 83f8d8d7d41d082d9ebf9762b5ab57aae446397e (plain)
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
.syntax unified
.cpu cortex-m0plus
.thumb

.type statement, %function
.global statement

// 1 reported an error

// R1 input buffer
// R2 output buffer

statement:PUSH    {LR}
          BL      whitespace
          BL      label
          CMP     R0, #2        // check for error code 2 (no colon)
          BNE     1f
          ADR     R0, no_colon
          B       err_exit
1:        BL      whitespace
          BL      opcode
          BEQ     2f
          ADR     R0, no_opcode
          B       err_exit
2:        MOVS    R0, #0
          POP     {PC}

err_exit: BL      putstrln
          MOVS    R0, #1        // return code 1 (there was an error)
          POP     {PC}

            .align  4
no_colon:   .asciz  "Error: Expected colon at end of label"
            .align  4
no_opcode:  .asciz  "Error: Expected an opcode"