1 / 34

Egyszerűsített lexikális elemző

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:. data segment para public ’data’

zinnia
Download Presentation

Egyszerűsített lexikális elemző

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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: 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 5. előadás

  3. ; 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 OK ; számjegy: nincs teendő dw lev_s ; speciális jel: szám vége dw vege ; szöveg vége: program vége level dw ? ; az aktuális ugrótábla címe 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 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 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 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 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 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 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 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í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 ; kihasználjuk, hogy ax=al 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 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 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,’,’ jmp lv2 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 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 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. 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. 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. 5. előadás

  18. Néhány példa (4.2. ábra átrendezve) A könyvben nem logikus, hibás. 5. előadás

  19. Néhány példa (4.2. ábra folytatás) 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: ). N1, ha az eredmény < 0, különben 0, Z1, 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. 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. 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. 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. 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. 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. 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). 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. 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) 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, akkorn! = 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 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. 5. előadás

  30. Java IJVM program4.11., 15. ábra Bin. kód program 1 ILOAD j // i = j + k 15 02 2 ILOAD k 15 03 i = j + k; 3 IADD 60 if(i = = 3) 4 ISTORE i 36 01 k = 0; 5 ILOAD i 15 01 else 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: 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). 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 5. előadás

  33. 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 // 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 ORvalue) Ilyenkor value általában 0 vagy 0x100. 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. 5. előadás

More Related