Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op

Samankaltaiset esitykset


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

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

2 Tietokoneen ja ohjelmiston rakenne
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. M=M-1 Näistä asioista lisää myöhemmin kurssilla… Korkeantason kieli Virtual machine Assembly kieli Konekieli Tietokonealusta Loogiset piirit

3 Tietokoneen rakenne - väylä

4 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

5 RAM muisti Osoitteet 0 - 16383 (2^14 osoitetta, 14 bittinen osoite)
Normaalia RAM muistia 16K Osoitteet Näyttö – 8192 (8k) muistipaikkaa 256 riviä, 512 pikseliä per rivi Mustavalkoinen näyttö – Pikselin väri voidaan tallentaa yhteen bittiin 256*512*1 = 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

6 Esimerkkiohjelma // C# koodia // Adds 1+...+5. int i = 1; int sum = 0;
while (i <= 5){ sum += i; Console.WriteLine(sum); i++; } // PSEUDO Assembly koodia Alusta muuttujat i=1 ja sum=0 (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

7 // 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 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

8 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

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

10 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

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

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

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

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

15 WHILE logiikka (LOOP) // D=10-y tai D=y-10 //while condition {
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 //while condition { //while (10-y<0) { while (y<10) { code block 1 // esim. y++ } code block 2 Assembly kielen käytäntö True = -1 = ( )2 False = 0 = ( )2

16 IF logiikka D // not condition // D = !x //if condition {
// if x=0 -> D=!x=-1 (bin) // if 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 //if condition { if (x != 0) { code block 1 } else { // x=0 code block 2 code block 3 Assembly kielen käytäntö True = -1 = ( )2 False = 0 = ( )2

17 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 Code block 1 Draw_letter(A); Code block 2 void Draw_letter(Char x) { Code block 3 } // minne? miten palataan?


Lataa ppt "TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op"

Samankaltaiset esitykset


Iklan oleh Google