View
44
Download
0
Category
Preview:
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
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
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
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ó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
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
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
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
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
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
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
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
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
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 endsend Lex ; modul vége, start cím: Lex
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ó).
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.
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
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
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
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
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.
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.
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.
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.
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
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
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).
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ó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.
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:
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: 4.16. ábra
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.
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á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
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?
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?
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?
Recommended