Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Herhaling ARM assembler instructies Branch instructie Subroutines, gebruik van de stack Conditionele instructies en de flags Oefening
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 2 LDR R0, =value R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 3 MOV R0, R1 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 4 LDR R0, [ R1 ] R0 R R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 5 STR R0, [ R1 ] R0 R1FFFF FFFC R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 6 ADD R3, R1, R2 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen +
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 7 Drie getallen optellen.global main getal_1 :.word 11 getal_2 :.word 22 getal_3 :.word 33 som :.word main: ldr r0, =0 ldr r1, =getal_1 ldr r2, [ r1 ] addr0, r0, r2 ldr r1, =getal_2 ldr r2, [ r1 ] addr0, r0, r2 ldr r1, =getal_3 ldr r2, [ r1 ] add r0, r0, r2 ldr r1, =som str r0, [ r1] done: b done
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 8 B = branch R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 9 BL = branch and link R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 10 Hoofdprogramma. Call sub. Call sub. Een subroutine aanroepen Sub:. return
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 11 Hoofdprogramma. call sub. call sub. Een subroutine aanroepen Sub:. return
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 12 Hoofdprogramma. BL SUB. BL SUB. ARM subroutine mechanisme SUB:. 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
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 13 Een subroutine gebruiken (1).global main getal_1 :.word 11 getal_2 :.word 22 getal_3 :.word 33 som :.word add: ldr r2, [ r1 ] addr0, r0, r2 movPC, LR main: ldr r0, =0 ldr r1, =getal_1 bladd ldr r1, =getal_2 bladd ldr r1, =getal_3 bladd ldr r1, =som str r0, [ r1] done: b done
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 14 Een subroutine gebruiken (2).global main getal_1 :.word 11 getal_2 :.word 22 getal_3 :.word 33 som :.word add: ldr r2, [ r1 ] add r1, r1, #4 addr0, r0, r2 movPC, LR main: ldr r0, =0 ldr r1, =getal_1 bladd ldr r1, =som str r0, [ r1] done: b done add: ldr r2, [ r1 ] addr0, r0, r2 movPC, LR main: ldr r0, =0 ldr r1, =getal_1 bladd ldr r1, =getal_2 bladd ldr r1, =getal_3 bladd ldr r1, =som
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 15 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 add_r0_r2: add r0, r0, r2 movPC, LR add: ldr r2, [ r1 ] BLadd_r0_r2 add r1, r1, #4 movpc, lr main: ldr r0, =0 ldr r1, =getal_1 bladd ldr r1, =som str r0, [ r1] …..
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 16 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} POP 1 2 Result of pop = 3 SP
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 17 assembler instructie formaat : multiple words van en naar geheugen (block transfer instructies) STMFD SP!, { R1-R9, R12 } LDMFD SP!, { R1-R9, R12 }
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 18 Gebruik de stack subroutine: stmfdsp!, { r2, r3, r4, lr } … ldmfdsp!, { pc, r2-r4 }
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 19 Gebruik de stack.global main getal_1 :.word 11 getal_2 :.word 22 getal_3 :.word 33 som :.word add_r0_r2: stmfdsp!, { lr } add r0, r0, r2 ldmfdsp!, { pc } add1: stmfdsp!, { r2, lr } ldr r2, [ r1 ] bladd_r0_r2 add r1, r1, #4 ldmfdsp!, { r2, pc } main: ldr r0, =0 ldr r1, =getal_1 bladdl ldr r1, =som str r0, [ r1] ….. add_r0_r2: add r0, r0, r2 movPC, LR add1: ldr r2, [ r1 ] BLadd_r0_r2 add r1, r1, #4 movpc, lr
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 20 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)
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 21 The ARM condition code field All instructions are conditionally executed!
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 22 Conditions
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 23 Zet de flags of laat ze ongewijzigd Gewoon een S (= Set Condition Codes) achter de instructie ADDSr0, r1, zet de flags ADCr3, r4, laat de flags ongewijzig (carry!)
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 24 2 getallen 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:
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 25 Drie getallen optellen in een loop.global main getal_1 :.word 11 getal_2 :.word 22 getal_3 :.word 33 som :.word 0 main: ldr r0, initialisatie loop body subs r2, r2, #1 bneloop ldr r1, =som str r0, [ r1] done: b done Hier zelf code toevoegen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 26 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.