Assemblerprogrammering för ARM del 2

Relevanta dokument
Assemblerprogrammering för ARM del 1

Assemblerprogrammering, ARM-Cortex M4 del 3

Assemblerprogrammering - fördjupning

Assemblerprogrammering för ARM del 1

Assemblerprogrammering för ARM del 1

Assemblerprogrammering för HCS12

Assemblerprogrammets. struktur; exempel

Assemblerprogrammering, ARM-Cortex M4 del 1

Assemblerprogrammering för ARM del 3

Assemblerprogrammets struktur; exempel

Maskinorienterad Programmering 2010/11

Tentamen med lösningsförslag

Programexempel för FLEX

Tentamen (Exempel) Datorteknik Y, TSEA28

F4: Assemblerprogrammering

Tentamen. Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen med lösningsförslag

Tentamen. Datorteknik Y, TSEA28

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Digital- och datorteknik

CE_O1. Nios II. Enkla assembler-instruktioner.

Tentamen. Datorteknik Y, TSEA28

Maskinorienterad programmering

LEU500-Maskinorienterad programmering LP3-2016/2017

Programmering av inbyggda system 2014/2015

Tentamen. Datorteknik Y, TSEA28

Assemblerprogrammering del 2

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Programmering av inbyggda system 2012/2013. Kodningskonventioner och programbibliotek. maskinnära programmering i C och assemblerspråk

Tentamen. Datorteknik Y, TSEA28

Styrenheten styrsignalsekvenser programflödeskontroll

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Kontrollskrivning Mikrodatorteknik CDT S2-704

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Klassdeklaration. Metoddeklaration. Parameteröverföring

Institutionen för elektro- och informationsteknologi, LTH

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Övning2 Datorteknik, HH vt12 - Programmering

Digital- och datorteknik

Extra lab. Nu på fredag kl 8-12 Frivillig Enbart hjälp med projektuppgiften Ingen examination

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Enkla datatyper minne

Digital- och datorteknik

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

F4. programmeringsteknik och Matlab

Grunderna i stegkodsprogrammering

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Digital- och datorteknik

LEU240 Mikrodatorsystem

Lösningar till tentamen i EIT070 Datorteknik

Maskinorienterad Programmering LP3-2017/2018

Lösningar till tentamen i EIT070 Datorteknik

Laboration 2 i Datorteknik- Assemblerprogrammering II

Tentamen Datorteknik Y, TSEA28 Datum

Data, typ, selektion, iteration

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Digital- och datorteknik

Datorarkitekturer med operativsystem ERIK LARSSON

Stack och subrutiner Programmeringskonventionen

Maskinorienterad programmering

Lösningar till tentamen i EIT070 Datorteknik

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDIU01 - Programmering i C++, grundkurs

Hantering av textsträngar och talsträngar. William Sandqvist

Föreläsning 3: Booleans, if, switch

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

CE_O2. Nios II. Subrutiner med mera.

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Maskinorienterad Programmering LP2-2017/2018

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Lathund. C för inbyggda system

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Maskinorienterad Programmering IT2, LP2-2016/2017

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Skizz till en enkel databas

TSEA28 Datorteknik Y (och U)

Villkorliga hopp: 9/26/2011. Dagens mål: Du ska kunna.. Villrorliga (Relativa) hopp - forts Arb s 140. LV5 Fo12. LV5 Fo12. Aktivera Kursens mål:

C-programmering, föreläsning 1 Jesper Wilhelmsson

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Arduinokurs. Kurstillfälle 4

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Transkript:

Assemblerprogrammering för ARM del 2 Ur innehållet Programflöde Subrutiner, parametrar och returvärden Tillfälliga (lokala) variabler Läsanvisningar: Arbetsbok kap 2 Quick-guide, instruktionslistan Assemblerprogrammering för ARM-del 2 1

Flödesdiagram för programstrukturer sub(p1,p2, ) RETUR(rv) subcall(param,...) id subcall Initieringar Sats 1 Sats 2 ; Sats 3 etc... Inträde i och utträde ur subrutiner. Inträde, typiskt med subrutinens namn och symbolisk representation av eventuella parametrar då sådana finns. Utträde, ( RETUR ) typiskt med angivande av returnvärde (rv) om sådant finns. Subrutinanrop. Med parametrar, symbolisk representation av eventuella aktuella parametrar som skickas med subrutinanropet. Med returvärde, tilldelningsoperator placeras framför den anropade subrutinen. Engångsinitieringar. Placeras typiskt i omedelbar anslutning till en inträdessymbol Exekveringsblock. En eller flera satser som ordnats och exekveras sekvensiellt. sant uttryck? falskt Villkorsblock. Ett uttryck testas, utfallet kan vara sant eller falskt och exekveringsväg väljs därefter. Assemblerprogrammering för ARM-del 2 2

Kontrollstrukturer if( villkor ) Satser if( villkor ) Satser1 else Satser2 while( villkor ) Satser do Satser while( villkor ); Assemblerprogrammering för ARM-del 2 3

Kontrollstrukturer (forts) for( uttryck1; uttryck2; uttryck3 ) satser switch( uttryck ) case x : break; case y : break; default:... Assemblerprogrammering för ARM-del 2 4

Villkorsblock kan ändra programflöde Exempel: if( a==b ) L1; L2; Assemblerspråk: LDR LDR CMP BEQ B L1:... L2: Maskinorienterad programmering R0,a R1,b R0,R1 L1 L2 Assemblerprogrammering för ARM-del 2 5

Instruktioner för villkorlig programflödeskontroll C-operator Betydelse Datatyp Instruktion == Lika med signed/unsigned BEQ!= Skild från signed/unsigned BNE < Mindre än signed BLT unsigned BCC <= Mindre än eller lika signed BLE unsigned BLS > Större än signed BGT unsigned BHI >= Större än eller lika signed BGE unsigned BCS Assemblerprogrammering för ARM-del 2 6

Relationer och tal med tecken Antag att följande deklarationer gjorts på toppnivå : unsigned int a,b; int c,d; CMP Koda följande programsekvens i assembler: if( a < b ) if ( c < d ) L1; L2; Maskinorienterad programmering Vid relationer (> eller < ) måste vi ta hänsyn till om operanderna är signed eller unsigned: Assembler: LDR R3,a @ R3<-a LDR R2,b @ R2<-b R3,R2 @ APSR <-(a-b) BCS.L2 ( BLO ) LDR R3,c @ R3<-c LDR R2,d @ R2<-d.L1:.L2: CMP BGE R3,R2 @ APSR <-(c-d) L2 Assemblerprogrammering för ARM-del 2 7

Jämförelse eller test? Att jämföra med 0 kallas också för test, det finns en speciell instruktion för det. if( a!= 0 ) if( a ) if( a == 0 ) if(!a ) Assembler: LDR R0,a CMP R0,#0 alternativt: LDR R0,a TST R0,R0 @ R0 & R0 Test-instruktionen påverkar endast flaggor N och Z. Assemblerprogrammering för ARM-del 2 8

Flaggsättning Instruktioner för aritmetik- logik- och skiftoperationer påverkar flaggsättningen: ADD SUB MUL... AND ORR EOR... ASR LSL ROR... Vid disassemblering visas dom ofta med ett S tillagt i instruktionsnamnet, ADD blir ADDS osv. Har liten praktisk betydelse, se även Quick Guide... Assemblerprogrammering för ARM-del 2 9

If (...)... else... int a,b,c; if ( a > b ) c = a; else c = b; LDR LDR CMP BGT If_Else: MOV B If_Do: MOV If_End:... R1,a R2,b R1,R2 If_Do R0,R2 If_End R0,R1 > Större än signed BGT unsigned BHI Assemblerprogrammering för ARM-del 2 10

while (...)... int a;... while ( a < 20 )... Vid kodning av while -iteration används det komplementära villkoret While_Continue: LDR R0,a CMP R0,#20 BGE While_Break While_Do:... B While_Continue While_Break: >= Större än eller lika signed BGE unsigned BCC Assemblerprogrammering för ARM-del 2 11

Registeranvändning I princip kan man använda de generella registren som man vill men det är mycket bättre att följa ARM s rekommendationer: Assemblerprogrammering för ARM-del 2 12

Funktionsparametrar Konventionerna sägar att vi använder register R0,R1,R2,R3, (i denna ordning) för parametrar som skickas till en subrutin. Övriga parametrar läggs på stacken (behandlas senare i kursen). Exempel: Följande deklarationer är gjorda: int a,b,c,d; Visa hur följande funktionsanrop kodas i assemblerspråk: sub(a,b,c,d); Assembler: LDR R0,a LDR R1,b LDR R2,c LDR R3,d BL sub Assemblerprogrammering för ARM-del 2 13

Funktionens returvärde Konventionerna sägar att vi använder register R0 för 8,16 och32-bitars returvärde, registerparet R0:R1 för 64 bitars returvärde Exempel: Funktionen: int rival( void ) return 0x12345678; kodas: rival: LDR R0,=0x12345678 BX LR Exempel: Funktionen: long long rval( void ) return 0x1234567800000000; kodas: rval: MOV R0,#0 LDR R1,=0x12345678 BX LR Assemblerprogrammering för ARM-del 2 14

Funktionsparametrar, 8 eller 16 bitar All aritmetik utförs med 32 bitar, alla parametrar måste vara 32 bitar. short och signed char ska därför typkonverteras före anrop. Exempel: Funktionen signed char minc( signed char a, signed char b) och de globala variablerna signed char x,y,z Assembler: är definierade. Visa hur funktionsanropet: LDR x = minc( x, y ); LDRB kodas i assemblerspråk. SXTB LDR LDRB SXTB BL LDR STRB R0,=x R0,[R0] R0,R0 R1,=y R1,[R1] R1,R1 minc R1,=x R0,[R1] Assemblerprogrammering för ARM-del 2 15

Registerspill Maskinorienterad programmering Problem: Det register man behöver är upptaget. Lösning: Man lagrar temporärt registrets innehåll på annan plats (annat register eller i minnet), detta kallas registerspill. Exempel: Funktionen int testme( int a, int b ) är definierad. Visa hur följande funktion kan kodas i assemblerspråk: int f ( int x, int y ) if ( testme( x,y ) ) return 1; return 0; Vi löser på tavlan... Assemblerprogrammering för ARM-del 2 16

Tillfälliga (lokala) variabler Exempel: Gör en lämplig registerallokering för funktionen: void f (int a, int b, int c ) int d: int e; Om f inte är trivial behövs R0-R3 för uttrycksevaluering etc. Enkel grundregel är då : Använd R4,R5 osv till lokala variabler, konventionen säger att dessa kan var upptagna av anropande (caller) funktion och därför måste dom spillas. Maskinorienterad programmering Lösning: Vi ser att R0,R1 och R2 redan är upptagna av parametrar, R3 upplåter vi för uttrycksevaluering i funktionen och gör registerallokeringen: d=r4, e=r5. Vi får då följande kodning: @void f (int a, int b, int c ) f: @ @ int d: @ int e; PUSH R4,R5,LR POP R4,R5,PC @ Assemblerprogrammering för ARM-del 2 17

Registeranvändning med lokala variabler Exempel: Funktionen int g( int ) är definierad. Visa hur följande funktion kan kodas i assemblerspråk: int f( int val ) int i; int bits = 0; for( i=0 ; i< val; i++ ) bits = bits g(i); return bits; Vi löser på tavlan... Assemblerprogrammering för ARM-del 2 18

Höga register R8-R12, för temporär lagring Det är möjligt att använda även register R8-R12 för att spilla register. Vi har dock här begränsat oss till användning av ARM-V6 (huvudsakligen 16-bitars instruktionsformat). Dessa instruktioner använder bara tre bitar i instruktionsformatets registerfält. Man måste då använda en speciell MOV-variant, för att kopiera data från R0-R7 till R8-R12, och vice versa. Assemblerprogrammering för ARM-del 2 19

När inte registren räcker till Då registren inte räcker till måste parametrar och lokala variabler lagras i minnet, stacken är då det lämpligaste stället. Detta är också sant då C- kompilatorn genererar kod som ska användas med en debugger. Vi återkommer till hur register spills till minnet i slutet av kursen. Assemblerprogrammering för ARM-del 2 20