TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembler
Loogiset piirit Assembler Tietokonealusta Konekieli Assembly kieli Virtual machine Korkeantason kieli Assembler on ohjelma, joka kääntää Assembly kielisen ohjelman konekielelle Konekieli on joukko binäärisiä ”sanoja” jotka vastaavat prosessorin käskyjä Assembly kieli antaa binäärisille bittijoukoille paremmin muistettavat vastineet, esim. – – M=M-1 Jokaiselle prosessorityypille on oma konekieli ja siten myös assembly kieli
Toimintalogiikka Toista, kunnes.asm tiedoston EOF – Lue seuraava Assembly kielinen komento – Paloittele komento osiin – Hae osia vastaava binäärikoodi – Yhdistä koodit yhdeksi 16-bittiseksi konekieliseksi käskyksi – Anna ulostulona konekielinen koodi (kirjoita.hack tiedostoon uusi rivi)
Ilman symboleita Jos tyhjä rivi tai kommentti ei tehdä mitään Jos -merkillä, niin A-käsky Esim. String pitää muuttaa “ ” Jos ei, niin tutkitaan löytyykö riviltä = -merkkiä ja ; -merkkiä, jotta saadaan selville mitkä (dest=comp;jump) osat käskyssä on Selvitetään dest osaa vastaava binääriluku Selvitetään comp osaa vastaava binääriluku Selvitetään jump osaa vastaava binääriluku Kasataan 16-bittinen konekielinen C-käsky yhdistämällä osat Voidaan olettaa että kommentit alkavat aina rivin alusta ja rivien lopussa ei ole kommentteja
Symboleiden kanssa Käydään koodi läpi etsimällä symbolit, tai (LOOP) – Lisäksi riveiltä poistetaan kaikki kommentit ja kommenttien jälkeiset merkit, jos niitä on, esim. – D=M // D = first number Kahdenlaisia symboleita – Muuttujia, joille pitää varata muistiosoite – Osoitteita joihin pitää hypätä, eli jossain on (LOOP), jonka rivinumero tulee selvittää Käydään ensin läpi löytyykö symbolia vastaava hyppypaikka eli symboli suluissa (esim. (LOOP)) – Löytyykö sulkuja? Jos löytyy, lisää suluissa oleva symboli taulukkoon ja tallenna sulku-rivin alapuolisen rivin numero vastaamaan symbolia Sen jälkeen käydään koodi uudestaan läpi, etsien symboleita, Jos symboli taulukossa, niin se on hyppy-symboli Jos symbolia ei taulukossa, kyseessä on muuttuja, jolle pitää varata paikka RAM muistista (aloitetaan muistipaikasta 16) Symboolitaulukon toteutus esim. Javan hashtable:lla Kun taulu valmis korvataan symbolit niitä vastaavilla osoitteilla Lisäksi taulussa pitää olla muutama etukäteen määritelty symboli, jotka pitää muuttaa RAM osoitteiksi, esim. SCREEN
Assemblerin toteutus Millä tahansa ohjelmointikielellä Suositeltava arkkitehtuuri – Parser moduuli: purkaa käskyt osiin – Code moduuli: kääntää osat binääriseksi – SymbolTable moduuli: hallinnoi symbolitaulua – Main moduuli: tiedoston luku/kirjoitus, käyttää yo. moduuleja ulostulon rakentamiseen Testaa Assembleriasi testiohjelmilla (add.asm etc.) – Versiot ilman symboleita tai symboleiden kanssa Lopuksi voit verrata Assembler simulaattorilla simulaattorin kääntämää koodia sinun Assemblerin kääntämään koodiin
dest=comp;jump Binäärinen: a c1 c2 c3 c4 c5 c6 d1 d2 d3 j1 j2 j3 compdest jump C-instruction Not // D=A // // D=M// // ;JMP // 111accccccdddjjj
(a=0)c1 c2 c3 c4 c5 c6(a=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 Comp(ute)
j1 j2 j3 (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 Hyppykäskyt Mnemonic ≈ muistisääntö (assembly kielinen toteutus)
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 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