egyszerűsített lexikális elemző

34
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

Upload: zinnia

Post on 08-Jan-2016

25 views

Category:

Documents


2 download

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

TRANSCRIPT

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

Hibás karakter 0

Betű A … Z a … z 2

Számjegy 0 … 9 4

Speciális jel , . ; + - ( ) cr lf 6

Vé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á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

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ó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.fea 21 a12 12a $’ ; elemzendő szöveg

DATA 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 farpush dsxor ax,axpush ax ; 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í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

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

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

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

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

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

xor ah,ah ; ki fogjuk használni, hogy ax=al

pr1: lods specjel ; speciális jelek olvasása

mov di,ax; ah=0 miatt ax = a spec. jel

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

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

mov [BX+DI],al ; elhelyezés a táblában

ret ; 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 ; kihasználjuk, hogy ax=al

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 lv1

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

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

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

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

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.

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

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

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

0 1 1 1 0 0 A OR B

0 1 1 0 0 0 A

0 1 0 1 0 0 B

0 1 1 0 1 0 #A

1 0 0 1 0 0 #B

1 1 0 0 0 0 0

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

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

Néhány példa (4.2. ábra folytatás)

F0 F1 ENA ENB INVA INC Tevékenység

1 1 0 0 0 1 1

1 1 0 0 1 0 – 1

1 1 1 1 0 0 A + B

1 1 1 1 0 1 A + B + 1

1 1 1 0 0 1 A + 1

1 1 0 1 0 1 B + 1

1 1 1 0 1 1 – A

1 1 1 1 1 1 B – A

1 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ó.

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

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

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

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

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.

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

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

Mic-1 működéseAdatú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.

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

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

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 26: Egyszerűsített lexikális elemző

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

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 27: Egyszerűsített lexikális elemző

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

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 (N, Z)

• mem. MDR és/vagy

mem MBR

• JMPC (MBR)

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

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

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 29: Egyszerűsített lexikális elemző

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

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.

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

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

Java IJVM program 4.11., 15. ábra Bin. kódprogram 1 ILOAD j // i = j + k 15 02 2 ILOAD k 15 03i = j + k; 3 IADD 60if(i = = 3) 4 ISTORE i 36 01 k = 0; 5 ILOAD i 15 01else 6 BIPUSH 3 // if(i = = 3) 10 03 j = j – 1; 7 IF_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 31: Egyszerűsített lexikális elemző

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

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 32: Egyszerűsített lexikális elemző

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

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 33: Egyszerűsített lexikális elemző

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

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 // Z=1, ha TOS=0, különben Z=0. if (Z) goto L1; else goto L2

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 34: Egyszerűsített lexikális elemző

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

IJVM megvalósítása Mic-1-en (4.11., 17. ábra) A főciklus a Main1-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! 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