Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,

Lignende præsentationer


Præsentationer af emnet: "DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,"— Præsentationens transcript:

1 dComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet, and your foot.

2 dComNet2 Niveauer af virtuelle maskiner højniveausprog symbolsk maskinkodeniveau ISA niveauet / maskinkodeniveauet / maskinniveau

3 dComNet3 Instruction Set Architecture Level Grænseflade mellem hardware og software: Interessant for maskinkodeprogrammører (eks: device drivere, optimering) og oversættere (compilere). Fysisk maskine: Pentium, UltraSPARC, Intel 8051,… 01100011100 …. k = 6-i-j oversættelse

4 dComNet4 Fornuftige spørgsmål om en maskine 1. Hvad skal maskinen bruges til? 2. Hvordan programmeres maskinen? 3. Hvordan er maskinen opbygget?

5 dComNet5 Svar for ISA-niveauet 1.Hvad skal maskinen bruges til? Til afvikling af programmer skrevet i højniveausprog. 2. Hvordan programmeres maskinen? I maskinkode, men i praksis skrives programmer i symbolsk maskinkode, som derefter oversættes til absolut maskinkode. 3.Hvordan er maskinen opbygget? Baseret på von Neumann maskinarkitektur.

6 dComNet6 Opbygning og begreber Begreber: Kontrol- og beregningsenhed, registre. Lager, lagerceller, lagermodellen. Maskininstruktioner (ordrer), instruktionssæt, ordreformat. Ydre enheder (I/O devices). Afvikle absolut maskinkode gemt i lageret (Main memory)

7 dComNet 7 Instruktionsformat og repræsentation k = 6-i-j; bipush 6 0x10 0x06 iload 1 0x15 0x01 isub 0x64 iload 2 0x15 0x02 isub 0x64 istore 3 0x36 højniveauSymbolsk maskinkode absolut maskinkode Absolut maskinkode her opskrevet i hexadecimal notation, men ligger i binær representation i lageret.

8 dComNet8 Udførsel af maskinkode 1.Fetch the next instruction from memory into the instruction register. 2.Change the program counter to point to the following instruction 3.Determine the type of instruction just fetched. 4.If the instruction uses a word in memory, determine where it is. 5.Fetch the word, if needed, into a CPU register. 6.Execute the instruction. 7.Go to step 1 to begin executing the following instruction. Via fetch-decode-execute cycle (SCO s. 54): Hver iteration af løkken udfører en maskininstruktion.

9 dComNet9 Udførsel af maskininstruktion Involverer oftest den aritmetisk logiske enhed (ALU’en): Operander må typisk hentes ind fra lageret før ALU’en kan opererer på dem ifm. udførsel af instruktionen.

10 dComNet10 Registre Kontrolinformation program counter instruktionsregister stack pointer stack frame pointer … Operander Ikke alle registre er tilgængelige for ISA-programmøren. Kan lagre et antal bit afhængig af registerbredden.

11 dComNet11 Lageret Indeholder program og operander (data). Organiseret som sekvens af celler som hver lagrer et antal bit: Celler i lageret udpeges af adresser 0,...,n-1. 1 byte er 8 bit

12 dComNet12 Maskinord Celler grupperes i maskinord (words) Typisk 4 eller 8 byte (32 eller 64 bit). Størrelsen er typisk relateret til bredden af registre på maskinen.

13 dComNet13 Foreløbig opsummering Maskinordrer (programmet) befinder sig i lageret. Operander (data) befinder sig i lageret og i registre. Kontrolinformation befinder sig i registre. Hvordan tilgås operander i lageret? Hvordan implementeres metodekald i maskinkode?

14 dComNet14 IJVM Simplificering Java’s Virtuelle Maskine (JVM): Kun heltalsoperationer og ingen objektorientering.

15 dComNet15 IJVM ordreformat

16 dComNet16 Eksempel: ordreformat bipush 6 0x10 0x06 iload 1 0x15 0x01 isub 0x64 iload 2 0x15 0x02 isub 0x64 istore 3 0x36

17 dComNet17 IJVM Lagermodel Opdelt i tre områder (konstant pool, stakken, method area): Indlejret i et 4Gb lineært lager: 4.294.967.296 celler (1 byte/celle). 32 bit8 bit32 bit

18 dComNet18 IJVM registre Program Counter (PC): 32-bit register Udpeger aktuel instruktion (byte) i method area. Stack Pointer (SP) : 32-bit register Udpeger øverste element (word) på stakken. Local Variable Frame Pointer (LV): 32-bit register Udpeger bunden (word) af det aktuelle stakafsnit. Constant Pool Pointer: 32-bit register Udpeger bunden (word) af konstant pool i lageret Ingen registre kan direkte tilgås via IJVM instruktioner.

19 dComNet19 Udførsel af instruktioner Ændrer maskinens tilstand jf. ”Meaning”: bipush 6 0x10 0x06 (PC, SP, LV, Stak) → (PC', SP', LV', Stak')

20 dComNet20 Stakken En “abstraktion” ovenpå lageret. Bruges til at lave beregninger: Bruges til udførsel af metodekald:

21 dComNet21 Rekursive metodekald /* towers.java */ public class towers { public static void towers(int n, int i, int j) { int k; if (n == 1) System.out.println ("Move a disk from " + i + " to " + j); else { k = 6 - i - j; towers(n-1, i, k); towers(1, i, j); towers(n-1, k, j); } public static void main(String[] args) { towers(3, 1, 3); } Værdier af parametre er lokale for hver instans? Returnering til den korrekte instans ved terminering?

22 dComNet22 Metodekald Understøttes af instruktionerne: invokevirtual, ireturn, iload, istore Baseret på begrebet stakafsnit (stack frame): –Etableres når en metode kaldes ( invokevirtual ). –Nedlægges når metoden returnerer ( ireturn ). Et stakafsnit indeholder: –Argumenter/parametre for metoden (tilgås via iload ) –Værdier for lokale variable (tilgås via iload/istore ) –Kontrolinformation til genetablering af tilstand. Registret LV udpeger altid bunden af det aktuelle stakafsnit.

23 dComNet23 invokevirtual callee

24 dComNet24 ireturn

25 dComNet25 ?

26 dComNet26 IJVM ISA-niveau Kan implementeres via et mikroprogram på Mic-1 mikroarkitekturen:

27 dComNet27 IJVM Simulator Kan afvikles på alle DAIMI Linux-maskiner efter daimi-setup -a /users/kursus/dArk/dArk-tools ijvm-asm oversætter fra symbolsk IJVM maskinkode ijvm simulerer udførelsen af IJVM maskinkode Læs i IJVM Tools Manual tilgængelig via hjemmesiden. Afvikler IJVM maskinkode som om den var en fysisk arkitektur.

28 dComNet28

29 dComNet29

30 dComNet30.method main // int main.args 3 // ( int a, int b ).define a = 1.define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } test.j

31 dComNet31.method min // int min.args 3 // ( int a, int b ){.define a = 1.define b = 2.locals 1 // int r;.define r = 3 iload a // if ( a >= b ) iload b isub // stack = a - b,... ; a - b a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; istore r end_if: iload r // return r; ireturn // }

32 dComNet32 test.j main index: 0 method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 00 07 15 01 36 03 15 03 ac constant pool: 2 words 00000000 0000000e oversættes til ijvm-asm test.j test.bc fortolkes af ijvm test.bc 77 43 IJVM simulator

33 dComNet33 main index: 0 method area: 40 bytes 000 03 200 00 410 58bipush 88 615 01iload 1 815 02iload 2 10b6 00 01invokevirtual 1 13acireturn 1400 03 1600 01 1815 01iload 1 2015 02iload 2 2264isub 239b 00 0aiflt 10 2615 02iload 2 2836 03istore 3 30a7 00 07goto 7 3315 01iload 1 3536 03istore 3 3715 03iload 3 39acireturn constant pool: 2 words 00000000 0000000e Antal argumenter for main Antal lokale variable for main Start adresse for main Start adresse for min

34 dComNet34 IJVM Trace of foo stack = 0, 1, 43, 77, 15 bipush 88 [10 58] stack = 88, 0, 1, 43, 77, 15 iload 1 [15 01] stack = 77, 88, 0, 1, 43, 77, 15 iload 2 [15 02] stack = 43, 77, 88, 0, 1, 43, 77, 15 invokevirtual 1 [b6 00 01] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload 1 [15 01] stack = 77, 12, 13, 0, 43, 77, 21, 0 iload 2 [15 02] stack = 43, 77, 12, 13, 0, 43, 77, 21 isub [64] stack = 34, 12, 13, 0, 43, 77, 21, 0 iflt 10 [9b 00 0a] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload 2 [15 02] stack = 43, 12, 13, 0, 43, 77, 21, 0 istore 3 [36 03] stack = 12, 13, 43, 43, 77, 21, 0, 1 goto 7 [a7 00 07] stack = 12, 13, 43, 43, 77, 21, 0, 1 iload 3 [15 03] stack = 43, 12, 13, 43, 43, 77, 21, 0 ireturn [ac] stack = 43, 0, 1, 43, 77, 15 ireturn [ac] stack = 43 return value: 43 ijvm test.bc 77 43

35 dComNet35 Opsummering ISA-niveauet: Maskininstruktioner og instruktionsformat. Absolut maskinkode. Registre og lagermodellen. IJVM maskinen: Registre: PC, SP, LV, CPP. Lagermodel: method area, constant pool, stakken. Metodekald og stakafsnit, parametre og lokale variable. IJVM simulatoren


Download ppt "DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,"

Lignende præsentationer


Annoncer fra Google