;==================================================================================== ;Angel code examples ;The following ARM code is the Angel equivalent of the "Hello World" program on page 69 in the book. ;Note that, although the WriteC macro is defined, it is not used in the code as it is more efficient ;to retain the conditional SWI. ;====================================================================================
;==================================================================================== AREA HelloW,CODE,READONLY SWI_ANGEL EQU 0x123456 ;SWI number for Angel semihosting
MACRO $l Exit ;Angel SWI call to terminate execution $l MOV r0, #0x18 ;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 char in [r1] ;$l MOV r0, #0x3 ;select Angel SYS_WRITEC function ; SWI SWI_ANGEL ; MEND
ENTRY ;code entry point ADR r1, TEXT-1 ;r1->"Hello World" MOV r0, #0x3 ;select Angel SYS_WRITEC r0 LOOP LDRB r2, [r1,#1]! ;get next byte r1 CMP r2, #0 ;check for text end SWINE SWI_ANGEL ;if not end print... Print r1[7,0] byte BNE LOOP ;..and loop back Exit ;end of execution ALIGN ;to ensure ADR works ;TEXT DATA ; = "Hello World",&a,&d,0 TEXT = "Hello World", &0a, &0d, 0 END ;end of program source ;============================================================
|