wat gaan we doen?
DESCRIPTION
Wat gaan we doen?. harhaling data types herhaling memory adressing modes gebruik van de stack load/store multiple instructions uitleg SET_LEDS uitleg Kitt. ARM7 data types. Word is 32 bits long. Half word is 16-bits long (ARM7TDMI) Word can be divided into four bytes. - PowerPoint PPT PresentationTRANSCRIPT
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
1Computertechniek
harhaling data types herhaling memory adressing modes gebruik van de stack load/store multiple instructions uitleg SET_LEDS uitleg Kitt
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
2Computertechniek
ARM7 data types
• Word is 32 bits long.
• Half word is 16-bits long (ARM7TDMI)
• Word can be divided into four bytes.
• ARM addresses 32 bits.
• Address refers to byte.– Address 4 starts at byte 4.
• Can be configured at power-up as either little- or big-endian mode.
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
3Computertechniek
Little- and big-endian storage
little-endian big-endian
11 22 33 44r0 = 0x11223344
11 22 33 44 11 22 33 443 2 1 0 0 1 2 3
00 00 00 44 00 00 00 11
LDRB r2,[r1]
STR r0,[r1]
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
4Computertechniek
Addressing mode: Base Register• The memory location to be accessed is held in a base register
– STR r0, [r1] ; Store contents of r0 to location pointed to; by contents of r1.
– LDR r2, [r1] ; Load r2 with contents of memory location; pointed to by contents of r1.
r1
0x200Base
Register
Memory
0x50x200
r0
0x5Source
Registerfor STR
r2
0x5Destination
Registerfor LDR
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
5Computertechniek
Addressing mode: Pre-indexed
• Example: STR r0, [r1,#12]
• To store to location 0x1f4 instead use: STR r0, [r1,#-12]• To auto-increment base pointer to 0x20c use: STR r0, [r1, #12]!• If r2 contains 3, access 0x20c by multiplying this by 4:
– STR r0, [r1, r2, LSL #2]
r1
0x200Base
Register
Memory
0x5
0x200
r0
0x5Source
Registerfor STR
Offset
12 0x20c
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
6Computertechniek
Addressing mode: Post-indexed
• Example: STR r0, [r1], #12
• To auto-increment the base register to location 0x1f4 instead use:– STR r0, [r1], #-12
• If r2 contains 3, auto-incremenet base register to 0x20c by multiplying this by 4:– STR r0, [r1], r2, LSL #2
r1
0x200Original
BaseRegister
Memory
0x50x200
r0
0x5Source
Registerfor STR
Offset
12 0x20c
r1
0x20cUpdatedBaseRegister
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
7Computertechniek
assembler instructie formaat : multiple words van en naar geheugen
(block transfer instructies)
STMIA R0, { R1-R9 }
STMIA R0!, { R1-R9 }
STMIB R0, { R1-R9 } ; DA, DB
STMNEIA R0, { R1-R9 }
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
8Computertechniek
Block Data Transfer instructie code
• The Load and Store Multiple instructions (LDM / STM) allow betweeen 1 and 16 registers to be transferred to or from memory.
• The transferred registers can be either:– Any subset of the current bank of registers (default).
– Any subset of the user mode bank of registers when in a priviledged mode (postfix instruction with a ‘^̂’).
Cond 1 0 0 P U S W L Rn Register list
Condition field Base register
Load/Store bit0 = Store to memory1 = Load from memory
Write- back bit0 = no write-back1 = write address into base
PSR and force user bit0 = don’t load PSR or force user mode1 = load PSR or force user mode
Up/Down bit0 = Down; subtract offset from base1 = Up ; add offset to base
Pre/Post indexing bit0 = Post; add offset after transfer,1 = Pre ; add offset before transfer
2831 22 16 023 21 1527 20 1924
Each bit corresponds to a particular register. For example:• Bit 0 set causes r0 to be transferred.• Bit 0 unset causes r0 not to be transferred.At least one register must be transferred as the list cannot be empty.
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
9Computertechniek
Stack
• A stack is an area of memory which grows as new data is “pushed”
onto the “top” of it, and shrinks as data is “popped” off the top.
• Two pointers define the current limits of the stack.– A base pointer
• used to point to the “bottom” of the stack (the first location).
– A stack pointer• used to point the current “top” of the stack.
SPBASE
PUSH {1,2,3}
1
2
3
BASE
SP
POP
1
2Result of pop = 3
BASE
SP
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
10Computertechniek
subroutine call and return
BLX subroutine
; continue here
subroutine:
; do something
MOV PC, LR
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
11Computertechniek
Stacks and Subroutines
• One use of stacks is to create temporary register workspace for subroutines.
STMFD sp!,{r0-r12, lr} ; stack all registers
........ ; and the return address
........
LDMFD sp!,{r0-r12, pc} ; load all the registers
; and return automatically
• See the chapter on the ARM Procedure Call Standard in the SDT Reference Manual for further details of register usage within subroutines.
• If the pop instruction also had the ‘S’ bit set then the transfer of the PC when in a priviledged mode would also cause the SPSR to be copied into the CPSR (see exception handling module).
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
12Computertechniek
Stack Operation• Traditionally, a stack grows down in memory, with the last “pushed”
value at the lowest address. The ARM also supports ascending stacks, where the stack structure grows up through memory.
• The value of the stack pointer can either:– Point to the last occupied address (Full stack)
• and so needs pre-decrementing (ie before the push)
– Point to the next occupied address (Empty stack)• and so needs post-decrementing (ie after the push)
• The stack type to be used is given by the postfix to the instruction:– STMFD / LDMFD : Full Descending stack
– STMFA / LDMFA : Full Ascending stack.
– STMED / LDMED : Empty Descending stack
– STMEA / LDMEA : Empty Ascending stack
• Note: ARM Compiler will always use a Full descending stack.
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
13Computertechniek
SET_LEDS:@ save registersstmfd sp!, { r0-r2, lr }
@ set LEDs that must be turned onmov r0, r0, LSL #8 ldr r1, =IOSETstr r0, [ r1 ]
@ clear LEDs that must be turned offmvn r0, r0 ldr r1, =IOCLRstr r0, [ r1 ]
@ save registers and returnldmfd sp!, { r0-r2, pc }
SET_LEDS
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
14Computertechniek
@ initialisationldr r2, =1 @ rightmost LED onldr r3, =1 @ means: shift left
loop:cmp r3, #1moveq r2, r2, LSL #1movne r2, r2, LSR #1
cmp r2, #1moveq r3, #1cmp r2, #0x80moveq r3, #0
b loop
Kitt
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
15Computertechniek
doen
• Kitt afmaken• Toon aan hoe snel
– een interne instructie uitgevoerd wordt– een I/O instructie uitgevoerd wordt
• Maak een ‘echte’ Delay_uS subroutine