egyszerűsített lexikális elemző
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 PresentationTRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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.
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.
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
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
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ó.
• 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 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.
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.
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.
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
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.
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)
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
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.
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:
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).
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
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.
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