computertechniek 2 – arm assembler hogeschool van utrecht / institute for computer, communication...
TRANSCRIPT
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
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
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
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
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
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
+
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
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
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
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
10Computertechniek 2 – ARM assembler
Hoofdprogramma
.
.
.
.
Call sub
.
.
.
Call sub
.
.
.
Een subroutine aanroepenSub:
.
.
.
.
.
return
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
11Computertechniek 2 – ARM assembler
Hoofdprogramma
.
.
.
.
call sub
.
.
.
call sub
.
.
.
Een subroutine aanroepenSub:
.
.
.
.
.
return
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
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
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
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] …..
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
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 }
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 }
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
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)
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!
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
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!)
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:
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
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.