# output(): Hello, world.\n # mach(): all # Emit hello world while switching back and forth between arm/thumb. # ??? Unfinished .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: # Prime loop. mov r4, r14 output_next: # Switch arm->thumb to output next chacter. # At this point r4 must point to the next character to output. adr r0, into_thumb + 1 bx r0 into_thumb: .thumb # Output a character. mov r0,#3 @ writec angel call mov r1,r4 swi 0xab @ ??? Confirm number. # Switch thumb->arm. adr r5, back_to_arm bx r5 .p2align 2 back_to_arm: .arm # Load next character, see if done. add r4,r4,#1 sub r3,r3,r3 ldrb r5,[r4,r3] teq r5,#0 beq done # Output a character (in arm mode). 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