53 lines
896 B
Text
53 lines
896 B
Text
# output(): Hello, world.\n
|
|
# mach(): all
|
|
|
|
# This is a test for movw & movt instructions.
|
|
# It emits hello world if movw & movt works appropriately.
|
|
|
|
.macro invalid
|
|
# This is "undefined" but it's not properly decoded yet.
|
|
.word 0x07ffffff
|
|
# This is stc which isn't recognized yet.
|
|
stc 0,cr0,[r0]
|
|
.endm
|
|
|
|
.global _start
|
|
_start:
|
|
# Run some simple insns to confirm the engine is at least working.
|
|
nop
|
|
|
|
# Skip over output text.
|
|
|
|
bl skip_output
|
|
|
|
hello_text:
|
|
.asciz "Hello, world.\n"
|
|
|
|
.p2align 2
|
|
skip_output:
|
|
movw r4, #:lower16:hello_text
|
|
movt r4, #:upper16:hello_text
|
|
|
|
output_next:
|
|
# Output a character
|
|
mov r0,#3
|
|
mov r1,r4
|
|
swi #0x123456
|
|
|
|
# Load next character, see if done.
|
|
add r4,r4,#1
|
|
sub r3,r3,r3
|
|
ldrb r5,[r4,r3]
|
|
teq r5,#0
|
|
bne output_next
|
|
|
|
done:
|
|
mov r0,#0x18
|
|
ldr r1,exit_code
|
|
swi #0x123456
|
|
|
|
# If that fails, try to die with an invalid insn.
|
|
invalid
|
|
|
|
exit_code:
|
|
.word 0x20026
|