1 / 15

Wat gaan we doen?

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.

fayre
Download Presentation

Wat gaan we doen?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wat gaan we doen? • 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

  2. 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

  3. Little- and big-endian storage r0 = 0x11223344 11 22 33 44 STR r0,[r1] 3 2 1 0 0 1 2 3 11 22 33 44 11 22 33 44 LDRB r2,[r1] 00 00 00 44 00 00 00 11 little-endian big-endian Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  4. Memory r0 SourceRegisterfor STR 0x5 r1 r2 DestinationRegisterfor LDR BaseRegister 0x200 0x5 0x200 0x5 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. Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  5. r0 SourceRegisterfor STR Memory 0x5 Offset 12 0x5 0x20c r1 BaseRegister 0x200 0x200 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] Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  6. Memory r0 r1 Offset SourceRegisterfor STR UpdatedBaseRegister 0x5 0x20c 12 0x20c 0x5 0x200 r1 OriginalBaseRegister 0x200 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 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  7. 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

  8. 24 23 22 21 20 19 31 28 27 16 15 0 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 Base register Condition field 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. Up/Down bit 0 = Down; subtract offset from base 1 = Up ; add offset to base Load/Store bit 0 = Store to memory 1 = Load from memory Write- back bit 0 = no write-back 1 = write address into base Pre/Post indexing bit 0 = Post; add offset after transfer,1 = Pre ; add offset before transfer PSR and force user bit 0 = don’t load PSR or force user mode 1 = load PSR or force user mode Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  9. PUSH {1,2,3} 3 SP 2 SP 1 BASE 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. POP Result of pop = 3 2 1 SPBASE BASE Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  10. subroutine call and return BLX subroutine ; continue here subroutine: ; do something MOV PC, LR Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  11. 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

  12. 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

  13. SET_LEDS SET_LEDS: @ save registers stmfd sp!, { r0-r2, lr } @ set LEDs that must be turned on mov r0, r0, LSL #8 ldr r1, =IOSET str r0, [ r1 ] @ clear LEDs that must be turned off mvn r0, r0 ldr r1, =IOCLR str r0, [ r1 ] @ save registers and return ldmfd sp!, { r0-r2, pc } Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  14. Kitt @ initialisation ldr r2, =1 @ rightmost LED on ldr r3, =1 @ means: shift left loop: cmp r3, #1 moveq r2, r2, LSL #1 movne r2, r2, LSR #1 cmp r2, #1 moveq r3, #1 cmp r2, #0x80 moveq r3, #0 b loop Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

  15. doen • Kitt afmaken • Toon aan hoe snel • een interne instructie uitgevoerd wordt • een I/O instructie uitgevoerd wordt • Maak een ‘echte’ Delay_uS subroutine Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

More Related