F5: Högnivåprogrammering

Relevanta dokument
F5: Högnivåprogrammering

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Institutionen för elektro- och informationsteknologi, LTH

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

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

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

Digital- och datorteknik

Digital- och datorteknik

Övningsuppgifter i Mikrodatorteknik 4p/5p

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

F4: Assemblerprogrammering

TDIU01 - Programmering i C++, grundkurs

Stack och subrutiner Programmeringskonventionen

Lösningsförslag till Tenta i Mikrodator

LEU240 Mikrodatorsystem

Lösningsförslag till Tenta i Mikrodator

Typkonvertering. Java versus C

Assemblerprogrammering, ARM-Cortex M4 del 3

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Classes och Interfaces, Objects och References, Initialization

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Datorarkitekturer med operativsystem ERIK LARSSON

TSEA28 Datorteknik Y (och U)

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Innehåll. Pekare Exempel

Assemblerprogrammering för ARM del 2

Innehåll. Pekare Exempel

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Övning från förra gången: readword

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Föreläsning 10. Pekare (Pointers)

Programmering B med Visual C

Digital- och datorteknik

Assemblerprogrammering del 3

Assemblerprogrammering - fördjupning

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Kontrollskrivning Mikrodatorteknik CDT S2-704

Datorsystemteknik DVGA03 Föreläsning 5

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Lathund. C för inbyggda system

Lösningar till tentamen i EIT070 Datorteknik

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TSEA28 Datorteknik Y (och U)

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Minnestilldelning (allokering) och frigörande (avallokering) av minne

TSEA28 Datorteknik Y (och U)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Att använda pekare i. C-kod

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

1 Funktioner och procedurell abstraktion

Lathund. C för inbyggda system

Föreläsning 2. Operativsystem och programmering

Maskinorienterad programmering

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Föreläsning 6: Metoder och fält (arrays)

Tommy Färnqvist, IDA, Linköpings universitet

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

IS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Lösningar till tentamen i EIT070 Datorteknik

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering av inbyggda system 2014/2015

OOP Objekt-orienterad programmering

Objektorienterad programmering

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Tentamen. Datorteknik Y, TSEA28

Länkning av Prolog under C

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

TDIU01 - Programmering i C++, grundkurs

Imperativ programmering. Föreläsning 3

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Objektorienterad Programmering (TDDC77)

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

TDIU01 - Programmering i C++, grundkurs

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Tentamen. Datorteknik Y, TSEA28

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

CE_O3. Nios II. Inför lab nios2time

Planering Programmering grundkurs HI1024 HT 2014

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

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.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

4. Maskinnära programmering i C. Förberedelser till hemlaboration 1.

Transkript:

1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via ett register Resultat = KALLE(Indata) MOVE.W Indata,D0 BSR KALLE MOVE.W D0,Resultat Via register genom referens Skicka referens till data via ett register Resultat = KALLE(&Indata) LEA Indata,A0 BSR KALLE MOVE.W D0,Resultat D0 innehåller värdet av funktionens inparameter A0 innehåller pekaren till funktionens inparameter 2 Page 1

2 Subrutin, parameteröverföring: 2(3) Via minnesposition och genom värde Skicka data via en global minnesposition (global variabel) Transfer = Indata; KALLE(); Resultat = Transfer; MOVE.W BSR MOVE.W Indata,Transfer KALLE Transfer,Resultat Minnesposition Transfer tilldelas värdet av funktionens inparameter. Via minnesposition och genom referens Skicka referens till data via en global minnesposition (global variabel) Transfer = &Indata; KALLE(); Resultat = Transfer; MOVE.L BSR MOVE.W #Indata,Transfer KALLE Transfer,Resultat Minnesposition Transfer tilldelas en referens till funktionens inparameter 3 Subrutin, parameteröverföring, 3(3) Via stacken Skicka data via stacken MOVE.W Indata,-(A7) BSR KALLE MOVE.W (A7)+,Resultat Sammanfattning Via register + Snabb - Klarar bara ett fåtal parametrar Via minnesposition + Relativ snabb - Inte så flexibelt, ostrukturerat Via stacken + Mycket flexibel - Långsam KALLE: MOVE.W (4,A7),Indata MOVE.W Resultat,(4,A7) RTS 4 Page 2

Att tänka på när ni använder subrutiner För att underlätta återanvändning av kod bör: Alla register ska vara opåverkade efter exekveringen av subrutinen Utom register som används för parameter överföring från subrutin till huvudprogram. Spara registren ni vill ska vara opåverkade efter subrutinen på stacken Välj den parameteröverföring som passar den aktuella applikationen Register Minnesposition Via stacken 5 Assembler vs. Högnivåspråk När ska man använda assembler? Optimering Programmering av processorer med speciella arkitekturer T ex DSP-processorer Programmering av objekt, där det är hårda krav på minnesandvändning och/eller exekveringstid. Behov av assemblerinstruktioner Utveckling av realtids/operativsystemkärnor Behöver använda stacken och interrupthantering Utveckling av kompilatorer Instruktioner för att implementera högnivåkod 6 Page 3 3

4 Högnivåspråk parameteröverföring i C Parameteröverföringen i en C-funktion Beroende av kompilator På stacken Värde Referens (dvs. pekare) Via register (oftast returvärden) Globala variabler kan också användas Användning bestäms av programmeraren 7 Högnivåspråk, C C kod är (ska) vara oberoende av implementationen Kompileras till assemblerkod Assemblerkoden översätts till maskinkod Koden är oberoende av vart i minnet den exekveras Stöder rekursion void baklanges(char *enstring) { // skriver ut en textsträng baklänges char c; Om c lagras i en fast minnesposition c = *enstring; kommer data att ändras för varje ny if( c!= null) exekvering i den rekursive kedjan. { baklanges(enstring+1); //anropa baklanges igen med nästa tecken typetoscreen(c) ; //skriv tecknet till skärmen } } 8 Page 4

C funktioner C funktioner Koden lagras i någonstans i minnet (statiskt) Lokala variabler lagras på stacken (dynamiskt) Möjliggör rekursion Statiskt omr. kod + statiskt data statisk heapen dynamiskt data Växer uppåt (a7) stacken Växer nedåt 9 Lokala variabler i högnivåspråk Huvudprogram Int mainint; Void Subrutin1(); Subrutin1(); Subrutin1 är deklarerad i huvudprogrammet Subrutin2 är deklarerad i Subrutin1 osv Subrutin1 Int int1; Void Subrutin2(); Subrutin2(); Subrutin2 Int int2; Void Subrutin3(); Subrutin3(); Subrutin3 Int int3; int1 = 1; Hur kan som i ex. Pascal, en subrutin få tillgång till en variabel som deklarerats flera nivåer tidigare i kedjan av funktionsanrop? 10 Page 5 5

Allokera plats för lokala variabler på stacken För att reservera plats på stacken för lokala variabler används instruktionsparet: LINK An, offset Skapar en länkad lista med instanser av funktionsanrop på stacken Spar An på stacken An tilldelas värdet av stackpekaren Stegar stackpekare framåt med ett antal steg som bestäms av offset UNLK An Tar bort en instans av en funktion Adressregistret A6 används ofta av kompilatorer för att hanterad lokala variabler på stacken. 11 Allokera plats för lokala variabler LINK A6, #-8... UNLK A6 SP-4 -> SP A6 -> (SP) SP -> A6 SP-8 - SP SP A6 SP Stacken före LINK Lokala variabler 8 byte Gamla A6 Stacken efter LINK 12 Page 6 6

7 Länkad lista av aktiveringsposter int3 Aktiveringslänk återhoppsadress int2 Aktiveringslänk återhoppsadress int1 Aktiveringslänk återhoppsadress mainint Aktiveringslänk = null Stacken 13 Konstruera med aktiveringsposter 1(3) Uppg) Implementera i assembler parameteröverföringen samt reservera utrymme för lokala variabler motsvarande följande C-funktion: Inget returvärde void prototype( longint param) { longint a=0; char c = k ; Initiering } Utför även initieringen av de lokala variablerna. Du får själv välja lagringsordning för de lokala variablerna. Parametern skall överföras via stacken genom värde. Visa även genom anrop till subrutinen hur parametern tilldelas ett värde före anrop samt åtkomst av parametern i subrutinen. 14 Page 7

8 Konstruera med aktiveringsposter 2(3) Sekvens i anropande subrutin MOVE.L #$11111111,-(SP) *Parameter = 11111111 HEX till stacken BSR prototype *Call prototype(11111111 Hex) ADDQ.L #4,SP *Ta bort parameter från stacken STOP #0 *Stanna exekvering Subrutin Reservera utrymme för närmast högre heltal bytes i de fall det aktuella lagringsbehovet är udda antal bytes. Dvs 5 blir 6 i detta fall. (Adressen till 16 bits eller 32 bits ord måste nämligen alltid vara jämn.) prototype: LINK A6,#-6 *Skapa utrymme på stacken för lokala variabler MOVE.B #107,(-1,A6) *Initiera lokal variabel b = 'k CLR.L (-6,A6) *Initiera lokal variabel a = 0 * Här skrivs nu implementationen av subrutinen * Åtkomst av inparametern sker genom effektiva adressen (14,SP) * Till ex. MOVE.L (14,SP),D0 kopierar inparametern till D0 UNLK A6 *Släpp allokerat utrymme på stacken RTS 15 1 2 Konstruera med aktiveringsposter 3(3) Subrutin prototype: LINK A6,#-6 MOVE.B #107,(-1,A6) * b CLR.L (-6,A6) * a SP-4 -> SP A6 -> (SP) SP -> A6 SP-6 - SP 2 SP a 1 UNLK RTS A6 A6 -> SP (SP) -> A6 SP+4 -> SP 2 A6 1 SP b Aktiveringslänk Återhoppsadress Parameter 1 A6 Aktiveringslänk Observera att varje rad är 16 bit MSB LSB Stacken 16 Pekar på tidigare länk Page 8

9 Heapen Betyder hög Heapen växer mot höga adresser NgnTyp *p; p = new NgnTyp; delete p; p Så många bytes som behövs för NgnTyp p 17 Fragmentering av heapen När block frigörs kommer luckor att uppstå i heapen Heapen blir fragmenterad p2 p4 18 Page 9

10 Defragmentering av heapen 1(3) Genom att sortera kommer systemet utnyttja minnet bättre Problem: Pekarna kommer att peka på fel position i minnet p2 p4 19 Defragmentering av heapen 2(3) För att kunna flytta block i minnet, används masterpekare som referens till blocket Pekaren som användaren använder(handtag), är en pekare till pekare (MP) p2 p4 20 Page 10

11 Ett exempel 1(3) p2 p4 Det sker en fragmentering av heapen när minnesblocken som handtagen p2 och p4 refererar till tas bort. 21 Ett exempel 2(3) Minnesblocket som refererar till flyttas och Master pointer för uppdateras. 22 Page 11

12 Ett exempel 3(3) pnytt Ett nytt minnesblock allokeras. En ledig Master pointer får utgöra ett nytt handtag pnytt. 23 Högnivå datatyper, C Float (IEEE 754) 32 bits -3.4x10 38 3.4x10 38 s eeee eeee mmmmmmmmmmmmmmmmmmmmmmm s = tecken (1) e = exponent (2-komp) (8) m = mantissa (23) double 64 bits -1.8x10 309-1.8x10 309 s eeeeeeeeeee mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm s = tecken (1) e = exponent (2-komp) (11) m = mantissa (52) 24 Page 12

13 Högnivå datatyper, C Char (8bit) Signed (-128 till 127) Unsigned (0 till 255) int (16 eller 32 bit) short int (16 bit) signed (-32768 till 32767) unsigned (0 till 65535) long int (32 bit) signed (-2147483648 till 2147483647) 25 Page 13