computertechniek 2 – arm assembler hogeschool van utrecht / institute for computer, communication...

26
Hogeschool van Utrecht / Institute for Computer, Communicati on and Media Technology 1 Computertechniek 2 – ARM assembler Herhaling ARM assembler instructies Branch instructie Subroutines, gebruik van de stack Conditionele instructies en de flags Oefening

Upload: paul-haynes

Post on 29-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

1Computertechniek 2 – ARM assembler

Herhaling ARM assembler instructies Branch instructie Subroutines, gebruik van de stack Conditionele instructies en de flags Oefening

Page 2: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

2Computertechniek 2 – ARM assembler

LDR R0, =value

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 3: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

3Computertechniek 2 – ARM assembler

MOV R0, R1

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 4: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

4Computertechniek 2 – ARM assembler

LDR R0, [ R1 ]

R0

R1 000 0004

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 5: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

5Computertechniek 2 – ARM assembler

STR R0, [ R1 ]

R0

R1 FFFF FFFC

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 6: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

6Computertechniek 2 – ARM assembler

ADD R3, R1, R2

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

+

Page 7: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

7Computertechniek 2 – ARM assembler

Drie getallen optellen.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 99999

main:

ldr r0, =0

ldr r1, =getal_1

ldr r2, [ r1 ]

add r0, r0, r2

ldr r1, =getal_2

ldr r2, [ r1 ]

add r0, r0, r2

ldr r1, =getal_3

ldr r2, [ r1 ]

add r0, r0, r2

ldr r1, =som

str r0, [ r1]

done:

b done

Page 8: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

8Computertechniek 2 – ARM assembler

B = branch

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 9: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

9Computertechniek 2 – ARM assembler

BL = branch and link

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

0000 0000

0000 0001

0000 0002

0000 0003

0000 0004

0000 0005

0000 0006

0000 0007

0000 0008

0000 0009

…….

FFFF FFFB

FFFF FFFC

FFFF FFFD

FFFF FFFE

FFFF FFFF

geheugen

Page 10: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

10Computertechniek 2 – ARM assembler

Hoofdprogramma

.

.

.

.

Call sub

.

.

.

Call sub

.

.

.

Een subroutine aanroepenSub:

.

.

.

.

.

return

Page 11: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

11Computertechniek 2 – ARM assembler

Hoofdprogramma

.

.

.

.

call sub

.

.

.

call sub

.

.

.

Een subroutine aanroepenSub:

.

.

.

.

.

return

Page 12: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

12Computertechniek 2 – ARM assembler

Hoofdprogramma

.

.

.

.

BL SUB

.

.

.

BL SUB

.

.

.

ARM subroutine mechanismeSUB:

.

.

.

.

.

MOV PC, LR

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13 = SP

R14 = LR

R15 = PC

registers

BL label

Page 13: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

13Computertechniek 2 – ARM assembler

Een subroutine gebruiken (1)

.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 99999

add:

ldr r2, [ r1 ]

add r0, r0, r2

mov PC, LR

main:

ldr r0, =0

ldr r1, =getal_1

bl add

ldr r1, =getal_2

bl add

ldr r1, =getal_3

bl add

ldr r1, =som

str r0, [ r1]

done:

b done

Page 14: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

14Computertechniek 2 – ARM assembler

Een subroutine gebruiken (2)

.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 99999

add:

ldr r2, [ r1 ]

add r1, r1, #4

add r0, r0, r2

mov PC, LR

main:

ldr r0, =0

ldr r1, =getal_1

bl add

bl add

bl add

ldr r1, =som

str r0, [ r1]

done:

b done

add:

ldr r2, [ r1 ]

add r0, r0, r2

mov PC, LR

main:

ldr r0, =0

ldr r1, =getal_1

bl add

ldr r1, =getal_2

bl add

ldr r1, =getal_3

bl add

ldr r1, =som

Page 15: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

15Computertechniek 2 – ARM assembler

Een subroutine roept een andere subroutine aan.

Wat gaat hier mis?

.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 99999

add_r0_r2:

add r0, r0, r2

mov PC, LR

add:

ldr r2, [ r1 ]

BL add_r0_r2

add r1, r1, #4

mov pc, lr

main:

ldr r0, =0

ldr r1, =getal_1

bl add

bl add

bl add

ldr r1, =som

str r0, [ r1] …..

Page 16: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

16Computertechniek 2 – ARM assembler

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.• stack pointer

• used to point the current “top” of the stack.

empty ascending / empty decending / full ascending / full decenuing

SP

PUSH {1,2,3}

1

2

3

POP

1

2Result of pop = 3SP

Page 17: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

17Computertechniek 2 – ARM assembler

assembler instructie formaat : multiple words van en naar geheugen

(block transfer instructies)

STMFD SP!, { R1-R9, R12 }

LDMFD SP!, { R1-R9, R12 }

Page 18: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

18Computertechniek 2 – ARM assembler

Gebruik de stack

subroutine:

stmfd sp!, { r2, r3, r4, lr }

ldmfd sp!, { pc, r2-r4 }

Page 19: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

19Computertechniek 2 – ARM assembler

Gebruik de stack

.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 99999

add_r0_r2:

stmfd sp!, { lr }

add r0, r0, r2

ldmfd sp!, { pc }

add1:

stmfd sp!, { r2, lr }

ldr r2, [ r1 ]

bl add_r0_r2

add r1, r1, #4

ldmfd sp!, { r2, pc }

main:

ldr r0, =0

ldr r1, =getal_1

bl addl

bl addl

bl addl

ldr r1, =som

str r0, [ r1] …..

add_r0_r2:

add r0, r0, r2

mov PC, LR

add1:

ldr r2, [ r1 ]

BL add_r0_r2

add r1, r1, #4

mov pc, lr

Page 20: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

20Computertechniek 2 – ARM assembler

ARM instructie set

• iedere instructie is conditioneel

• Bijna alle instructies kunnen de conditie flags zetten

• ”de conditie” is de uitkomst van de laatste rekeninstructie die de flags heeft gezet (S achtervoegsel)

Page 21: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

21Computertechniek 2 – ARM assembler

The ARM condition code field

cond

31 28 27 0

All instructions are conditionally executed!

Page 22: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

22Computertechniek 2 – ARM assembler

ConditionsOpcode [31:28]

Mnemonic extension

Interpretation Status flag state for execution

0000 EQ Equal / equals zero Z set 0001 NE Not equal Z clear 0010 CS/HS Carry set / unsigned higher or same C set 0011 CC/LO Carry clear / unsigned lower C clear 0100 MI Minus / negative N set 0101 PL Plus / positive or zero N clear 0110 VS Overflow V set 0111 VC No overflow V clear 1000 HI Unsigned higher C set and Z clear 1001 LS Unsigned lower or same C clear or Z set 1010 GE Signed greater than or equal N equals V 1011 LT Signed less than N is not equal to V 1100 GT Signed greater than Z clear and N equals V 1101 LE Signed less than or equal Z set or N is not equal to V 1110 AL Always any 1111 NV Never (do not use!) none

Page 23: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

23Computertechniek 2 – ARM assembler

Zet de flags of laat ze ongewijzigd

Gewoon een S (= Set Condition Codes) achter de instructie

ADDS r0, r1, r2 @ zet de flags

ADC r3, r4, r5 @ laat de flags ongewijzig (carry!)

Page 24: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

24Computertechniek 2 – ARM assembler

2 getallen vergelijken@ R0 == a, R1 == b, R2 == n

subs r3, r0, r1

bne niet_verhogen

add r2, r2, #1

niet_verhogen:

if ( a == b ){

n++;

}

@ R0 == a, R1 == b, R2 == n

subs r3, r0, r1

addeq r2, r2, #1

niet_verhogen:

Page 25: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

25Computertechniek 2 – ARM assembler

Drie getallenoptellen

in een loop

.global main

getal_1 : .word 11

getal_2 : .word 22

getal_3 : .word 33

som : .word 0

main:

ldr r0, =0

@ initialisatie

loop:

@ loop body

subs r2, r2, #1

bne loop

ldr r1, =som

str r0, [ r1]

done:

b done

Hier zelf code

toevoegen

Page 26: Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Herhaling ARM assembler instructies

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

26Computertechniek 2 – ARM assembler

Opdrachten:

1. Maak zelf het ‘loop’ optel programma af en test het.

2. maak een programma dat 2 getallen vermenigvuldigt (door herhaald optellen). Het is misschien handig eerst in C te schrijven hoe je dit zou doen.