.section .data buf: .byte 0 // input/output character buffer .section .text .global _start _start: mov x19, #0 // value mov x20, #0 // count loop: mov x8, #63 // read mov x0, #0 // stdin adr x1, buf mov x2, #1 svc 0 cmp x0, #0 // count of bytes read; 0 means EOF b.ne 1f exit: mov x8, #93 // exit mov x0, #0 // error code (no error) svc 0 1: adr x1, buf ldurb w9, [x1] cmp w9, #92 // backslash; start of comment b.ne 2f comment: mov x8, #63 // read mov x0, #0 // stdin adr x1, buf mov x2, #1 svc 0 cmp x0, #0 b.eq exit adr x1, buf ldurb w9, [x1] cmp w9, '\n' b.ne comment b loop 2: cmp w9, '0' b.lt 3f cmp w9, '9' b.gt 3f sub w9, w9, '0' b 4f 3: cmp w9, 'a' b.lt 5f cmp w9, 'f' b.gt 5f sub w9, w9, ('a' - 10) b 4f 4: lsl x19, x19, #4 add x19, x19, w9, uxtb add x20, x20, #1 b loop 5: cmp w9, ' ' b.ne loop tst x20, #1 cinc x20, x20, ne lsr x20, x20, #1 6: cmp x20, #0 b.eq loop mov x8, #64 // write mov x0, #1 // stdout adr x1, buf sturb w19, [x1] mov x2, #1 svc 0 lsr x19, x19, #8 sub x20, x20, #1 b 6b