Wat gaan we doen? Herhaling ARM assembler instructies

Slides:



Advertisements
Verwante presentaties
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 5 - onderwerpen •DB038 hardware : toetsenbordje.
Advertisements

Hoe werkt een rekenmachine?
1/1/ / faculty of Electrical Engineering eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 3(2): Instructietypen.
Par. 3.1 Computers zijn overal
Hardware (1) NSG Informatica.
1/1/ /e/e eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 2(1): Inleiding InstructieSetArchitectuur.
1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware.
PowerPC Practicum. Introductie Doel practicum = Computers begrijpen Leer de werking van een computer door een emulator te bouwen.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 4: Instructieformaten adressering assembleertalen (zelfstudie.
1/1/ /e/e eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 2(2): Instructieformaten adressering assembleertalen.
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
VBA en VBS Een introductie.
C programma int main(){ } Compilatie met devc++ in file main.c Gecompileerd programma in file FirstProgram.exe Mov R1, 120 Mov R2, 160 ADD R1, R2.
De processor.
Instructie Programmeren Task 5
1/1/ /e/e eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 3(1): Instructietypen (1)
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(1): Flow of.
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
1Ben Bruidegom 1 Hoe werkt een “loopje” nu precies? Recapitulatie rekenmachines week 1 Van rekenmachine naar rekenmachine met “loopjes”
Auteursomgeving voor Digitale Componenten
Functies als Getallen Jan Martin Jansen.
Visual Basic .NET voor studenten
Een echte re stack-machine nMemory nRegisters R0 R1 R2 R3 R4 PC SP MP nMemory uProgram uStack uMemory nRegisters uProgr.counter uStack pointer uMark pointer.
Hoe werkt een rekenmachine?
Assembly-taal Namen:Danny van Waes Rohan Schenk Klas:EM4 Docent:Dhr. Ing. JA Verhage Embedded systems.
Flight 68K Temperatuur geregelde ventilator
Computerarchitectuur
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  geen nieuwe opgave Voorbeeld tentamen:
Security Technology PICT les 1
PEMSY1http:// 1  Herhaling: - ACPS - set status, conditioneel uitvoeren - indexed addressing  Nieuw: - CMP, CMN - half-word.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 1 Hogeschool van Utrecht.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 3: Instructietypen (1)
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 4: Inleiding InstructieSetArchitectuur (ISA) datatypen.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 3: Instructietypen (2)
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
PEMSY1http:// 1  Herhaling ARM assembler instructies  branch instructie  conditionele instructies en de flags  oefening.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen  DB036 printjes subroutines.
Les 3 Basisbouwstenen (deel 2) Programmeren met Visual Basic Karl Moens.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies  assembler.
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  Oefening: melodie Klas EV2B: week.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 2 - onderwerpen  Helaas nog geen printjes.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 2 - onderwerpen MPLAB.
VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 4 - onderwerpen DB038 hardware : luidsprekertje.
2TPRJ5 – PIC assembler Hogeschool Utrecht / Institute for Information & Communication Technology Wouter van Ooijen Mail: Sheets.
BEGINNERS EV3 PROGRAMMEER Les3
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail:
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1.
De Transmeta Crusoe processor Een VLIW CPU met x86 compatibiliteit.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Optellen en aftrekken met breuken. Coopertest Wat? Een uithoudingstest die meet welke afstand je kan lopen in 12 minuten.
Informatie beoordelen If else Switch En Wiskunde.
Microcontrollers Theorie 8051 based microcontroller ADuC832 from Analog Devices 01/2016 Roggemans M. (MGM)
VPEMSY1, D3ECPT2 : ARM Assembler Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling B/BL, conditions,
HOGESCHOOL ROTTERDAM / CMI Computersystemen 1
Gameprogrammeren: Keuzeopdrachten
Digitale Methoden Onderdeel van vak Computer Systemen
Gameprogrammeren: Recursie
Small Basic Console deel 2
Wat gaan we doen? Herhaling: ACPS; indexed addressing; half-word/byte
Small Basic Console deel 2
Nim, een strategisch spelletje
Empty handed here I come,
TOP met iTasks 2.
Python – For loop + strings
Transcript van de presentatie:

Wat gaan we doen? Herhaling ARM assembler instructies Branch instructie Subroutines, gebruik van de stack Conditionele instructies en de flags Oefening

LDR R0, =value registers geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R13 = SP R14 = LR R15 = PC 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 registers geheugen

MOV R0, R1 registers geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R13 = SP R14 = LR R15 = PC 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 registers geheugen

LDR R0, [ R1 ] registers geheugen R0 R1 000 0004 R2 R3 R4 R5 R6 R7 R8 R13 = SP R14 = LR R15 = PC 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 registers geheugen

STR R0, [ R1 ] registers geheugen R0 R1 FFFF FFFC R2 R3 R4 R5 R6 R7 R8 R13 = SP R14 = LR R15 = PC 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 registers geheugen

ADD R3, R1, R2 + registers geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R13 = SP R14 = LR R15 = PC 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 + registers geheugen

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 r1, =getal_3 add r0, r0, r2 ldr r1, =som str r0, [ r1] done: b done

B = branch registers geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R13 = SP R14 = LR R15 = PC 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 registers geheugen

BL = branch and link registers geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R13 = SP R14 = LR R15 = PC 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 registers geheugen

Een subroutine aanroepen . return Hoofdprogramma . Call sub

Een subroutine aanroepen . return Hoofdprogramma . call sub

ARM subroutine mechanisme . MOV PC, LR Hoofdprogramma . BL SUB BL label R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers

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 ldr r1, =getal_3 ldr r1, =som str r0, [ r1] done: b done Een subroutine gebruiken (1)

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 ldr r1, =som str r0, [ r1] done: b done Een subroutine gebruiken (2) 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 ldr r1, =getal_3 ldr r1, =som

Een subroutine roept een andere subroutine aan. .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 ldr r1, =som str r0, [ r1] ….. Een subroutine roept een andere subroutine aan. Wat gaat hier mis?

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 PUSH {1,2,3} POP 1 2 3 Result of pop = 3 SP 2 1 SP

assembler instructie formaat : multiple words van en naar geheugen (block transfer instructies) STMFD SP!, { R1-R9, R12 } LDMFD SP!, { R1-R9, R12 }

Gebruik de stack subroutine: stmfd sp!, { r2, r3, r4, lr } … ldmfd sp!, { pc, r2-r4 }

Gebruik de stack add_r0_r2: add r0, r0, r2 mov PC, LR add1: .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 ldr r1, =som str r0, [ r1] ….. Gebruik de stack 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

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)

The ARM condition code field All instructions are conditionally executed!

Conditions

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

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:

De grootste selecteren R0 == a, R1 == b, R2 == g subs r3, r0, r1 blt else mov r2, r0 b klaar else: mov r2, r1 klaar: if ( a > b ){ g = a; } else { g = b; } R0 == a, R1 == b, R2 == g subs r3, r0, r1 movgt r2, r0 movle r2, r1

Hier zelf code toevoegen 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, =0 @ initialisatie loop: @ loop body subs r2, r2, #1 bne loop ldr r1, =som str r0, [ r1] done: b done Hier zelf code toevoegen

Opdrachten: 1. Maak zelf het ‘loop’ optel programma af en test het Opdrachten: 1. Maak zelf het ‘loop’ optel programma af en test het. Hierbij hoef je geen subroutine te gebruiken. 2. maak (en test) een nette subroutine die 2 getallen vermenigvuldigt (door herhaald optellen). Het is misschien handig eerst in C te schrijven hoe je dit zou doen.