40
Máté: Architektú rák 5. előadás 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 0 Betű A … Z a … z 2 Számjegy 0 … 9 4 Speciális jel , . ; + - ( ) cr lf 6

Egyszerűsített lexikális elemző

  • Upload
    kimn

  • View
    44

  • Download
    0

Embed Size (px)

DESCRIPTION

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:. datasegment para public ’data’ - PowerPoint PPT Presentation

Citation preview

Page 1: Egyszerűsített lexikális elemző

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

Page 2: Egyszerűsített lexikális elemző

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

Page 3: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 3

; azonosító szintt_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égedw vege ; szöveg vége: program vége

; szám szintt_n dw hiba ; hibás kar.: spec. jel szint

dw hiba ; betű: hiba: spec. jel szintdw OK ; számjegy: nincs teendődw lev_s ; speciális jel: szám végedw vege ; szöveg vége: program vége

level dw ? ; az aktuális ugrótábla címe

Page 4: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 4

c_h db 0 ; hibás karakter kódjac_b db 2 ; betű kódjac_n db 4 ; számjegy kódjac_s db 6 ; speciális jel kódjac_v db 8 ; végjel kódjaspecjel db ’ ,. ;+-()’, 13, 10 ; a speciális jelekvegjel db ’$’ ; vége jel, kihasználjuk,

; hogy itt van!table db 256 dup (?) ; átkódoló tábla (256 byte)text db ’a,tz.fea 21 a12 12a $’ ; elemzendő

szövegDATA ends

Page 5: Egyszerűsített lexikális elemző

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 farpushdsxor ax,axpushax ; visszatérési cím a verembenmov ax,datamov ds,axmov es,ax; assume miattcall prepare ; átkódoló tábla elkészítésemov si, offset text ; az elemzendő szöveg ; kezdőcímecall parsing ; elemzésret ; vissza az Op. rendszerhez

Lex endp

Page 6: Egyszerűsített lexikális elemző

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ívmov bx, offset tablemov di,bxmov al,c_h ; hibás karakter kódjamov cx,256 ; a tábla hossza

rep stos table; table minden karakter hibás

Page 7: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 7

mov al,c_b ; betű kódjamov di,’A’ ; A ASCII kódjaadd di,bx ; A helyének offset címemov cx,’Z’-’A’+1 ; a nagybetűk száma

; a betűk ASCII kódja folyamatos!rep stosb

mov di,’a’ ; a ASCII kódjaadd di,bx ; a helyének offset címemov cx,’z’-’a’+1 ; a kisbetűk száma

rep stosb

Page 8: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 8

mov al,c_n ; számjegy kódjamov di,’0’ ; 0 ASCII kódjaadd di,bx ; 0 helyének offset címemov cx,’9’-’0’+1 ; a számjegyek száma

; a számjegyek ASCII kódja folyamatos!rep stosb

Page 9: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 9

mov si,offset specjel; speciális jelek ; feldolgozásaxor ah,ah ; hogy ax=al legyen

pr1: lods specjel ; speciális jel ASCII kódjamov di,ax; ah=0 miatt ax = a jel kódjacmp al,vegjel ; vegjel közvetlenül a ; speciális jelek után!je pr2 ; ez már a vegjelmov al,c_s ; speciális karakter kódjamov [BX+DI],al ; elhelyezés a táblábanloop pr1 ; ciklus vége

Page 10: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 10

pr2: mov al,c_v ; a végjel kódjamov [BX+DI],al ; elhelyezés a

táblábanret ; vissza a hívó eljáráshoz

prepare endp

Page 11: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 11

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

cld ; a string műveletek iránya pozitívmov bx, offset tablemov di,offset t_s ; spec. jel szint

lv1: mov level,di ; szint beállításxor ah,ah ; hogy ax=al legyen

OK: lods text ; a következő karakterXLAT ; AL 0, 2, 4, 6 vagy 8MOV DI,LEVEL ; DI az akt. ugró

; tábla címeADD DI,AX ; DI a megfelelő elem

; címeJMP [DI] ; kapcsoló utasítás

Page 12: Egyszerűsített lexikális elemző

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 lv1lev_a: mov di,offset t_a ; azonosító kezdődik

mov al,’A’jmp lv2

Page 13: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 13

lev_n: mov di,offset t_n ; szám kezdődikmov al,’0’jmp lv2

lev_s: mov di,offset t_s ; speciális jelmov al,’,’jmp lv2

vege: mov al,’.’ ; szöveg végemov ah,14 ; BIOS hívás előkészítéseint 10h ; BIOS hívás:

; karakter írás a képernyőreret ; elemzés vége, vissza a hívóhoz

parsing endpcode ends

Page 14: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 14

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

stack endsend Lex ; modul vége, start cím: Lex

Page 15: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 15

Mikroarchitektúra szintFeladata 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ó).

Page 16: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 16

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.

Page 17: Egyszerűsített lexikális elemző

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.

Page 18: Egyszerűsített lexikális elemző

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

0 0 1 1 0 0 A AND B0 1 1 1 0 0 A OR B0 1 1 0 0 0 A0 1 0 1 0 0 B0 1 1 0 1 0 #A1 0 0 1 0 0 #B

Page 19: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 19

F0 F1 ENA ENB INVA INC Tevékenység1 1 0 0 0 0 01 1 0 0 0 1 11 1 0 0 1 0 – 11 1 1 1 0 0 A + B1 1 1 1 0 1 A + B + 11 1 1 0 0 1 A + 11 1 0 1 0 1 B + 11 1 1 0 1 1 – A1 1 1 1 1 1 B – A1 1 0 1 1 0 B – 1

Page 20: Egyszerűsített lexikális elemző

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.

Page 21: Egyszerűsített lexikális elemző

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.

Page 22: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 22

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.

Page 23: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 23

Mikroutasítások24 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.

Page 24: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 24

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.

Page 25: Egyszerűsített lexikális elemző

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.

Page 26: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 26

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

Page 27: Egyszerűsített lexikális elemző

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.

Page 28: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 28

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 MPCmem. MBR

• JMPC (MBR)• Memória ciklus indítása (rd, wr, fetch).

Page 29: Egyszerűsített lexikális elemző

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

Page 30: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 30

Az IJVM memóriamodelljeA 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.

Page 31: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 31

Java (C) IJVM program 4.11., 15. ábra Bin. kód

program 1 ILOAD j // i = j + k 15 02 2 ILOAD k 15 03i = j + k; 3IADD 60if(i = = 3) 4ISTORE i 36 01 k = 0; 5 ILOAD i // if(i = = 3) 15 01else 6 BIPUSH 3 10 03 j = j – 1; 7IF_ICMPEQ L1 9F 00 0D 8 ILOAD j // j = j – 1 15 02

9 BIPUSH 1 10 01 10 ISUB 64 11 ISTORE j 36 02 12 GOTO L2 A7 00 0F 13 L1: BIPUSH 0 // k = 0 10 00 14 ISTORE k 36 03 15 L2:

Page 32: Egyszerűsített lexikális elemző

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

Page 33: Egyszerűsített lexikális elemző

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: 4.16. ábra

Page 34: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 34

Nem megengedett pl. az alábbi utasítás pár: MAR = SP; rdMDR = 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.

Page 35: Egyszerűsített lexikális elemző

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.

Page 36: Egyszerűsített lexikális elemző

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.

Page 37: Egyszerűsített lexikális elemző

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árMain1 PC = PC + 1; fetch; goto(MBR)nop1 goto Main1 iadd1 MAR = SP = SP – 1; rdiadd2 H = TOSiadd3 MDR = TOS = MDR + H; wr; goto Main1

Page 38: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 38

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

Page 39: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 39

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

Page 40: Egyszerűsített lexikális elemző

Máté: Architektúrák 5. előadás 40

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