wat gaan we doen?

15
Hogeschool van Utrecht / Institute for Computer, Communicati on and Media Technology 1 Computertechniek harhaling data types herhaling memory adressing modes gebruik van de stack load/store multiple instructions uitleg SET_LEDS uitleg Kitt

Upload: fayre

Post on 05-Jan-2016

12 views

Category:

Documents


1 download

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 Presentation

TRANSCRIPT

Page 1: Wat gaan we doen?

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

Page 2: Wat gaan we doen?

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.

Page 3: Wat gaan we doen?

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]

Page 4: Wat gaan we doen?

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

Page 5: Wat gaan we doen?

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

Page 6: Wat gaan we doen?

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

Page 7: Wat gaan we doen?

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 }

Page 8: Wat gaan we doen?

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.

Page 9: Wat gaan we doen?

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

Page 10: Wat gaan we doen?

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

Page 11: Wat gaan we doen?

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

Page 12: Wat gaan we doen?

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.

Page 13: Wat gaan we doen?

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

Page 14: Wat gaan we doen?

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

Page 15: Wat gaan we doen?

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