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

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

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Ohjelmointiharjoituksia Arduino-ympäristössä

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

11. Javan toistorakenteet 11.1

Ohjelmoinnin peruskurssi Y1

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Kertausluento luennoista 1-3 1

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Harjoitustyö: virtuaalikone

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

2 Konekieli, aliohjelmat, keskeytykset

12. Javan toistorakenteet 12.1

JOHDATUS TIETOKONETEKNIIKKAAN. Tietokoneiden loogisten toimintaperiaatteiden kuvaus kuvitteellisen tietokoneen avulla

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

Monipuolinen esimerkki

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Luento 5 (verkkoluento 5) Suoritin ja väylä

Ohjelmoinnin perusteet Y Python

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Ohjelmoinnin perusteet Y Python

Sisältö. 22. Taulukot. Yleistä. Yleistä

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Aktivaatiotietue. Yleiskäsite funktio (aliohjelma) -mekanismin tarvitsemille tiedoille. Kehysosoitin (%fp) missä tiedot ovat

Java-kielen perusteet

4. Lausekielinen ohjelmointi 4.1

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Käyttöjärjestelmän rakenne

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

1. Keskusyksikön rakenne

Ohjelmoinnin peruskurssi Y1

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

TAMPEREEN TEKNILLINEN YLIOPISTO

Jakso 4 Aliohjelmien toteutus

Ohjelmoinnin perusteet Y Python

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (4)

13. Loogiset operaatiot 13.1

811120P Diskreetit rakenteet

Jakso 5 Suoritin ja väylä

Jakso 5 Suoritin ja väylä

5. HelloWorld-ohjelma 5.1

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Python-ohjelmointi Harjoitus 2

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Luento 4 Aliohjelmien toteutus

13. Loogiset operaatiot 13.1

Älykännykät ovat pieneen tilaan paketoituja, mutta suuret ominaisuudet omaavia tietokoneita.

11. Javan valintarakenteet 11.1

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Ohjelmoinnin perusteet Y Python

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

TAMPEREEN TEKNILLINEN YLIOPISTO

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: rekisterit

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

11. Javan valintarakenteet 11.1

Transkriptio:

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli

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. 1111110111001000 M=M-1 Jokaiselle prosessorityypille on oma konekieli ja siten myös assembly kieli Korkeantason kieli Virtual machine Assembly kieli Konekieli Tietokonealusta Loogiset piirit

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

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

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

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

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)

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

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

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

Hyppykäskyt j1 j2 j3 (out < 0) (out = 0) (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 Mnemonic muistisääntö (assembly kielinen toteutus)

Dest(ination) d1 d2 d3 Mnemonic Destination (minne tallennetaan) 0 0 0 null Operaation tulosta ei tallenneta 0 0 1 M Memory[A] (RAM muistipaikka A) 0 1 0 D 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

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

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

Code block 1 Draw_letter(A); Code block 2 Draw_letter(A); Code block 4 void Draw_letter(Char x) { Code block 3 } // minne? miten palataan? // jossain ROM muistissa (DRAW_LETTER) Code block 3 Assemblynä @takaisin // paluuosoite A=M // RAM muistista 0;JMP Aliohjelmakutsu Code block 1 Assemblynä // paluuosoite aliohjelmasta, // joka tallennetaan takaisin // muuttujaan @PALUUOSOITE D=A @takaisin M=D @DRAW_LETTER 0;JMP (PALUUOSOITE) // tänne Code block 2 Assemblynä @PALUUOSOITE2 D=A @takaisin M=D @DRAW_LETTER 0;JMP (PALUUOSOITE2) // vai tänne Code block 4 Assemblynä

Tietokoneen rakenne - väylä

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

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