| |||||||||||||
Technical Support On-Line Manuals RealView Assembler User's Guide | Loading addresses with LDR Rd, =label
The The assembler converts an
Unlike the Example 2.6 shows how this works. The instructions listed in the comments are the ARM instructions generated by the assembler. Example 2.6.
AREA LDRlabel, CODE,READONLY
ENTRY ; Mark first instruction to execute
start
BL func1 ; Branch to first subroutine
BL func2 ; Branch to second subroutine
stop
MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC #0x123456 ; ARM semihosting (formerly SWI)
func1
LDR r0, =start ; => LDR R0,[PC, #offset into
; Literal Pool 1]
LDR r1, =Darea + 12 ; => LDR R1,[PC, #offset into
; Literal Pool 1]
LDR r2, =Darea + 6000 ; => LDR R2, [PC, #offset into
; Literal Pool 1]
BX lr ; Return
LTORG ; Literal Pool 1
func2
LDR r3, =Darea + 6000 ; => LDR r3, [PC, #offset into
; Literal Pool 1]
; (sharing with previous literal)
; LDR r4, =Darea + 6004 ; If uncommented produces an error
; as Literal Pool 2 is out of range
BX lr ; Return
Darea SPACE 8000 ; Starting at the current location,
; clears a 8000 byte area of memory
; to zero
END ; Literal Pool 2 is out of range of
; the LDR instructions above
Example 2.7 shows an ARM code routine that overwrites one string with another string. It uses the
Example 2.7. String copy
AREA StrCopy, CODE, READONLY
ENTRY ; Mark first instruction to execute
start
LDR r1, =srcstr ; Pointer to first string
LDR r0, =dststr ; Pointer to second string
BL strcopy ; Call subroutine to do copy
stop
MOV r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC #0x123456 ; ARM semihosting (formerly SWI)
strcopy
LDRB r2, [r1],#1 ; Load byte and update address
STRB r2, [r0],#1 ; Store byte and update address
CMP r2, #0 ; Check for zero terminator
BNE strcopy ; Keep going if not
MOV pc,lr ; Return
AREA Strings, DATA, READWRITE
srcstr DCB "First string ‑ source",0
dststr DCB "Second string ‑ destination",0
END
| ||||||||||||
| |||||||||||||