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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Assemblerprogrammering, ARM-Cortex M4 del 3

(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

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.

TSEA28 Datorteknik Y (och U)

Innehåll. Pekare Exempel

Assemblerprogrammering för ARM del 2

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

Innehåll. Pekare Exempel

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

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

Datorsystemteknik DVGA03 Föreläsning 5

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

Lösningar till tentamen i EIT070 Datorteknik

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

Lathund. C för inbyggda system

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

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

TSEA28 Datorteknik Y (och U)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Att använda pekare i. C-kod

1 Funktioner och procedurell abstraktion

Lathund. C för inbyggda system

Föreläsning 2. Operativsystem och programmering

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

Maskinorienterad programmering

Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

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

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Lösningar till tentamen i EIT070 Datorteknik

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

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

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.

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

Imperativ programmering. Föreläsning 3

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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.

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

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

Föreläsning 2, vecka 8: Repetition

Transkript:

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

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 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 värdet av funktionens inparameter. 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

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

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

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

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

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

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 prototype: 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.) 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 Observera att varje rad är 16 bit 1 A6 Parameter Aktiveringslänk MSB LSB Stacken 16 Pekar på tidigare länk

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 p1 p2 p3 p4 18

Defragmentering av heapen 1(3) Genom att sortera kommer systemet utnyttja minnet bättre Problem: Pekarna kommer att peka på fel position i minnet p1 p2 p3 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) p1 p2 p3 p4 20

Ett exempel 1(3) p1 p2 p3 p4 p1 p3 Null Null Det sker en fragmentering av heapen när minnesblocken som handtagen p2 och p4 refererar till tas bort. 21

Ett exempel 2(3) p1 p3 Null Null p1 p3 Null Null Minnesblocket som p3 refererar till flyttas och Master pointer för p3 uppdateras. 22

Ett exempel 3(3) p1 p3 Null Null p1 pnytt p3 Null Ett nytt minnesblock allokeras. En ledig Master pointer får utgöra ett nytt handtag pnytt. 23

Float (IEEE 754) 32 bits double Högnivå datatyper, C -3.4x10 38 3.4x10 38 64 bits s eeee eeee mmmmmmmmmmmmmmmmmmmmmmm s = tecken (1) e = exponent (2-komp) (8) m = mantissa (23) -1.8x10 309-1.8x10 309 s eeeeeeeeeee mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm s = tecken (1) e = exponent (2-komp) (11) m = mantissa (52) 24

Char (8bit) Högnivå datatyper, C 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