|
|||||||||||
|
Technical Support On-Line Manuals Assembler User Guide |
Assembler User GuideLiteral pools
The assembler uses literal pools to hold certain constant
values that are to be loaded into registers. The assembler places
a literal pool at the end of each section. The end of a section
is defined either by the In large sections the default literal pool can be out of range
of one or more
When an
If the next literal pool is out of range, the assembler generates
an error message. In this case you must use the You must place literal pools where the processor does not attempt to execute them as instructions. Place them after unconditional branch instructions, or after the return instruction at the end of a subroutine. Example 9 shows how this works. The instructions listed as comments are the ARM instructions generated by the assembler. Example 9. Placing literal pools
AREA Loadcon, 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, =42 ; => MOV R0, #42
LDR r1, =0x55555555 ; => LDR R1, [PC, #offset to
; Literal Pool 1]
LDR r2, =0xFFFFFFFF ; => MVN R2, #0
BX lr
LTORG ; Literal Pool 1 contains
; literal Ox55555555
func2
LDR r3, =0x55555555 ; => LDR R3, [PC, #offset to
; Literal Pool 1]
; LDR r4, =0x66666666 ; If this is uncommented it
; fails, because Literal Pool 2
; is out of reach
BX lr
LargeTable
SPACE 4200 ; Starting at the current location,
; clears a 4200 byte area of memory
; to zero
END ; Literal Pool 2 is empty
| ||||||||||
|
|||||||||||