Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Egyszerűsített lexikális elemző

Hasonló előadás


Az előadások a következő témára: "Egyszerűsített lexikális elemző"— Előadás másolata:

1 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 karakterek kód Hibás karakter Betű A … Z a … z 2 Számjegy 0 … 9 4 Speciális jel , . ; + - ( ) cr lf 6 Vége jel $ 8 A44-47, fóliák: 28a-31 Máté: Architektúrák 5. előadás

2 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 44-47 Máté: Architektúrák 5. előadás

3 t_a dw hiba ; hibás kar.:  spec. jel szint dw OK ; betű: nincs teendő
; 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 lev_s ; speciális jel: szám vége level dw ? ; az aktuális ugrótábla címe 44-47 Máté: Architektúrák 5. előadás

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

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

6 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 44-47 Máté: Architektúrák 5. előadás

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

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

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

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

11 ; 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 lv1: mov level,di ; szint beállítás xor ah,ah ; hogy ax=al legyen 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 44-47 Máté: Architektúrák 5. előadás

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

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

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

15 Mikroarchitektúra szint
Feladata az ISA (Instruction Set Architecture) megvalósítása. Nincs rá általánosan elfogadott, egységes elv. 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ó). Máté: Architektúrák 5. előadás

16 Az IJVM utasítások szerkezete:
IJVM (Integer Java Virtual Machine): a JVM egész értékű aritmetikát tartalmazó része. 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. 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: betöltés-végrehajtás (fetch-execute) ciklus. Máté: Architektúrák 5. előadás

17 Az ALU-nak (3.19-20. ábra) 6 vezérlő bemenete van:
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), F0, F1. F0, F1 kiválasztja az AND, OR, B#, + művelet valamelyikét, INC: +1. Máté: Architektúrák 5. előadás

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

19 F0 F1 ENA ENB INVA INC Tevékenység 1 – 1 A + B A + B + 1 A + 1 B + 1
– 1 A + B A + B + 1 A + 1 B + 1 – A B – A B – 1 Máté: Architektúrák 5. előadás

20 Adatút (Data Path, 4.1. ábra)
32 bites regiszterek, sínek, ALU, léptető (SLL8 8 bittel balra, SRA1 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

21 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ó. Szó címek transzformálása: 4.4. ábra. 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. Máté: Architektúrák 5. előadás

22 Ö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: a B sínre írás a regiszterekből, 8 jel: 6 az ALU és 2 a léptető vezérlésére, 9 jel: regiszterekbe írás a C sínről, 3 jel: a memória eléréshez (nem ábrázoltuk!) 2 jel: szó íráshoz/olvasáshoz 1 jel: bájt olvasáshoz. 232 Máté: Architektúrák 5. előadás

23 9 bit: a következő utasítás címének megadásához,
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. 512x36 bites vezérlőtár, a mikroprogramnak, MPC (MicroProgram Counter): mikroprogram-utasításszámláló. MIR (MicroInstruction Register): mikroutasítás-regiszter. Máté: Architektúrák 5. előadás

24 (MIR feltöltődik a vezérlőtár MPC által mutatott szavával.)
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 a C sínről. 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. Memória ciklus kezdete. 236 Máté: Architektúrák 5. előadás

25 Memória ciklus A memória ciklus az adatút végén kezdődik (MAR ill. PC feltöltése után), ezért ha a memória címet módosította ez a mikroutasítás, akkor a memória cím a módosított MAR ill. PC regiszter értéke lesz. Olvasásnál az eredmény csak két ciklussal később használható, mert MDR ill. MBR csak a következő adatút ciklus vége felé töltődik fel a memóriából, addig MDR ill. MBR régi értéke érhető el. 236 Máté: Architektúrák 5. előadás

26 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.: esetén a következő utasítás Z –től függően a 0x92 vagy 0x192 címen található (feltételes ugrás – elágazás – a mikroprogramban). Cím Addr JAM Adatútvezérlő bitek 0x75 0x92 001 . . . JAMZ =1 Máté: Architektúrák 5. előadás

27 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

28 regiszter  B sín, Addr  MPC ALU, léptető megtudja,
Mic-1 működése (MPC)  MIR regiszter  B sín, Addr  MPC ALU, léptető megtudja, mit kell csináljon, eredmény  C, N, Z C  regiszterekbe JAMN, JAMZ (N, Z) mem.  MDR és/vagy alapján módosul MPC mem.  MBR JMPC (MBR) Memória ciklus indítása (rd, wr, fetch). Máté: Architektúrák 5. előadás

29 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): a1 = a2 + a3 Máté: Architektúrák 5. előadás

30 Az IJVM memóriamodellje
A 4 GB memória, 1 G szóként is szervezhető. Funkcionális részei: á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: ábra. Máté: Architektúrák 5. előadás

31 Java (C) IJVM program 4.11., 15. ábra Bin. kód
program ILOAD j // i = j + k 2 ILOAD k i = j + k; IADD if(i = = 3) ISTORE i k = 0; ILOAD i // if(i = = 3) else BIPUSH j = j – 1; IF_ICMPEQ L F 00 0D 8 ILOAD j // j = j – 9 BIPUSH 10 ISUB 11 ISTORE j 12 GOTO L A7 00 0F 13 L1: BIPUSH 0 // k = 14 ISTORE k 15 L2: , ábra Máté: Architektúrák 5. előadás

32 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: ReadRegister = SP, ALU = INC, Write SP, Read, NextAddress = 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 Main1). Máté: Architektúrák 5. előadás

33 MAL (Micro Assembly Language, 4.5-6. ábra)
SOURCE: a B sínre kötött regiszterek bármelyike (MDR, PC, MBR, 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: ábra Máté: Architektúrák 5. előadás

34 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 ; if (Z) goto L1; else goto L2 // Z=1, ha TOS=0, különben Z=0. 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 0x100. Máté: Architektúrák 5. előadás

35 IJVM megvalósítása Mic-1-en (4.11., 17. ábra)
Előkészület a gép indításakor: PC a végrehajtandó utasítás címét, MBR magát az utasítást tartalmazza. A legelső végrehajtandó mikroutasítás a Main1, ez: PC=PC+1; fetch; goto(MBR); PC most a végrehajtandó utasítás utáni bájtra mutat, ez lehet egy újabb utasítás kódja, vagy operandus. PC új értékének kialakulása után indul a fetch-csel kezdeményezett memória ciklus, ez a következő mikroutasítás végére MBR-be olvassa a program következő bájtját. goto (MBR) elugrik az utasítás feldolgozásához. Máté: Architektúrák 5. előadás

36 Minden utasítás feldolgozását végző függvény első mikroutasítása az utasítás kódnak megfelelő címen van a mikroprogram tárban. Ez az oka, hogy nem helyezhetjük egymás után az egyes utasítások feldolgozását végző mikroutasítás sorozatot, ezért inkább azt a megoldást választottuk, hogy minden mikroutasítás tartalmazza a következő címét. Ha az első utasítás pl. NOP (No OPeration, nem csinál semmit), ennek a kódja 0x00, ezért a 0x00 címen kezdődik a NOP feldolgozását végző függvény. Ez egyetlen goto Main1 mikroutasítás. Máté: Architektúrák 5. előadás

37 IJVM megvalósítása Mic-1-en (4.11., 17. ábra)
A főciklus a Main1-nél kezdődik; PC a végrehajtandó utasítás címét, MBR magát az utasítást tartalmazza. Main1 a következő utasítást vagy adatbájtot olvassa. Címke Műveletek // kommentár Main1 PC = PC + 1; fetch; goto(MBR) nop1 goto Main1 iadd1 MAR = SP = SP – 1; rd iadd2 H = TOS iadd3 MDR = TOS = MDR + H; wr; goto Main1 Máté: Architektúrák 5. előadás

38 Mi a lexikális elemző feladata?
Feladatok Mi a lexikális elemző feladata? Milyen adatokat tartalmaz az ugró tábla? Hogy működik az XLAT utasítás? Az átkódoló tábla kialakításakor más módszert alkalmaztunk a nagy betűk kódjának beírásához, mint a speciális jelek kódjának beírásához. Miért? Milyen karakter eredményez hibát szám beolvasása közben? Hogyan kezeli a program a különböző szintaktikus helyzeteket? Máté: Architektúrák 5. előadás

39 Milyen részei vannak az egy bites ALU-nak?
Feladatok Milyen részei vannak az egy bites ALU-nak? Milyen vezérlő bemenetei vannak az ALU-nak? Milyen vezérlő bemenetek esetén lesz 1 az eredmény? Milyen eredményt szolgáltat az F0=0, F1=1, ENA=0, ENB=0, INVA=1, INC=1 vezérlő bemenet? Mi az adatút? Milyen jelek szükségesek az adatút vezérléséhez? Milyen részei vannak a Mic-1 mikroutasításainak? Milyen részei vannak az adatút ciklusnak? Hogy alakul ki MPC új tartalma? Máté: Architektúrák 5. előadás

40 Ismertesse az IJVM memóriamodelljét!
Feladatok Ismertesse az IJVM memóriamodelljét! Milyen utasításai vannak a Mic-1 gépnek? Milyen ugró utasításai vannak a Mic-1 gépnek? Milyen értékeket vehet föl a SOURCE operandus? Milyen értékeket vehet föl a DEST operandus? Mit jelent a wr? Mely utasítások tudnak olvasni a memóriából, és hogy működnek? Hogy lehet védekezni az ellen, hogy MDR egyszerre kapjon értéket a memóriából és a C sínről? Máté: Architektúrák 5. előadás


Letölteni ppt "Egyszerűsített lexikális elemző"

Hasonló előadás


Google Hirdetések