AREA Hex_Out,CODE,READONLY SWI_ANGEL EQU 0x123456 ;SWI number for Angel semihosting MACRO $l Exit ;Angel SWI call to terminate execution $l MOV r0, #0x18 ;select Angel SWIreason_ReportException(0x18) LDR r1, =0x20026 ;report ADP_Stopped_ApplicationExit SWI SWI_ANGEL ;ARM semihosting SWI MEND MACRO $l WriteC ;Angel SWI call to output character in [r1] $l MOV r0, #0x3 ;select Angel SYS_WRITEC function SWI SWI_ANGEL MEND ENTRY ;code entry point LDR r2, VALUE ;get value to print BL HexOut ;call hexadecimal output Exit ;finish VALUE DCD &1234abcd ;test value HexOut MOV r3, #8 ;nibble count = 8 ADR r1, CHAROUT LOOP MOV r0, r2, LSR #28 ;get top nibble CMP r0, #9 ;0-9 or A-F ADDGT r0, r0, #"A"-10 ;ASCII alphabetic ADDLE r0, r0, #"0" ;ASCI numeric STR r0, [r1] ;store character to print WriteC ;print character MOV r2, r2, LSL #4 ;shift left one nibble SUBS r3, r3, #1 ;decrement nibble count BNE LOOP ;if more do next nibble MOV pc, r14 ;return CHAROUT DCD 0 END