Máté: Architektúrák5. előadás1 String kezelő utasítások Az s forrás területet (DS:SI), a d cél területet pedig (ES:DI) címzi. A mnemonik végződése (B / W) vagy az operandus jelzi, hogy bájtos vagy szavas a művelet. A címzésben résztvevő indexregiszterek értéke 1-gyel módosul bájtos, 2-vel szavas művelet esetén. Ha a D (Direction) flag értéke 0, akkor az indexregiszterek értéke növekszik, 1, akkor csökken. CLD; D 0 STD; D 1
Máté: Architektúrák5. előadás2 Az alábbi utasítások – mint általában az adat mozgató utasítások – érintetlenül hagyják a flag-eket Átvitel az (ES:DI) által mutatott címre a (DS:SI) által mutatott címről: MOVSB; MOVe String Byte MOVSW; MOVe String Word MOVSd,s; MOVe String (byte vagy word) d és s csak azt mondja meg, hogy bájtos vagy szavas az átvitel!
Máté: Architektúrák5. előadás3 Betöltés AL-be illetve AX-be a (DS:SI) által mutatott címről (csak SI módosul): LODSB; LOaD String Byte LODSW; LOaD String Word LODSs; LOaD String (byte vagy word) Tárolás az (ES:DI) által mutatott címre AL-ből illetve AX-ből (csak DI módosul): STOSB; STOre String Byte STOSW; STOre String Word STOSd; STOre String (byte vagy word)
Máté: Architektúrák5. előadás4 Az alábbi utasítások beállítják a flag-eket Az (ES:DI) és a (DS:SI) által mutatott címen lévő byte illetve szó összehasonlítása, a flag-ek s – d (!!!) értékének megfelelően állnak be. CMPSB; CoMPare String Byte CMPSW; CoMPare String Word CMPSd,s; CoMPare String (byte vagy word) Az (ES:DI) által mutatott címen lévő byte (word) összehasonlítása AL-lel (AX-szel), a flag-ek AL – d illetve AX – d (!!!) értékének megfelelően állnak be. SCASB; SCAn String Byte SCASW; SCAn String Word SCASd; SCAn String (byte vagy word)
Máté: Architektúrák5. előadás5 Ismétlő prefixumok REP REPZ REPE és REPNZ REPNE A Z, E, NZ és NE végződésnek hasonló szerepe van, mint a LOOP utasítás esetén. Ismétlő prefixum használata esetén a string kezelő utasítás CX-szer kerül(het) végrehajtásra: ha CX = 0, akkor egyszer sem (!!!), különben minden végrehajtást követően 1-gyel csökken a CX regiszter tartalma. Amennyiben CX csökkentett értéke 0, akkor nem történik további ismétlés. A flag beállító string kezelő utasítás ismétlésének további feltétele, hogy a flag állapota megegyezzen a prefixum végződésében előírttal.
Máté: Architektúrák5. előadás6 Ismétlő prefixumok REP REPZ REPE és REPNZ REPNE A program jobb olvashatósága érdekében flag-et nem állító utasítások előtt mindig REP-et használjunk, flag-et beállító utasítás előtt pedig sohase REP-et, hanem helyette a vele egyenértékű REPE-t vagy REPZ-t!
Máté: Architektúrák5. előadás7 ; A 100 elemű array nevű tömbnek van-e ;3-tól különböző eleme? movcx, 100 movdi, -1; előbb lehessen inc, mint cmp moval, 3 NEXT: incdi cmparray[di], al ; array di-edik eleme = 3? LOOPENEXT; ugrás NEXT-re, ; ha CX 0 és a di-edik elem=3 JNENEM3; CX = 0 vagy array[di] 3...; array 3... NEM3:...; di az első 3-tól különböző...; elem indexe
Máté: Architektúrák5. előadás8 Ugyanennek a feladatnak a megoldása string kezelő utasítás segítségével: ; A 100 elemű array nevű tömbnek van-e ; 3-tól különböző eleme? movcx,100 movdi,offset array MOVAL,3 REPESCASarray; array 0., 1.,... eleme = 3? JNENEM3...; array 3,... NEM3:DECDI; DI az első 3 elemre mutat...
Máté: Architektúrák5. előadás9 A 100 elemű array nevű tömbnek van-e 3-tól különböző eleme? movcx, 100 movdi, -1 moval, 3 NEXT: incdi cmparray[di], al LOOPENEXT JNENEM3... NEM3: Nem minden eltérés lényeges! movcx,100 movdi,offset array MOVAL,3 REPESCASarray JNENEM3... NEM3:DECDI... Használja ES-t Sokkal gyorsabb
Máté: Architektúrák5. előadás10 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ípusokkarakterekkód BetűA … Z a … z2 Számjegy0 … 94 Speciális jel,. tabulátor ; + - ( ) cr lf6 Vége jel$8 Hibás karaktera többi0
Máté: Architektúrák5. előadás11 datasegment para public ’data’ ; ugró táblák a szintaktikus helyzetnek megfelelően: ; kezdetben, speciális és hibás karakter után ;következő karakter t_sdwhiba ; hibás kar.: ? spec. jel szint dwlev_a; betű: A azonosító szint dwlev_n ; számjegy: 0 szám szint dwlev_s; spec. jel:, spec. jel szint dwvege; $:. program vége
Máté: Architektúrák5. előadás12 ; azonosító szint t_adwhiba ; hibás kar.: ? spec. jel szint dwok; betű: nincs teendő dwok ; számjegy: nincs teendő dwlev_s; speciális jel:, spec. jel szint dwvege; $:. program vége ; szám szint t_ndwhiba ; hibás kar.: ? spec. jel szint dwhiba; betű: hiba: ? spec. jel szint dwok ; számjegy: nincs teendő dwlev_s; speciális jel:, spec. jel szint dwvege; $:. program vége
Máté: Architektúrák5. előadás13 leveldw?; az aktuális ugrótábla címe c_hdb0; hibás karakter kódja c_bdb2; betű kódja c_ndb4; számjegy kódja c_sdb6; speciális jel kódja c_vdb8; végjel kódja specjeldb’,.;+-()’, 13, 10; a speciális jelek vegjeldb’$’; vége jel, kihasználjuk, ; hogy itt van! tabledb256 dup (?); átkódoló tábla (256 byte) textdb’a,tz.fe&a 21 a12 12a $’ ; elemzendő szöveg dataends
Máté: Architektúrák5. előadás14 codesegment para public ’code’ assume cs:code, ds:data, es:data, ss:stack lexprocfar pushds xorax,ax pushax ; visszatérési cím a veremben movax,data movds,ax moves,ax; assume miatt callprepare; átkódoló tábla elkészítése movsi, offset text; az elemzendő szöveg ; kezdőcíme callparsing; elemzés ret; vissza az Op. rendszerhez lexendp
Máté: Architektúrák5. előadás15 prepareproc; 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 movbx, offset table movdi,bx moval,c_h; hibás karakter kódja movcx,256; a tábla hossza repstostable; table minden karakter hibás
Máté: Architektúrák5. előadás16 moval,c_b; betű kódja movdi,’A’; A ASCII kódja adddi,bx; A helyének offset címe movcx,’Z’-’A’+1; a nagybetűk száma ; a betűk ASCII kódja folyamatos! repstosb movdi,’a’; a ASCII kódja adddi,bx; a helyének offset címe movcx,’z’-’a’+1; a kisbetűk száma repstosb
Máté: Architektúrák5. előadás17 moval,c_n; számjegy kódja movdi,’0’; 0 ASCII kódja adddi,bx; 0 helyének offset címe movcx,’9’-’0’+1; a számjegyek száma ; a számjegyek ASCII kódja folyamatos! repstosb
Máté: Architektúrák5. előadás18 movsi,offset specjel; speciális jelek ; feldolgozása xorah,ah ; hogy ax=al legyen pr1:lodsspecjel; speciális jel ASCII kódja movdi,ax; ah=0 miatt ax = a jel kódja cmpal,vegjel; vegjel közvetlenül a ; speciális jelek után van! jepr2; ez már a vegjel moval,c_s; speciális karakter kódja mov[bx+di],al; elhelyezés a táblában jmppr1; ciklus vége
Máté: Architektúrák5. előadás19 pr2:moval,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 prepareendp
Máté: Architektúrák5. előadás20 parsingproc; elemzés ; az eljárás rontja ax, bx, cx, di, si tartalmát cld; a string műveletek iránya pozitív movbx, offset table movdi,offset t_s ; spec. jel szint lv1:movlevel,di; szint beállítás xorah,ah; hogy ax=al legyen ok:lodstext; a következő karakter xlat; al 0, 2, 4, 6 vagy 8 addax,level; ax az aktuális ; ugró táblán belüli cím jmp[ax]; kapcsoló utasítás
Máté: Architektúrák5. előadás21 hiba:movdi,offset t_s; hibás karakter, ; spec. jel szint következik moval,’?’ lv2: movah,14; BIOS hívás előkészítése int10h; BIOS hívás: ; karakter írás a képernyőre jmplv1 lev_a:movdi,offset t_a; azonosító kezdődik moval,’A’ jmplv2
Máté: Architektúrák5. előadás22 lev_n:movdi,offset t_n; szám kezdődik moval,’0’ jmplv2 lev_s:movdi,offset t_s; speciális jel moval,’,’ jmplv2 vege:moval,’.’; szöveg vége movah,14; BIOS hívás előkészítése int10h; BIOS hívás: ; karakter írás a képernyőre ret; elemzés vége, vissza a hívóhoz parsingendp codeends
Máté: Architektúrák5. előadás23 stacksegmentparastack ’stack’ dw100 dup (?); 100 word legyen a verem stack ends endlex; modul vége, start cím: lex
Máté: Architektúrák5. előadás24 Mikroarchitektúra szint Feladata az ISA (Instruction Set Architecture – gépi utasítás szint) megvalósítása. Nincs rá általánosan elfogadott, egységes elv. A 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ák5. előadás25 Léptető vezérlés 6 2 ALU vezérlés A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja Mic-1 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: H (Holding – tartó), B sín. Egy cikluson belül lehetséges egy regiszterből olvasni és az eredményt akár ugyanoda visszaírni 4.3. ábra. ALU MAR MDR PC MBR SP LV CPP TOS OPC H Léptető memória
Máté: Architektúrák5. előadás26 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás27 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás28 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás29 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás30 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás31 ALU vezérlés 6 Léptető vezérlés 2 A B N 1, ha az eredmény < 0, különben 0, Z 1, ha az eredmény = 0, különben 0. C sín B sín Memória vezérlő regiszterek Vezérlő jelek B sínre írja a regisztert C sínt a regiszterbe írja SP B sín ALU: B+1 C SP MAR MDR PC MBR SP LV CPP TOS OPC H ALU Léptető memória
Máté: Architektúrák5. előadás32 Memóriaműveletek (4.1. ábra) Szócímzés: 32 bites adat írása, olvasása. szó cím = 4 * (bájt cím), a túlcsorduló bitek elvesznek MAR (Memory Address Register) MDR (Memory Data Register) Bájtcímzés: gépi szintű utasítás bájt olvasás. PC (Program Counter): bájt cím, MBR (Memory Byte Register): bájt. MBR kétfajta értelmezése (két vezérlőjel): MBR: MBR előjel kiterjesztéssel kerül a B sínre, MBRU: MBR előjel nélküli kiterjesztéssel kerül a B sínre. MAR MDR PC MBR memória
Máté: Architektúrák5. előadás33 Léptető vezérlés 6 2 ALU vezérlés A B N Z C sín B sín 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: a C sínről regiszterekbe írás, 3 jel: a memória eléréshez (nem ábrázoltuk!) 2 jel: szó íráshoz/olvasáshoz 1 jel: bájt olvasáshoz. Összesen 29 jel szükséges A B sínre csak egy regiszter írhat egyszerre, ezért 9 helyett elég 4 jel, összesen 24 vezérlő jelre van szükség. Az adatút vezérlése (4.1. ábra) ALU MAR MDR PC MBR SP LV CPP TOS OPC H Léptető memória
Máté: Architektúrák5. előadás34 NEXT ADDRESS JMPC JAMN JAMZ SLL8 SRA1 F0F1 ENA ENB INVA INC H OPC TOS LV SP PC MDRMAR WRITE READ FETCH B sín Mikroutasítások 24 bit: az adatút vezérléséhez 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. 0 = MDR1 = PC2 = MBR3 = MBRU4 = SP 5 = LV6 = CPP7 = TOS8 = OPC9-15 semmi AddrJAMALUCMemB
Máté: Architektúrák5. előadás35 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. Az adatút ciklus (4.6. ábra) elején MIR feltöltődik a vezérlőtár MPC által mutatott szavával. AddrJALUCMB 9 512x36 bites vezérlőtár (ROM) a mikroprogram tárolására MIR MPC 4-ről 16-ra dekódoló
Máté: Architektúrák5. előadás36 A B 6 2 ALU vezérlés N Z ALU MAR MDR PC MBR SP LV CPP TOS OPC H Léptető 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ák5. előadás37 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 MAR MDR PC MBR memória cím a módosított MAR ill. PC regiszter értéke lesz. Az olvasás eredménye csak két ciklussal később használható az ALU-ban, 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ák5. előadás38 Mic-1: 4.6. ábra. MPC új tartalmának kialakítása. AddrJALUCMB x36 bites vezérlőtár (ROM) a mikroprogram tárolására MIR MPC N Z MBR 8 JAMN/JAMZ JMPC 1 bites flip-flopok (N&JAMN) + (Z&JAMZ) +
Máté: Architektúrák5. előadás39 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ével (elágazás). Pl.: esetén a mikroprogram a 0x092 címen folytatódik, ha Z = 0, 0x192 címen folytatódik, ha Z = 1. Feltételes ugrás – elágazás – a mikroprogramban. CímAddrJAMAdatút vezérlő bitek 0x750x JAMZ =1
Máté: Architektúrák5. előadás40 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ák5. előadás41 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 regiszterekbeJAMN, JAMZ(N, Z) mem. MDR és/vagyalapján módosul MPC mem. MBR Memória ciklus indításaJMPC(MBR) (rd, wr, fetch)alapján módosul MPC.
Máté: Architektúrák5. előadás42 Az ALU-nak ( ábra) 6 vezérlő bemenete van: ENA az A bemenet engedélyezése (1) tiltása (0), ENB a B bemenet engedélyezése (1) tiltása (0), F0, F1. F0, F1 kiválasztja az AND, OR, B#, + művelet valamelyikét, INC: +1. teljes összeadó dekódoló F0F0 F1F1 INVA A ENA B ENB INVA: Ha ENA = 1, akkor A#, Ha ENA = 0, akkor 0# = FFFF = – 1. átvitel be átvitel ki
Máté: Architektúrák5. előadás43 F0F0 F1F1 ENAENBINVAINCEredmény A B #A #B A + B A + B A B B – A B – – A A AND B A OR B – 1 Néhány példa (4.2. ábra)
Máté: Architektúrák5. előadás44 Az ALU-val végezhető műveletek: ábra A 4.2. ábra alapján: DEST = HDEST = SOURCE – H DEST = SOURCEDEST = SOURCE – 1 DEST = #HDEST = –H DEST = #SOURCEDEST = H AND SOURCE DEST = H + SOURCEDEST = H OR SOURCE DEST = H + SOURCE + 1DEST = 0 DEST = H + 1DEST = 1 DEST = SOURCE + 1DEST = –1 Az eredmény balra léptethető 8 bittel ( >1).
Máté: Architektúrák5. előadás45 Mic-1 programozá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ák5. előadás46 MAL (Micro Assembly Language ) SOURCE: a B sínre kötött regiszterek bármelyike: MDR, PC, MBRU (előjel nélküli - Unsigned MBR) MBR, SP, LV, CPP, TOS, OPC. 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. ALU MAR MDR PC MBR SP LV CPP TOS OPC H Léptető
Máté: Architektúrák5. előadás47 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!
Máté: Architektúrák5. előadás48 Feltétlen ugrás: goto Main1 Az Addr mezőbe Main1 címét kell írni. Feltétlen ugrás MBR szerint (kapcsoló utasítás): Ilyenkor JMPC = 1 goto (MBR OR value) value általában 0 vagy 0x100.
Máté: Architektúrák5. előadás49 Feltételes elágazás, pl.: TOS (Top Of Stack) alapján Z = TOS ; if (Z) goto L1; else goto L2 // Z=1, ha TOS=0, különben Z=0. esetén a mikroprogram az L20x092 címen folytatódik, ha Z = 0, L10x192 címen folytatódik, ha Z = 1. Az L1 és L2 címek különbsége 256 (0x100) kell legyen (4.7. ábra)! CímAddrJAMAdatút vezérlő bitek 0x750x JAMZ =1
Máté: Architektúrák5. előadás50 Eljárás: paraméterek, munka terület. 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). SP → d5 d4 d3 d2 LV → d1 a3 a2 a1 SP → a3 a2 LV → a1 SP → b4 b3 b2 LV → b1 a3 a2 a1 SP → c2 LV → c1 b4 b3 b2 b1 a3 a2 a1
Máté: Architektúrák5. előadás51 A verem operandusok és az eredmény ideiglenes tárolására is használható (operandus verem), pl. (4.9. ábra): a1 = a2 + a3 SP → a2 a3 a2 LV → a1 SP → a3 a2 a3 a2 LV → a1 SP → a2+a3 a3 a2 LV → a1 SP → a3 a2 LV → a2+a3
Máté: Architektúrák5. előadás52 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. 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ák5. előadás53 Az IJVM memóriamodellje (4.10. ábra) A 4 GB memória, 1 G szóként is szervezhető. CPP → Konstans terület SP → Aktuális operandusok 3. LV → Aktuális lokális változók 3. lokális változók 2. lokális változók 1. PC → Metódus terület Konstansok, mutatók Tartalma a program betöltésekor alakul ki, ISA utasítások nem írhatják felül Program PC bájtot címez a metódus területen belül Verem lokális változók és operandus verem
Máté: Architektúrák5. előadás54 IJVM néhány utasítása: ábra. hexMnemonicjelentés 10BIPUSH byte Beteszi a byte–ot a verembe A7GOTO offset Feltétel nélküli ugrás offset -re 60IADD Kivesz a veremből két szót, az összegüket a verembe teszi 99IFEQ offset Kivesz a veremből egy szót, ha 0, akkor offset -re ugrik 9FIF_ICMPEQ offset Kivesz a veremből két szót, ha egyenlők, akkor offset - re ugrik 15ILOAD varnum Beteszi varnum -ot a verembe 36ISTORE varnum Kivesz a veremből egy szót, és eltárolja varnum -ba 64ISUB Kivesz a veremből két szót, a különbségüket a verembe teszi 00NOP Nem csinál semmit 5FSWAP A verem két felső szavát megcseréli
Máté: Architektúrák5. előadás55 Java (C) IJVM program ábra Bin. kód program 1ILOADj// i = j + k ILOADk i = j + k; 3IADD 60 if(i = = 3) 4ISTOREi k = 0; 5ILOADi// if(i = = 3) else 6BIPUSH j = j – 1; 7IF_ICMPEQ L1 9F 00 0D 8ILOADj// j = j – BIPUSH ISUB 64 11ISTOREj GOTOL2 A7 00 0F 13 L1:BIPUSH0// k = ISTOREk L2:
Máté: Architektúrák5. előadás56 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 főciklus legelső mikroutasítása 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 program következő bájtját olvassa MBR-be (a következő mikroutasítás végén lesz MBR-ben a bájt). goto (MBR) elugrik az utasítás feldolgozásához.
Máté: Architektúrák5. előadás57 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ák5. előadás58 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ímkeMűveletek // kommentár Main1PC = PC + 1; fetch; goto(MBR) nop1goto Main1 iadd1MAR = SP = SP – 1; rd iadd2H = TOS iadd3MDR = TOS = MDR + H; wr; goto Main1
Máté: Architektúrák5. előadás59 Feladatok Milyen string kezelő utasításokat ismer? Melyik flag módosítja a string kezelő utasítások működését? Melyik szegmens regiszterek befolyásolják a string kezelő utasítások működését? Mi a szerepe a string kezelő utasításokban az operandusoknak? Mely string kezelő utasítások módosítják/nem módosítják a flag-eket? Mit csinál a MOVSW utasítás? Mit csinál a STOS utasítás?
Máté: Architektúrák5. előadás60 Feladatok Azonos-e a MOVSW hatása két egymás utáni MOVSB hatásával? Indokolja a válaszát! Hogy állítja be a flag-eket a CMP d,AL utasítás? Hogy állítja be a flag-eket a CMPSB utasítás? Hogy állítja be a flag-eket a SCAS d utasítás? Milyen ismétlő prefixumokat ismer? Mi az egyes ismétlő prefixumok hatása? Mely prefixumok használata ajánlott flag-eket beállító illetve flag-eket nem módosító string kezelő utasítások előtt?
Máté: Architektúrák4. előadás61 Feladatok Az alábbi feladatok megoldásában használjon ismétlési prefixumot! Állapítsa meg egy 0-ra végződő bájtokból/szavakból álló string hosszát! Keresse meg egy n bájtból álló string-ben az A betű első/utolsó előfordulását (ha van)! Keresse meg egy 0-ra végződő string-ben az A betű első/utolsó előfordulását (ha van)! Helyes-e a SCASW utasítás használata az AB betű kombináció keresésében 2n bájt hosszú stringben? Indokolja a válaszát!
Máté: Architektúrák4. előadás62 Feladatok Írjon eljárást, amely megállapítja, hogy egy 0-ra végződő string-ben előfordul-e az ABC jelsorozat! Írjon eljárást, amely megállapítja, hogy egy string-ben előfordul-e egy másik string! Töltse fel az n hosszúságú bájt vektort az ABC mintával! Írjon eljárást egy n bájt hosszúságú forrás terület cél területre másolására (a két terület átfedhet)! 2n bájt hosszúságú forrás terület cél területre másolása mindig megoldható MOVSW utasításokkal? (A két terület átfedhet!)
Máté: Architektúrák5. előadás63 Feladatok Mi az egyszerűsített lexikális elemző feladata? Miért szerepel az assume utasításban es: data? Mire sztolgál a CLD utasítás? Milyen ugrótáblákat tartalmaz a program? Milyen adatokat tartalmaz egy ugró tábla? Hogy értük el, hogy ugró táblát alkalmazhatunk a programban? Hogy működik az XLAT utasítás? Miért alkalmaztunk más módszert az átkódoló tábla kialakításakor a nagy betűk kódjának beírásához, mint a speciális jelek kódjának beírásához?
Máté: Architektúrák5. előadás64 Feladatok Milyen eljárásokkal valósítottuk meg az egyszerűsített lexikális elemzőt? Melyiknek mi a feladata? Milyen karakter eredményez hibát szám beolvasása közben? Milyen szintaktikus helyzetbe kerül a program hiba észlelése után? Hogyan kezeli a program a különböző szintaktikus helyzeteket? Magyarázza el a JMP [ax] utasítás működését! Mit kellene módosítani a programban, hogy a vége jel csak speciális jel után következhessen?
Máté: Architektúrák5. előadás65 Feladatok Mi a mikroarchitektúra szint feladata? Hogy valósítja meg a feladatát? Mi az adatút? Milyen sínjei vannak a Mic-1 -nek? Mely regiszterek csatlakoznak az A sínhez? Mely regiszterek csatlakoznak a B sínhez? Mely regiszterek csatlakoznak a C sínhez? Milyen jelek szükségesek az adatút vezérléséhez? Mire szolgál az SP regiszter két vezérlő bemenete? Mire szolgál az MBR regiszter két vezérlő bemenete?
Máté: Architektúrák5. előadás66 Feladatok Hogy történik a memóriából olvasás? Hogy történik a memóriába írás? Mire szolgál a MAR/MDR regiszter? Ha egy mikroutasítás módosítja MAR tartalmát, és olvas a memóriából, akkor mely címről fog olvasni? Memóriából olvasás után mikor használható MDR új értéke az adatúton illetve MPC meghatározásához? Mire szolgál a PC és az MBR regiszter? Mire szolgál az N és a Z regiszter? Mire szolgál a H regiszter?
Máté: Architektúrák5. előadás67 Feladatok Milyen memória műveletei vannak a Mic-1 -nek? Milyen jelek szükségesek a Mic-1 adatútjának vezérléséhez? Hány jel szolgál az A sín vezérlésére? Hány jel szolgál a B sín vezérlésére? Hány jel szolgál az ALU és a léptető vezérlésére? Hány jel szolgál a C sín vezérlésére? Hány jel szolgál a memória elérésére? Milyen részei vannak a Mic-1 mikroutasításainak? Milyen részei vannak az adatút ciklusnak?
Máté: Architektúrák5. előadás68 Feladatok Milyen részei vannak a Mic-1 mikroutasításainak? Milyen típusú memória a mikroprogram tároló? Mire szolgál az MPC regiszter? Mire szolgál az MIR regiszter? Miért van szükség az Addr mezőre? Milyen részei vannak az adatút ciklusnak? Hány bit kell a B/C sín vezérléséhez? Mire szolgál a JMPN/JMPZ bit? Mire szolgál a JMPC bit? Hogy alakul ki MPC új tartalma?
Máté: Architektúrák5. előadás69 Feladatok Miért nem megengedett az MAR = SP; rd MDR = H utasítás pár? Hogy valósítható meg feltétlen ugrás a mikroprogramban? Hogy valósítható meg feltételes ugrás a mikroprogramban? Hogy valósítható meg kapcsoló utasítás a mikroprogramban?
Máté: Architektúrák5. előadás70 Feladatok Milyen 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 F 0 =0, F 1 =1, ENA=0, ENB=0, INVA=1, INC=1 vezérlő bemenet? A Mic-1 mely regisztere lehet az ALU bal/jobb operandusa? Hova tárolhatja a Mic-1 az eredményt? Érvényes utasítás-e Mic-1-en a H=OPC-H? Miért? Érvényes utasítás-e Mic-1-en a H=H-OPC? Miért?
Máté: Architektúrák5. előadás71 Feladatok 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? Mi az operandus verem?
Máté: Architektúrák5. előadás72 Feladatok Minek a rövidítése az IJVM? Ismertesse az IJVM memóriamodelljét! Milyen utasításai vannak az IJVM-nek? Mi a BIPUSH/DUP/IADD/SWAP utasítás feladata? Mi a GOTO utasítás feladata? Mi a IFEQ/IF_ICMPEQ utasítás feladata? Hogy működik a Mic-1 főciklusa? Mit tartalmaz PC és MBR a főciklus indulásakor? Hogy valósítható meg Mic-1-en a NOP utasítás? Hogy valósítható meg Mic-1-en az IADD utasítás?