Egyszerstett lexiklis elemz Feladata hogy azonost szm specilis

  • Slides: 34
Download presentation
Egyszerűsített lexikális elemző Feladata, hogy azonosító, szám, speciális jelek és a program vége jel

Egyszerűsített lexikális elemző Feladata, hogy azonosító, szám, speciális jelek és a program vége jel előfordulásakor rendre A, 0, , és. karaktert írjon a képernyőre. Az esetleges hibákat ? jelezze. XLAT utasítás alkalmazásának tervezése: Karakter típusok Hibás karakter Betű Számjegy Speciális jel Vége jel Máté: Architektúrák karakterek A…Z 0… 9 , . $ 5. előadás a…z ; + - ( ) cr lf kód 0 2 4 6 8 1

data segment para public ’data’ ; ugró táblák a szintaktikus helyzetnek megfelelően: ; kezdetben,

data segment para public ’data’ ; ugró táblák a szintaktikus helyzetnek megfelelően: ; kezdetben, speciális és hibás karakter után t_s dw hiba ; hibás kar. : spec. jel szint dw lev_a ; betű: dw lev_n ; számjegy: dw lev_s ; spec. jel: dw vege ; szöveg vége: program vége Máté: Architektúrák 5. előadás 2

; azonosító szint t_a dw hiba ; hibás kar. : spec. jel szint dw

; azonosító szint t_a dw hiba ; hibás kar. : spec. jel szint dw OK ; betű: nincs teendő dw OK ; számjegy: nincs teendő dw lev_s ; speciális jel: azonosító vége dw vege ; szöveg vége: program vége ; szám szint t_n dw hiba ; hibás kar. : spec. jel szint dw hiba ; betű: hiba: spec. jel szint dw OK ; számjegy: nincs teendő dw lev_s ; speciális jel: szám vége dw vege ; szöveg vége: program vége level dw ? ; az aktuális ugrótábla címe Máté: Architektúrák 5. előadás 3

c_h c_b c_n c_s c_v specjel vegjel db db table text db db DATA

c_h c_b c_n c_s c_v specjel vegjel db db table text db db DATA ends Máté: Architektúrák 0 2 4 6 8 ’ , . ’$’ ; hibás karakter kódja ; betű kódja ; számjegy kódja ; speciális jel kódja ; végjel kódja ; +-()’, 13, 10 ; a speciális jelek ; vége jel, kihasználjuk, ; hogy itt van! 256 dup (? ) ; átkódoló tábla (256 byte) ’a, tz. fe�a 21 a 12 12 a $’ ; elemzendő szöveg 5. előadás 4

code Lex segment assume proc push xor push mov mov call ret endp Máté:

code Lex segment assume proc push xor push mov mov call ret endp Máté: Architektúrák para public ’CODE’ cs: code, ds: data, es: data, ss: stack far ds ax, ax ax ; visszatérési cím a veremben ax, data ds, ax es, ax ; assume miatt prepare ; átkódoló tábla elkészítése si, offset text ; az elemzendő szöveg ; kezdőcíme parsing ; elemzés ; vissza az Op. rendszerhez 5. előadás 5

prepare proc ; az átkódoló tábla elkészítése ; az eljárás rontja AX, BX, CX,

prepare proc ; az átkódoló tábla elkészítése ; az eljárás rontja AX, BX, CX, DI, SI tartalmát cld ; a string műveletek iránya pozitív mov bx, offset table mov di, bx mov al, c_h ; hibás karakter kódja mov cx, 256 ; a tábla hossza rep stos table; table minden karakter hibás Máté: Architektúrák 5. előadás 6

mov add mov rep stosb mov add mov stosb Máté: Architektúrák al, c_b ;

mov add mov rep stosb mov add mov stosb Máté: Architektúrák al, c_b ; betű kódja di, ’A’ ; A ASCII kódja di, bx; A helyének offset címe cx, ’Z’-’A’+1 ; a nagybetűk száma ; a betűk ASCII kódja folyamatos! di, ’a’ ; a ASCII kódja di, bx; a helyének offset címe cx, ’z’-’a’+1 ; a kisbetűk száma 5. előadás 7

mov add mov rep al, c_n ; számjegy kódja di, ’ 0’ ; 0

mov add mov rep al, c_n ; számjegy kódja di, ’ 0’ ; 0 ASCII kódja di, bx; 0 helyének offset címe cx, ’ 9’-’ 0’+1 ; a számjegyek száma ; a számjegyek ASCII kódja folyamatos! stosb Máté: Architektúrák 5. előadás 8

mov pr 1: xor lods mov cmp je mov loop Máté: Architektúrák si, offset

mov pr 1: xor lods mov cmp je mov loop Máté: Architektúrák si, offset specjel; speciális jelek ; feldolgozása ah, ah ; ki fogjuk használni, hogy ax=al specjel ; speciális jelek olvasása di, ax; ah=0 miatt ax = a spec. jel al, vegjel ; vegjel közvetlenül a ; speciális jelek után! pr 2 ; ez már a vegjel al, c_s ; speciális karakter kódja [BX+DI], al ; elhelyezés a táblában pr 1 ; ciklus vége 5. előadás 9

pr 2: mov ret prepare endp Máté: Architektúrák al, c_v ; a végjel kódja

pr 2: mov ret prepare endp Máté: Architektúrák al, c_v ; a végjel kódja [BX+DI], al ; elhelyezés a táblában ; vissza a hívó eljáráshoz 5. előadás 10

parsing proc ; elemzés ; az eljárás rontja AX, BX, CX, DI, SI tartalmát

parsing proc ; elemzés ; az eljárás rontja AX, BX, CX, DI, SI tartalmát cld ; a string műveletek iránya pozitív mov bx, offset table mov di, offset t_s ; spec. jel szint lv 1: mov level, di ; szint beállítás xor ah, ah ; kihasználjuk, hogy ax=al OK: lods text ; a következő karakter XLAT ; AL 0, 2, 4, 6 vagy 8 MOV DI, LEVEL ; DI az akt. ugró ; tábla címe ADD DI, AX ; DI a megfelelő elem ; címe JMP [DI] ; kapcsoló utasítás Máté: Architektúrák 5. előadás 11

hiba: mov lv 2: mov int lev_a: jmp mov jmp Máté: Architektúrák di, offset

hiba: mov lv 2: mov int lev_a: jmp mov jmp Máté: Architektúrák di, offset t_s ; hibás karakter, ; spec. jel szint al, ’? ’ ah, 14 ; BIOS hívás előkészítése 10 h ; BIOS hívás: ; karakter írás a képernyőre lv 1 di, offset t_a ; azonosító kezdődik al, ’A’ lv 2 5. előadás 12

lev_n: lev_s: vege: parsing code mov mov jmp mov int ret endp ends Máté:

lev_n: lev_s: vege: parsing code mov mov jmp mov int ret endp ends Máté: Architektúrák di, offset t_n ; szám kezdődik al, ’ 0’ lv 2 di, offset t_s ; speciális jel al, ’, ’ lv 2 al, ’. ’ ; szöveg vége ah, 14 ; BIOS hívás előkészítése 10 h ; BIOS hívás: ; karakter írás a képernyőre ; elemzés vége, vissza a hívóhoz 5. előadás 13

stack segment para stack ’stack’ dw 100 dup (? ) ; 100 word legyen

stack segment para stack ’stack’ dw 100 dup (? ) ; 100 word legyen a verem ends end Lex ; modul vége, start cím: Lex Máté: Architektúrák 5. előadás 14

Mikroarchitektúra szint Feladata az ISA (Instruction Set Architecture) megvalósítása. Nincs rá általánosan elfogadott, egységes

Mikroarchitektúra szint Feladata az ISA (Instruction Set Architecture) megvalósítása. Nincs rá általánosan elfogadott, egységes elv. IJVM (Integer Java Virtual Machine): a JVM egész értékű aritmetikát tartalmazó része. Nem használjuk a C-ben írt SUN JVM interpretert, mert nem elég hatékony az elemi logikai áramkörök kezelésére. Mikroprogram: betölti, értelmezi és végrehajtja az IJVM utasításokat. Máté: Architektúrák 5. előadás 15

Az ISA-szintű utasítások „függvények”, ezeket egy főprogram hívja meg végtelen ciklusban. A függvények a

Az ISA-szintű utasítások „függvények”, ezeket egy főprogram hívja meg végtelen ciklusban. A függvények a mikroarchitektúra szintjén valósulnak meg (mikroprogram). A mikroprogram változói (a regiszterek) definiálják a számítógép állapotát, pl. : PC (Program Counter, utasításszámláló). Az IJVM utasítások szerkezete: • az első mező az opcode (Operation Code, műveleti kód), • az esetleges második mezőben az operandus meghatározására szolgáló adat van. Betöltés-végrehajtás (fetch-execute) ciklus. Máté: Architektúrák 5. előadás 16

ALU (3. 19 -20. ábra) 6 vezérlőjel: Ø ENA az A bemenet engedélyése (1)/

ALU (3. 19 -20. ábra) 6 vezérlőjel: Ø ENA az A bemenet engedélyése (1)/ tiltása (0), Ø ENB a B bemenet engedélyése (1)/ tiltása (0), Ø INVA: A#. (Ha ENA = 0, akkor #0 = FFFF = – 1) Ø F 0, F 1 kiválasztja az AND, OR, B#, + művelet valamelyikét, Ø INC: +1. Máté: Architektúrák 5. előadás 17

Néhány példa (4. 2. ábra átrendezve) F 0 F 1 ENA ENB INVA INC

Néhány példa (4. 2. ábra átrendezve) F 0 F 1 ENA ENB INVA INC Tevékenység 0 0 1 1 0 0 A AND B 0 1 1 1 0 0 A OR B 0 1 1 0 0 0 A 0 1 0 0 B 0 1 1 0 #A 1 0 0 #B 1 1 0 0 0 A könyvben nem logikus, hibás. Máté: Architektúrák 5. előadás 18

Néhány példa (4. 2. ábra folytatás) F 0 1 1 1 1 1 F

Néhány példa (4. 2. ábra folytatás) F 0 1 1 1 1 1 F 1 1 1 1 1 ENA 0 0 1 1 1 0 Máté: Architektúrák ENB 0 0 1 1 INVA 0 1 0 0 1 1 1 5. előadás INC 1 0 0 1 1 1 0 Tevékenység 1 – 1 A+B+1 A+1 B+1 –A B– 1 19

Adatút (Data Path, 4. 1. ábra) 32 bites regiszterek, sínek, ALU, léptető (SLL 8

Adatút (Data Path, 4. 1. ábra) 32 bites regiszterek, sínek, ALU, léptető (SLL 8 8 bittel balra, SRA 1 1 bittel jobbra léptet). ALU bemenetei közül az egyik a H (Holding – tartó), a másik a B sín (9 lehetőség – vezérlőjelek: ). N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. Megfelelő időzítéssel egy cikluson belül lehetséges egy regiszterből olvasni és az eredményt akár ugyanoda visszaírni (vezérlőjelek: ) 4. 3. ábra. Máté: Architektúrák 5. előadás 20

Memóriaműveletek (4. 1. ábra) • Szócímzés (32 bites): adatszó írás, olvasás. MAR (Memory Address

Memóriaműveletek (4. 1. ábra) • Szócímzés (32 bites): adatszó írás, olvasás. MAR (Memory Address Register): szócím, MDR (Memory Data Register): szó. • Bájtcímzés: ISA szintű utasítás bájt olvasás. PC (Program Counter): bájtcím, MBR (Memory Byte Register): bájt. MBR kétfajta értelmezése (két vezérlőjel): • MBR: MBR előjelesen kerül a B sínre, • MBRU: MBR előjel nélkül kerül a B sínre. Byte-szó címek transzformálása: 4. 4. ábra. Máté: Architektúrák 5. előadás 21

Az adatút vezérlése Összesen 29 jel szükséges (4. 1. , 5 -6. ábra): •

Az adatút vezérlése Összesen 29 jel szükséges (4. 1. , 5 -6. ábra): • 9 jel: regiszterekbe írás a C sínről, • 9 jel: a B sínre írás a regiszterekből, • 8 jel: 6 az ALU és 2 a léptető vezérlésére, • 3 jel: a memória eléréshez (nem ábrázoltuk!) 2 jel: szó íráshoz/olvasáshoz 1 jel: bájt olvasáshoz. A memória ciklus az adatút végén kezdődik (MAR ill. PC feltöltése után), ezért olvasásnál az eredmény csak két ciklussal később használható, addig MDR ill. MBR régi értéke érhető el. Máté: Architektúrák 5. előadás 22

Mikroutasítások 24 bit: az adatút vezérléséhez (a B sínre csak egy regiszter írhat egyszerre,

Mikroutasítások 24 bit: az adatút vezérléséhez (a B sínre csak egy regiszter írhat egyszerre, ezért 9 helyett elég 4 bit), 9 bit: a következő utasítás címének megadásához, 3 bit: a következő utasítás kiválasztásának módjára. Ez adja a 36 bites mikroutasítást: 4. 5. ábra. Mic-1: 4. 6. ábra. • 512 x 36 bites vezérlőtár, a mikroprogramnak, • MPC (Micro. Program Counter): mikroprogramutasításszámláló. • MIR (Micro. Instruction Register): mikroutasításregiszter. Máté: Architektúrák 5. előadás 23

Mic-1 működése Adatút ciklus (4. 6. ábra): • (MIR feltöltődik a vezérlőtár MPC által

Mic-1 működése Adatút ciklus (4. 6. ábra): • (MIR feltöltődik a vezérlőtár MPC által mutatott szavával. ) • Kialakul a B sín kívánt tartalma, ALU és a léptető megtudja, mit kell csinálnia, • Az ALU és a léptető elvégzi a feladatát, a C sín, N (Negative) és Z (Zero) megkapja az új értékét, • A regiszterek feltöltődnek. MBR/MDR megkapja az értékét, ha az előző ciklus adatot kért a memóriából. • Kialakul MPC új értéke. Máté: Architektúrák 5. előadás 24

MPC új tartalma • A 9 bites következő cím (Addr) az MPC-be kerül. •

MPC új tartalma • A 9 bites következő cím (Addr) az MPC-be kerül. • JAMN/JAMZ esetén MPC legmagasabb bitjének és az N/Z bitnek logikai vagy kapcsolata képződik MPC legmagasabb helyértékén (elágazás). Pl. : Cím Addr 0 x 75 0 x 92 JAM Adatútvezérlő bitek 001 … JAMZ =1 esetén a következő utasítás Z –től függően a 0 x 92 vagy 0 x 192 címen található (feltételes ugrás – elágazás – a mikroprogramban). Máté: Architektúrák 5. előadás 25

MPC új tartalma (folytatás) • JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MBR

MPC új tartalma (folytatás) • JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MBR 8 bitjének bitenkénti vagy kapcsolata képződik MPC-ben az adatút ciklus vége felé (MBR megérkezése után). Ilyenkor Addr 8 alacsonyabb helyértékű bitje általában 0 (feltétlen ugrás az MBR –ben tárolt címre – kapcsoló utasítás). Kezdődhet az újabb mikroutasítás végrehajtása. Máté: Architektúrák 5. előadás 26

Mic-1 működése • (MPC) MIR • regiszter B sín, Addr MPC ALU megtudja, mit

Mic-1 működése • (MPC) MIR • regiszter B sín, Addr MPC ALU megtudja, mit kell csináljon, • eredmény C, N, Z • C regiszterekbe JAMN, JAMZ • mem. MDR és/vagy mem MBR • JMPC Máté: Architektúrák 5. előadás (N, Z) (MBR) 27

Eljárás: paraméterek, munka terület. Rekurzív (önmagát hívó) eljárás, pl. : 0! = 1, ha

Eljárás: paraméterek, munka terület. Rekurzív (önmagát hívó) eljárás, pl. : 0! = 1, ha n>0, akkor n! = n*(n-1)! A hívó és hívott eljárás paraméterei, változói nem lehetnek azonos területen: lokális változók. Verem (stack): LV (Local Variable), SP (Stack Pointer) verem mutató (4. 8. ábra). A verem operandusok és az eredmény tárolására is használható, pl. (4. 9. ábra): a 1 = a 2 + a 3 Máté: Architektúrák 5. előadás 28

Az IJVM memóriamodellje A 4 GB memória, 1 G szóként is szervezhető. Funkcionális részei:

Az IJVM memóriamodellje A 4 GB memória, 1 G szóként is szervezhető. Funkcionális részei: 4. 10. ábra. • CPP (Constant Pool Pointer): terület a konstansok, mutatók tárolása; tartalma a program betöltésekor alakul ki, ISA utasítások nem írhatják felül. • LV (Local Variable frame): lokális változók területe • Operandusverem: a lokális változók területe fölött, • Metódus terület: itt van a program. PC bájtot címez a metódus területen belül. IJVM utasításkészlet: 4. 11. ábra. Máté: Architektúrák 5. előadás 29

Java program IJVM program 4. 11. , 15. ábra 1 ILOAD j // i

Java program IJVM program 4. 11. , 15. ábra 1 ILOAD j // i = j + k 2 ILOAD k i = j + k; 3 IADD if(i = = 3) 4 ISTORE i k = 0; 5 ILOAD i else 6 BIPUSH 3 // if(i = = 3) j = j – 1; 7 IF_ICMPEQ L 1 8 ILOAD j // j = j – 1 9 BIPUSH 1 10 ISUB 11 ISTORE j 12 GOTO L 2 13 L 1: BIPUSH 0 // k = 0 14 ISTORE k 15 L 2: Máté: Architektúrák 5. előadás Bin. kód 15 02 15 03 60 36 01 15 01 10 03 9 F 00 0 D 15 02 10 01 64 36 02 A 7 00 0 F 10 00 36 03 30

Mic-1 megvalósítása (4. 5, 6. ábra) 36 bites bináris utasításokat kellene megadnunk. Pl. :

Mic-1 megvalósítása (4. 5, 6. ábra) 36 bites bináris utasításokat kellene megadnunk. Pl. : Egy ciklusban növeljük SP-t 1 -gyel és olvasást kezdeményezünk a memóriából, folytatás a 122 -es utasításnál. Szimbolikusan ilyesmi: Read. Register = SP, ALU = INC, Write SP, Read, Next. Address = 122; Nehézkes, helyette: SP = SP + 1; rd A folytatás címet csak akkor tüntetjük fel, ha az nem a következőként írt mikroutasítás (pl. goto Main 1). Máté: Architektúrák 5. előadás 31

MAL (Micro Assembly Language, 4. 5 -6. ábra) SOURCE: a B sínre kötött regiszterek

MAL (Micro Assembly Language, 4. 5 -6. ábra) SOURCE: a B sínre kötött regiszterek bármelyike (MDR, PC, MBRU, SP, LV, CPP, TOS, OPC). MBRU az előjel nélküli (Unsigned) MBR. DEST: a C sínre kapcsolt regiszterek bármelyike (MAR, MDR, PC, SP, LV, CPP, TOS, OPC, H). Több regiszter is kaphatja ugyanazt az értéket. wr: memóriába írás MDR-ből a MAR címre. rd: memóriából olvasás MDR-be a MAR címről. fetch: 8 bites utasításkód betöltése MBR-be a PC címről. Megengedett műveletek: 4. 16. ábra Máté: Architektúrák 5. előadás 32

Nem megengedett pl. az alábbi utasítás pár: MAR = SP; rd MDR = H

Nem megengedett pl. az alábbi utasítás pár: MAR = SP; rd MDR = H // A memóriából is most kapna értéket! Feltételes elágazás, pl. : Z = TOS // Z=1, ha TOS=0, különben Z=0. if (Z) goto L 1; else goto L 2 A címek különbsége 256 kell legyen (4. 7. ábra)! TOS (Top Of Stack) A JMPC bit jelentése: goto (MBR OR value) Ilyenkor value általában 0 vagy 0 x 100. Máté: Architektúrák 5. előadás 33

IJVM megvalósítása Mic-1 -en (4. 11. , 17. ábra) A főciklus a Main 1

IJVM megvalósítása Mic-1 -en (4. 11. , 17. ábra) A főciklus a Main 1 -nél kezdődik; PC a következő utasítás címét, MBR az utasítást tartalmazza. Előkészület a gép indításakor! Main 1 a következő utasítást vagy adatbájtot olvassa. Címke Main 1 nop 1 iadd 2 iadd 3 Műveletek // kommentár PC = PC + 1; fetch; goto(MBR) goto Main 1 MAR = SP – 1; rd H = TOS MDR = TOS = MDR + H; wr; goto Main 1 Máté: Architektúrák 5. előadás 34