Datorteknik ERIK LARSSON

Relevanta dokument
Datorarkitekturer med operativsystem ERIK LARSSON

Datorteknik ERIK LARSSON

Program Datorteknik. Kontrollenhet. Exekvering av en instruktion. Abstraktionsnivå: Högnivåspråk. Assemblyspråk. Maskinspråk.

Datorteknik ERIK LARSSON

Datorteknik ERIK LARSSON

Program. Datorteknik. Semantiskt gap. C - Inledning. Abstraktionsnivå: Högnivåspråk. Assemblyspråk. Maskinspråk

Digitala System: Datorteknik ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Närliggande allokering Datorteknik

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

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

Datorarkitekturer med operativsystem ERIK LARSSON

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Digitala System: Datorteknik ERIK LARSSON

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

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

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

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Kontrollskrivning Mikrodatorteknik CDT S2-704

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

F5: Högnivåprogrammering

F5: Högnivåprogrammering

F4: Assemblerprogrammering

Grundläggande datavetenskap, 4p

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

Tentamen den 18 mars svar Datorteknik, EIT070

Exempeltentamen Datorteknik, EIT070,

Program som ska exekveras ligger i primärminnet. Processorn hämtar instruk7on för instruk7on. Varje instruk7on, som är e= antal 1:or och 0:or, tolkas

Datorarkitekturer med operativsystem ERIK LARSSON

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.

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

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

Datorsystemteknik DVGA03 Föreläsning 8

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Assemblerprogrammering för ARM del 2

TSEA28 Datorteknik Y (och U)

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

TSEA28 Datorteknik Y (och U)

Stack och subrutiner Programmeringskonventionen

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

CE_O2. Nios II. Subrutiner med mera.

Lösningar till tentamen i EIT070 Datorteknik

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Datorteknik ERIK LARSSON

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Datorteknik 2 (AVR 2)

Lösningar till tentamen i EIT070 Datorteknik

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

Att använda pekare i. C-kod

Enkla datatyper minne

Uppgift 1: a) u= a c + a bc+ ab d +b cd

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

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

Digital Aritmetik Unsigned Integers Signed Integers"

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Det finns en hemsida. Adressen är

Datorteknik. Tomas Nordström. Föreläsning 2. För utveckling av verksamhet, produkter och livskvalitet.

Tentamen. Datorteknik Y, TSEA28

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

TDIU01 - Programmering i C++, grundkurs

Institutionen för datavetenskap 2014/15

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

CPU. Carry/Borrow IX. Programräknare

Institutionen för elektro- och informationsteknologi, LTH

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

Tentamen. Datorteknik Y, TSEA28

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Assemblerprogrammering - fördjupning

Assemblerprogrammering, ARM-Cortex M4 del 3

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Digital- och datorteknik

Digital- och datorteknik

LV6 LV7. Aktivera Kursens mål:

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

CE_O3. Nios II. Inför lab nios2time

TDDC77 Objektorienterad Programmering

*Pekarvärden *Pekarvariabler & *

Lösningsförslag till Tenta i Mikrodator

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

Lathund. C för inbyggda system

Klassdeklaration. Metoddeklaration. Parameteröverföring

Tentamen Datorteknik Y, TSEA28 Datum

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

Läs igenom hela laboration 5 innan du börjar beskriva instruktionsavkodaren i VHDL!

TSEA28 Datorteknik Y (och U)

Tentamen i EIT070 Datorteknik

Assemblerprogrammering för ARM del 1

Transkript:

Datorteknik ERIK LARSSON

Program Abstraktionsnivå: Högnivåspråk» t ex C, C++ Assemblyspråk» t ex ADD R1, R2 Maskinspråk» t ex 001101.101

Semantiskt gap Alltmer avancerade programmeringsspråk tas fram för att göra programvaruutveckling mer kraftfull Dessa programmeringsspråk (Ada, C++, Java) ger högre abstraktionsnivå, konsistens och kraft Det semantiska gapet ökar (högnivåspråk-maskinspråk) Abstraktionsnivå Högnivåspråk Maskinspråk Semantiskt gap

Datatyper Datatyp Antal bytes Talområde unsigned char 1 0 255 signed char 1-128 127 unsigned int 2 0 65535 signed int 2-32768 32767 unsigned long int 4 0 4294967295 signed long int 4-2147483648 2147483647 float 4 ±1,18 E-38 3,39 E+38

Datatyper char Tal, Max, Min; Exempel: Tal=5; unsigned int Adress; Exempel: Adress=512; const char Tabell [][3] = {{ 23, 30, 64 }, { 12, 31, 16 }, { 42, 54, 86 }, { 29, 32, 64 }}; Exempel: Tabell[1][1]=23; const char String [] = "ABC";

Datatyper Samma sak lagras: char a = 65; decimalt char a = 0x41; hexadecimalt char a = 0b01000001; binärt char a = A ; ASCII-kod Primärminne Address Instruction/Data 00001000 01000001 00001001 00011011 00001010 00101000 00001011 00010011

Tilldelningssatser Deklarera variabel: unsigned char a; Tilldela variablen ett värde: a = 5; Addera 2 till värdet i a: a = a + 2; a: a: 5 a: 7 Primärminne Address Instruction/Data 00001000 01000001 00001001 00011011 00001010 00101000 00001011 00010011

Aritmetiska operationer Operationer: + addition - subtraktion * multiplikation / division % Modulodivision CPU Kontrollenhet Aritmetisk Logisk Enhet (ALU) OP IN 1 UT ALU IN 2 Status

Beräkningar unsigned char a, b, c; Exempel: a=5; b=10+a-3; c=a*b; a=b 20; // bitvis eller (or) b++; //samma som b=b+1

Bithantering Och (AND): & Eller (OR): Exklusivt eller (XOR): ^ Invertering (NOT): ~ Vänstershift: << Högershift: >> CPU Kontrollenhet Aritmetisk Logisk Enhet (ALU) OP IN 1 UT ALU IN 2 Status

Bithantering Exempel: c1=5; /* c1 har bitmönstret 00000101 */ c2=6; /* c2 har bitmönstret 00000110 */ c9=~c1; /* c9 får bitmönstret 11111010 */ c10=c1<<3; /* c10 får bitmönstret 00101000 */ c11=c1<<6; /* c11 får bitmönstret 01000000 */ c12=c1>>2 /* c12 får bitmönstret 00000001 */ c13=c1&c2 /* c13 får bitmönstret 00000100 */ c14=c1 c2 /* c14 får bitmönstret 00000111 */

Villkor if ( villkor ) sats; Exempel 1: Exempel 2: int n if ( n == 27 ) { din kod här } int n; if ( n == 27 ) { din kod om talet var 27 } else { din kod om talet inte var 27 }

Villkorsuttryck Om a=5 så öka a med 1: if (a == 5) a = a +1; Villkor: // if (villkor) sats; == lika med, > större än, < mindre än,!= inte lika med Om a=10 så öka a med 2 i annat fall minska a med 3: if (a == 10) a = a + 2; else a = a 3;

Villkorsuttryck Så länge a<5 öka b med 3: while (a < 5){ a = a + 2; b = b + 3; }

Loopar Alternativ: while (uttryck) sats; do sats; while (uttryck); for (initiering; styruttryck; stegning) sats; Exempel 1: int n=1; while ( n++ <= 10 ){ din kod } Exempel 2: int n; for ( n=1; n <= 10; n++ ) { din kod här }

Funktioner All kod paketeras i funktioner. Huvudprogrammet: void main(void) { b = 5 + my_funktion(3); } En funktion deklareras: int my_funktion(x) int x { return (x+2); } Funktionsanrop Inparameter Datatyp som returneras Gör/skapar retur värdet

Funktioner Exempel: Funktionen kvadrat beräknar: y=x*x kan se ut: int kvadrat(x) int x { return x*x; } Anrop: y=kvadrat(3); //y blir 9 Värdet av x skickas in och funktionen returnerar kvadraten.

Pekare (Intro) Deklarationen: int i3, i4 Ger att: i3 och i4 är heltalsvaribler Exempel: i3=78; //sätter i3 till 78 i4=5 //sätter i4 till 5 Låt i3 vara lagrat på adress 0 Låt i4 vara lagrat på adress 1 i4: 5 i3: 78 Adress Data 0 (i3) 78 1 (i4) 5 2 3 4 5 6

Pekare &i3 i3: 78 Deklarationen: ip1: int i3, i4, *ip1, *ip2; Ger att: *ip1 och *ip2 är heltalspekarvariabler i3 och i4 är heltalsvariabel Exempel: i3=78; //sätter i3 till 78 ip1=&i3 //sätter ip1 att peka på adress där i3 finns & ger adressen till något Notera: ip1 har plats för en pil (adress) och i3 har plats för ett heltal Adress Data 0 (i3) 78 1 (i4) 5 2 (ip1) 3 (ip2) 4 5 6

Pekare Exempel: Deklarationen (samma som innan): int *ip1, *ip2, i3, i4 i3=78 ip1=&i3 ip2=ip1 //ip2 sätts att peka på samma som ip1 ip1: &i3 i3: 78 ip2:

Pekare Exempel: Deklarationen (samma som innan): int *ip1, *ip2, i3, i4 i3=78; ip1=&i3; ip2=ip1; i4=*ip1; //i4 sätts till det heltal som ip1 pekar på ip1: *ip1 består av två steg. Först, tas pekaren fram. Sedan, via *, tas värdet till pekaren fram ip2: i4: 78 &i3 i3: 78

Pekare Precis som andra variabler, blir pekare inte automatiskt tilldelade ett värde vid deklaration. För att sätta en pekare att peka på ingenting: ip=null; Sätts inte en pekare att peka på ingenting kan den peka på vad som helst det som råkar ligga på den minnesplatsen. ip: X

Pekare till funktioner Adress Data Om, parametern är en pekare.. Exempel: void kvadrat(xref) int *xref { *xref= *xref * *xref; } Anrop: kvadrat(&x); 0 (a) 10 1 (b) 5 2 xref x är ett pekarvärde. Funktionen tar värdet av pekaren, gör kvadrat och updaterar pekaren 3 4 5 6

Exempel 1:Fråga Komplettera koden nedan så att värdet i variabel a och b byter värde. void main (void){ int a, b; // deklaration av värde a = 10; // a tilldelas värde b = 5; // b tilldelas värde? // kod för att a och b // byter värde } Adress Data 0 (a) 10 1 (b) 5 2 3 4 5 6

Exempel 1:Lösning Kod där värdet i variabel a och b byter värde. } void main (void){ int a, b, tmp; // deklaration av värde a=10; // a tilldelas värde b=5; // b tilldelas värde tmp=a; //kod för att a och b a=b; //byter värde b=tmp;

Illustration av lösning a=10; b=5; tmp=a; a=b; b=tmp; Adress Data Adress Data Adress Data Adress Data 0 (a) 10 0 (a) 10 0 (a) 5 0 (a) 5 1 (b) 5 1 (b) 5 1 (b) 5 1 (b) 10 2 (tmp) 2 (tmp) 10 2 (tmp) 10 2 (tmp) 10 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6

Exempel 2:Fråga Skriv en funktion swap som byter värden på två variabler void main (void){ int a, b; // deklaration av värde a = 10; // a tilldelas värde b = 5; // b tilldelas värde swap(a,b); }

Exempel 2:Fråga+problem Skriv en funktion swap som byter värden på två variabler void main (void){ int a, b; // deklaration av värde a = 10; // a tilldelas värde b = 5; // b tilldelas värde a=swap(a,b); } int swap (int c, d){ int temp; temp=c; c=d; d=temp; return????? }

Exempel 2: Lösning Skriv en funktion swap som byter värden på två variabler void swap (int *a, *b){ int temp; //vanlig variabel temp=*a; // * ger värdet som a pekar på *a=*b; *b=temp; }

Illustration av lösning a=10 ; b=5; tmp=*a; (tilldelar tmp det som *a pekar på) *a=*b; (tilldelar det a pekar på värdet som finns i b) *b=tmp; (tilldelar den plats b pekar på värdet i tmp) Adress Data Adress Data Adress Data Adress Data 0 (a) 0 (a) 0 (a) 0 (a) 1 (b) 1 (b) 1 (b) 1 (b) 2 (tmp) 2 (tmp) 10 2 (tmp) 10 2 (tmp) 10 3 3 3 3 4 10 4 10 4 5 4 5 5 5 5 5 5 5 5 10 6 6 6 6

Variablers synlighet #include <stdio.h> unsigned char n; void display (unsigned char number){ static int a; int c; c=4+a; } Global variabel Global variabel Lokal variabel int main(void){ int b; n=5; b=10; display(b);} Lokal variabel

Include Includeringsbara bibliotek: #include <stdio.h> standardfunktioner för I/O

Datorteknik ERIK LARSSON

Program Abstraktionsnivå: Högnivåspråk» t ex C, C++ Assemblyspråk» t ex ADD R1, R2 Maskinspråk» t ex 001101.101

Maskininstruktioner (1) Hämta instruktion på 00001000 (där PC pekar) Fetch (2) Flytta instruktionen 0000101110001011 till CPU (3) Avkoda instruktionen: 00001 MOVE, 01110001 Adress, 011 Register 3 (4) Hämta data på adress: 01110001 Execute (5) Lagra datan i register 3 Primärminne Address Instruktion/data 00001000 0000101110001011 00001001 0001101110000011 00001010 0010100000011011 00001011 0001001110010011 Data Instruktioner Register CPU Kontrollenhet Aritmetisk Logisk Enhet (ALU)

Maskininstruktioner Definitioner: Vad ska göras (operationskod)? Vem är inblandad (source operander)? Vart ska resultatet (destination operand)? Hur fortsätta efter instruktionen?

Maskininstruktioner Att bestämma: Typ av operander och operationer Antal adresser och adresseringsformat Registeraccess Instruktionsformat» Fixed eller flexibelt

Maskininstruktioner Typer av instruktioner: Aritmetiska och logiska (ALU) Dataöverföring Hopp In- och utmatning

Aritmetiska operationer OP IN 1, IN 2: Ingångar UT: utgång (resultat) OP: operation (ADD, SUB, AND,. STATUS: Overflow, Zero,. IN 1 UT ALU IN 2 Status

Aritmetiska operationer Addition (+) och subtraktion (-) Två källor (sources) och en destination (destination) add a, b, c // a = b + c Alla aritmetiska funktioner följer detta mönster Design regel: Regelbundenhet gör implementation enklare Enkelhet ökar möjligheten till högre prestanda till lägre kostnad

Aritmetiska operationer C kod: f = ( g + h ) ( i + j ); Kompileras till assemblykod (MIPS): add t0, g, h # temp t0 = g + h add t1, i, j # temp t1 = i + j sub f, t0, t1 # f = t0 - t1

Adressering Immediate adressering ADD R4,#3 //R4<-R4+3 Operanden finns direkt i instruktionen ADD R4 3

Adressering Direkt adressering ADD R4, 3 //R4<-R4+[3] Adressen till operanden ligger i instruktionen ADD R4 3 Adress 0 1 2 3 4 Data 11 22 33 44 55

Adressering Register adressering ADD R4,R3 //R4<-R4+R3 Liknar direkt adressering men istället för att peka ut i minnet så pekas ett register ut ADD R4 3 Register 0 1 2 3 4 Data 11 22 33 44 55

Adressering Register indirect ADD R4,(R3) R4<-R4+[R3] Liknar indirekt adressering men instruktion pekar ut register istället för minnesplats ADD R4 3 R3 Adress Data

Hoppinstruktioner Exempel 1 a=a+b; c=a-b; d=a*f; Instruktionerna utförs i ordning Instruktionen här görs flera gånger Exempel 2 a=0; while (a<10) a=a+1; if (b==5) c=10; else c=0; d=a*f; Beroende på villkor görs olika saker (olika instruktioner exekveras)

Hoppinstruktion Nästa instruktion är normalt nästa i programmet. PC=PC+1; Programräknaren (program counter) räknas upp och nästa instruktion hämtas För att göra hopp till annan del av kod, ladda programräknaren med nytt värde PC=dit hopp ska sek Två typer av hopp Ovillkorliga hopp Villkorliga hopp

Ovillkorliga hopp Exempel: Programräknaren får nytt värde och hämtar nästa instruktion på nytt ställe Adress Instruktion Kommentar 01011 Instruktion 29 //Instruktion 29,PC=PC+1 01100 BR 10101 // PC = 10101, PC=PC+1 01101 Instruktion 31 //Instruktion 31, PC=PC+1 10101 Instruktion 89 //Instruktion 89, PC=PC+1

Villkorliga hopp Villkor bestäms av flaggor i statusregister De vanligaste flaggorna är: N: 1 om resultatet är negativt (annars 0) Z: 1 om resultatet är noll (annars 0) V: 1 om aritmetiskt overflow (annars 0) C: 1 om carry (annars 0) UT OP ALU IN 1 IN 2 Status

Villkorliga hopp Exempel: SUB R1, #1 BEZ TARGET Kan påverka statusflagga // R1=R1-1 // IF Z=1 THEN PC=TARGET Kollar statusflagga OP IN 1 N Z V C UT ALU IN 2 Statusregister Status

Villkorliga hopp ADD XOR ClearY System buss Z Z in ALU Y MBR MAR PC Z out Zero Carry in Y out Y in MBR out MBR in MAR in PC out PC in R0 out R0 in RN out RN in IR in IR out Kontroll signaler MBR out R 0 R n IR Klocka Kontrollenhet Y in R0 RN out out MAR in Statussignaler Carry, overflow MAR out PC in ADD

Subrutiner och funktioner Program: void main(void){ int a, b, c; a=5; b=6; c=my_add(a,b); } Exekvering: a=5 //instruktion 1 b=6 //instruktion 2 funktionsanrop +parameteröverföring c=my_add(a,b); instruktion 11 återhopp+parameteröverföring int my_add(int x, int y) { return x+y; }

Subrutiner och funktioner Problem instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Hopp till subrutin Återhopp från subrutin Parameteröverföring Nästlade subrutinanrop 3 1 4 2 proca: instruktion 11 Instruktion 12 instruktion 13 return 1 2 3 4 Exekvering: instruktion 1 instruktion 11 //Proc A Instruktion 12 //Proc A Instruktion 13 //Proc A instruktion 3 instruktion 4 instruktion 11 //Proc A Instruktion 12 //Proc A instruktion 13 //Proc A instruktion 6

Subrutiner och funktioner Problem instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Hopp till subrutin Återhopp från subrutin Parameteröverföring Nästlade subrutinanrop 5 1 8 4 proca: instruktion 11 call proc B instruktion 13 return 2 3 6 7 1 2 3 4 5 6 7 8 procb: Instruktion 21 Instruktion 22 return Exekvering: instruktion 1 instruktion 11 //Proc A Instruktion 21 //Proc B Instruktion 22 instruktion 13 //Proc A instruktion 3 instruktion 4 instruktion 11 //Proc A Instruktion 21 //Proc B Instruktion 22 instruktion 13 //Proc A instruktion 6

Subrutiner och funktioner instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Vid call: Innan hopp, spara PC proca: instruktion 11 call proc B instruktion 13 return Vid call: Innan hopp, spara PC procb: Instruktion 21 Instruktion 22 return Vid call: Innan hopp, spara PC Vid return: Kolla återhopp Vid return: Kolla återhopp

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 1 Stackpekare Stack 2 2 1100 0011 3 3 0011 0011 4 4 1111 1111 5 5 0000 1111 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 2 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 0000 1111 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 3 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 4 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 5 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack för subrutiner och funktioner Push 12 (tid 2) Push 2 (tid 1) Push 12 (tid 6) 12 2 5 12 2 instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Push 5 (tid 5) proca: instruktion 11 call proc B instruktion 13 return Pop (tid 4) ger 2 12 2 procb: Instruktion 21 Instruktion 22 return Pop (tid 3) ger 12 12 2 5 Pop (tid 8) Pop (tid 7) Ger 5 10 ger 12 5 12 5

Register för subrutiner och funktioner R 0 Alla register R N Level i Register window In Local Out CWP: Current Window Pointer Level i+1 Level i+2 CWP CWP In Local Out In Local Out instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 proca: instruktion 11 call proc B instruktion 13 return procb: Instruktion 21 Instruktion 22 return CWP

In- och utmatning Läsning och skrivning: Enhet för indata Primärminne (CPU) Enhet för utdata Sekundärminne

Minnesmappad och isolerad I/O

Exempel på minnesmappad I/O LOAD R1, 7 //Ladda R1 med värde på adress 7 STORE R1, 6 //Lagra värdet i R1 på adressplats 6 Adress Instruktion/ Data 0 1111 0000 1 1010 0101 2 1100 0011 3 0011 0011 4 1111 1111 5 0000 1111 6 0010 0000 7 0010 0000

Maskininstruktioner Aritmetiska och logiska (ALU) Dataöverföring (adressering) Hopp och subrutiner Inmatning/utmating (Input/Output (I/O))

Instruktionsformat Hur definiera fälten i instruktioner? Opcode Operand1 Operand2 Hur ska högnivåspråk kompileras och exekveras effektivt? Abstraktionsnivå Högnivåspråk Maskinspråk Semantiskt gap

Antal adresser i instruktion För att beräkna: X = (A+B)*C 4-adress instruktioner: Op A1, A2, A3, A4 //A1 <- [A2] op [A3], nästa instruktion = A4 I1: ADD X, A, B, I2 I2: MUL X, X, C, I3 I3: 3-adress instruktioner: Op A1, A2, A3 //A1 <- [A2] op [A3] I1: ADD X, A, B I2: MUL X, X, C I3: OP A1 A2 A3 A4 OP A1 A2 A3

Antal adresser i instruktion För att beräkna: X = (A+B)*C 2-adress instruktioner: Op A1, A2 //A1 <- [A1] op [A2] MOVE A, X ADD X, B MUL X, C 1-adress instruktioner: Op A1 //Acc <- [Acc] op [A1] LOAD A ADD B MUL C STORE X OP A1 A2 OP A1

Antal adresser i instruktion Vanligast med 2 och 3 adresser i instruktioner 4 adress instruktioner är opraktiskt. Nästa instruktion antas vara nästa instruktion. PC räknas upp av sig själv. Måste ha hopp-instruktioner 1 adress instruktion är ganska begränsande Exempel, antag 32 register (5 bitar behövs): 3-adress format: 15 bitar 2-adress format: 10 bitar 1-adress format: 5 bitar OP Rdest Rsrc1 Rsrc2 Få adresser, få instruktioner förenklar processorn men gör den mer primitiv

Intel x86 ISA Utveckling med backward compatibility 8080 (1974): 8-bit microprocessor» Accumulator, plus 3 index-register pairs 8086 (1978): 16-bit extension to 8080» Complex instruction set (CISC) 8087 (1980): floating-point coprocessor» Adds FP instructions and register stack 80286 (1982): 24-bit addresses, MMU» Segmented memory mapping and protection 80386 (1985): 32-bit extension (now IA-32)» Additional addressing modes and operations» Paged memory mapping as well as segments AMD och Intel bygger för x86 arkitektur men organiserar på olika sätt

Intel x86 ISA Bakåtkompabilitet (Backward compatibility)