Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli.

Samankaltaiset esitykset


Esitys aiheesta: "TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli."— Esityksen transkriptio:

1 TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli

2 Loogiset piirit Tietokoneen ja ohjelmiston rakenne Tietokonealusta Konekieli Assembly kieli Virtual machine Korkeantason kieli Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne määrää sen minkälaisia käskyjä sille voidaan antaa -> käskykanta (Instruction set) Konekieli on joukko binäärisiä ”sanoja” jotka vastaavat prosessorin käskyjä Assembly kieli antaa binäärisille bittijoukoille paremmin muistettavat vastineet, esim. – 1111110111001000 – M=M-1 Jokaiselle prosessorityypille on oma konekieli ja siten myös assembly kieli

3 Tietokoneen toiminta HACK tietokone – Hae A-käsky – Suorita A-Käsky – Hae C-käsky – Suorita C-Käsky – Toista alusta ’Normaali’ –tietokone – Hae käsky – Suorita käsky – Toista alusta

4 // C# koodia // Adds 1+...+5. int i = 1; int sum = 0; while (i <= 5){ sum += i; Console.WriteLine(sum); i++; } Esimerkkiohjelma // PSEUDO Assembly koodia Alusta muuttujat i=1 ja sum=0 (varaa niille paikka muistista) (LOOP) Laske i-5 Jos ALU output > 0 niin indeksi liian suuri, hyppää LOPPU:un muuten (ALU output <= 0) kasvata summaa kasvata indeksiä hyppää LOOP:iin (LOPPU) Lopeta ohjelma

5 // Hack assembly koodi @i // assembler -kääntäjää valitsee muistipaikan, jonne i tallennetaan M=1 // i=1 (sijoitetaan indeksin aloitusarvo yo. muistipaikkaan) @sum // assembler -kääntäjää valitsee muistipaikan, jonne sum tallennetaan M=0 // sum=0 (alustetaan summa nollaksi tallentamalla 0 sum -muuttujan muistipaikkaan) (LOOP) // määrittää hyppyosoitteen @i // Asetetaan A rekisterin arvoksi i -parametrin muistipaikka D=M // D=M[i] haetaan RAM muistin (M) osoitteesta i lukuarvo, tallennetaan D rekisteriin @5 // asetetaan A rekisteriin arvo 5 D=D-A // D=i-5 käytetään A rekisterin arvoa vakiona, ja vähennetään se indeksin i arvosta, ja tallennetaan D rekisteriin @END // asetetaan A rekisteriin mahdollinen hyppy osoite (PC:n uusi arvo) eli (END) rivin alapuolella olevan rivin osoite D;JGT // If (i-5)>0 goto END // tutkitaan onko D positiivinen (jolloin hypätään (END) - kohtaan) vai negatiivinen (ei hypätä, vaan jatketaan seuraavalle riville) @i // Asetetaan A rekisteriin i:n osoite D=M // D=M[i] haetaan i:n arvo muistista osoitteesta M[i] ja tallennetaan D rekisteriin @sum // asetetaan A rekisterin arvoksi sum parametrin osoite M=D+M // sum=i+sum // haetaan muistista M[sum] arvo yo. osoitteesta, lisätään se D rekisterin arvoon ja tallennetaan muistiin M[sum] osoitteeseen @i // Asetetaan A rekisteriin i:n osoite M=M+1 // i=i+1 // haetaan i:n arvo yo. osoitteesta, lisätään siihen 1 ja tallennetaan samaan osoitteeseen @LOOP // asetetaan A rekisteriin (LOOP) tekstin alapuolella olevan koodirivin numero (muistipaikka ROM muistissa) 0;JMP // Goto LOOP // lasketaan "nolla", ja riippumatta laskutoimituksen tuloksesta asetetaan ohjelmalaskurin (PC):n arvoksi yo. ROM muistipaikka (END) // määrittää hyppyosoitteen @END // Kirjan tekijöiden tapa lopettaa ohjelman suoritus (menemällä ikuiseen silmukkaan lopuksi) 0;JMP // Infinite loop

6 Assembly -käskyt A-Instruction – @value – Missä value on ei-negatiivinen kokonaisluku – Binäärisenä: 0vvv vvvv vvvv vvvv – Käytetään lukuarvon tallentamiseen A rekisteriin A rekisterin arvoa voidaan käyttää kolmella eri tavalla – Tallennetaan vakio arvo (A = value) – Valitaan RAM muistipaikka (register = RAM[A]) – Valitaan ROM muistin seuraava suoritettava käsky (muistipaikka) (PC = A) – A-Instruction:ia täytyy seurata C-Instruction, joka määrää mitä A rekisteriin tallennetulla lukuarvolla tehdään

7 Assembly -käskyt A-Instruction @47 // A=47 D=A // D=47 @47 // A=47 D=M// D=RAM[47] @47 // A=47 0;JMP // Ladataan PC:lle uusi arvo (ROM muistin muistipaikka, josta ohjelman suoritusta jatketaan)

8 Assembly -käskyt C-Instruction – dest=comp;jump dest = M, D, MD, A, AM, AD, AMD tai null – Kertoo minne laskutoimituksen comp tulos tallennetaan jump = JGT, JEQ, JGE, JLT, JNE, JLE, JMP tai null – Kertoo millä ehdolla hypätään (ladataan ohjelmalaskurille (PC) uusi arvo) comp = 0, 1, -1, D, A, !D, !A, -D, -A, D+1, A+1, D-1, A-1, D+A, D-A, A-D, D&A, D|A, M, !M, -M,M+1, M- 1, D+M, D-M, M-D, D&M, D|M – Kertoo ALU:lle mikä operaatio suoritetaan – Ja minkä rekisterin/muistipaikan arvoja käytetään operaatiossa

9 dest=comp;jump Binäärinen: 1 1 1 a c1 c2 c3 c4 c5 c6 d1 d2 d3 j1 j2 j3 compdest jump C-instruction Not used @47 // 0000000000101111 D=A // 111accccccdddjjj @47 // 0000000000101111 D=M// 111accccccdddjjj @47 // 0000000000101111 0;JMP // 111accccccdddjjj

10 (a=0)c1 c2 c3 c4 c5 c6(a=1) 0 1 0 1 0 1 0 1 1 1 1 1 1 1 -1 1 1 1 0 1 0 D 0 0 1 1 0 0 A 1 1 0 0 0 0 M !D 0 0 1 1 0 1 !A 1 1 0 0 0 1 !M -D 0 0 1 1 1 1 -A 1 1 0 0 1 1 -M D+1 0 1 1 1 1 1 A+1 1 1 0 1 1 1 M+1 D-1 0 0 1 1 1 0 A-1 1 1 0 0 1 0 M-1 D+A 0 0 0 0 1 0 D+M D-A 0 1 0 0 1 1 D-M A-D 0 0 0 1 1 1 M-D D&A 0 0 0 0 0 0 D&M D|A 0 1 0 1 0 1 D|M Comp(ute)

11 j1 j2 j3 (out 0) Mnemonic Effect 0 0 0 null No jump 0 0 1 JGT If out > 0 jump 0 1 0 JEQ If out = 0 jump 0 1 1 JGE If out ≥ 0 jump 1 0 0 JLT If out < 0 jump 1 0 1 JNE If out ≠ 0 jump 1 1 0 JLE If out ≤ 0 jump 1 1 1 JMP Jump Hyppykäskyt Mnemonic ≈ muistisääntö (assembly kielinen toteutus)

12 Dest(ination) d1 d2 d3 Mnemonic Destination (minne tallennetaan) 0 0 0null Operaation tulosta ei tallenneta 0 0 1M Memory[A] (RAM muistipaikka A) 0 1 0D D register 0 1 1 MD Memory[A] and D register 1 0 0 A A register 1 0 1 AM A register and Memory[A] 1 1 0 AD A register and D register 1 1 1 AMD A register, Memory[A], and D register

13 //while condition { //while (10-y<0) { while (y<10) { code block 1 // esim. y++ } code block 2 WHILE logiikka (LOOP) // D=10-y tai D=y-10 D // not condition // tallennetaan D:hen False // ehto, jolla hypätään @END D;JEQ // D≠0 code block 1 //y++ etc. @LOOP 0;JMP (END) // D=0 false code block 2 Assembly kielen käytäntö True = -1 = (1111111111111111) 2 False = 0 = (0000000000000000) 2

14 //if condition { if (x != 0) { code block 1 } else { // x==0 code block 2 } code block 3 IF logiikka D // negatoitu ehto (not x) // D = !x // jos x=0 -> D=!x=-1 (bin) // jos x=-1 -> D=!x=0 (bin) @IF_TRUE D;JEQ // if D==0 then jmp // else x==0 (D≠0) code block 2 @END 0;JMP (IF_TRUE) // (x != 0) code block 1 (END) code block 3 Assembly kielen käytäntö True = -1 = (1111111111111111) 2 False = 0 = (0000000000000000) 2

15 Code block 1 Draw_letter(A); Code block 2 void Draw_letter(Char x) { Code block 3 } // minne? miten palataan? Aliohjelmakutsu Code block 1 // aliohjelman paluuosoite, // joka tallennetaan takaisin – // muuttujaan @PALUUOSOITE D=A @takaisin M=D @ALIOHJELMA 0;JMP (PALUUOSOITE) //tänne Code block 2 …… (ALIOHJELMA) Code block 3 @takaisin //haetaan paluuosoite A=M //asetetaan hyppyä varten 0;JMP

16 Tietokoneen rakenne - väylä

17 Muisti ROM muisti, ladataan konekielinen ohjelma RAM muisti, käytetään ohjelman parametrien tallentamiseen I/O laitteet, näyttö ja näppis – Memory-mapped I/O – I/O laitteet kytketty samaan väylään kuin muisti – Laitteilla oma ”muistiosoite” – Meillä RAM muistin jatkeena

18 RAM muisti Osoitteet 0 - 16383 (2^14 osoitetta, 14 bittinen osoite) – Normaalia RAM muistia 16K Osoitteet 16384 - 24575 – Näyttö – 8192 (8k) muistipaikkaa 256 riviä, 512 pikseliä per rivi Mustavalkoinen näyttö – Pikselin väri voidaan tallentaa yhteen bittiin 256*512*1 = 131072 bittiä Yhteen muistipaikkaan voidaan tallentaa 16 bittiä – 131072/16 = 8192 muistipaikkaa – Ei voida lukea, muistipaikkaan bittejä kirjoittamalla (muuttamalla 0 -> 1) saadaan pikseli mustaksi Osoite 24576 – Näppäimistön muistiosoite – Voidaan lukea mitä näppäintä on painettu


Lataa ppt "TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli."

Samankaltaiset esitykset


Iklan oleh Google