Máté: Architektúrák7. előadás1 A verem két felső szavának cseréje (4.17. ábra) Megállapodás szerint TOS tartalmazza a verem tetején lévő szót! Ez többnyire előny. swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B SP → A B
Máté: Architektúrák7. előadás2 A verem két felső szavának cseréje (4.17. ábra) swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B swap3H = MDR; wr // 2. szó H-ba, verem tetejéreH = B MDR (MAR) swap4MDR = TOS // verem régi tetejeMDR = A swap4-ben előny, hogy TOS tartalmazza a verem tetején lévő szót. SP → B B
Máté: Architektúrák7. előadás3 A verem két felső szavának cseréje (4.17. ábra) swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B swap3H = MDR; wr // 2. szó H-ba, verem tetejéreH = B MDR (MAR) swap4MDR = TOS // verem régi tetejeMDR = A swap5MAR = SP – 1; wr // a 2. szóbaMAR → B MDR (MAR) swap6TOS = H; goto Main1 // TOS frissítése swap6-ban hátrány, mert ez az utasítás csak azért kell, hogy TOS tartalmazza a verem tetején lévő szót. SP → B A
Máté: Architektúrák7. előadás4 A verem két felső szavának cseréje (4.17. ábra)
Máté: Architektúrák6. előadás5 A WIDE utasítás A WIDE utasítás valójában prefixum: önmagában nem csinál semmit, csak jelzi, hogy a következő utasításnak 16 bites indexe van. Pl.: ILOAD varnumlokális változó a verembe varnum a lokális változó 8 bites indexe. WIDE ILOAD varnumlokális változó a verembe varnum a lokális változó 16 bites indexe. w_iload1 címe = iload1 címe + 0x100
Máté: Architektúrák6. előadás6 Main1PC = PC + 1; fetch; goto(MBR)MBR = ILOAD iload1H = LV MBR varnum iload2MAR = H + MBRU; rd // rd(LV+varnum) iload3MAR = SP = SP + 1 MDR (MAR) iload4PC = PC + 1; fetch; wr (MAR) MDR iload5TOS = MDR; goto Main1 MBR opkód ILOAD varnumlokális változó a verembe varnum a lokális változó 8 bites indexe.
Máté: Architektúrák6. előadás7 Main1PC = PC + 1; fetch; goto(MBR)MBR = WIDE iload1H = LV iload2MAR = H + MBRU; rd // rd(LV+varnum) iload3MAR = SP = SP + 1 MDR (MAR) iload4PC = PC + 1; fetch; wr (MAR) MDR iload5TOS = MDR; goto Main1 MBR opkód wide1PC = PC + 1; fetch; goto(MBR OR 0x100) MBR ILOAD w_iload1PC = PC + 1; fetch // index 2. bájtja MBR 1. bájt w_iload2H = MBRU << 8 // 1. bájt léptetése MBR 2. bájt w_iload3H = H OR MBRU // H = a 16 bites index w_iload4MAR = LV + H; rd; goto iload3rd(LV+varnum) WIDE ILOAD varnumlokális változó a verembe varnum a lokális változó 16 bites indexe.
Máté: Architektúrák6. előadás8
Máté: Architektúrák6. előadás9 Az GOTO offset utasítás. PC relatív: PC értékéhez hozzá kell adni a két bájtos, előjeles offset értékét. Mic-1 program: Main1PC = PC + 1; fetch; goto(MBR) goto1OPC=PC–1 // Main1-nél : PC=PC+1 MBR 1. bájt goto2PC=PC+1; fetch // offset 2. bájtja goto3H=MBR<<8 // 1. (előjeles) bájt <<8 MBR 2. bájt goto4H=MBRU OR H // 16 bites offset goto5PC=OPC+H; fetch; goto (Main1)// PC új értéke Main1PC = PC + 1; fetch; goto(MBR) MBR opkód goto5 kezdeményezi a PC új értékénél lévő bájt olvasását, Main1-ben goto(MBR) már a folytatás első opkódjának megfelelő címre ugrik!
Máté: Architektúrák6. előadás10 A IFLT offset utasítás (Mic-1) Kivesz egy szót a veremből és ugrik, ha negatív. iflt1MAR=SP=SP–1; rd // 2. szó a veremből iflt2OPC=TOS // TOS mentése iflt3TOS=MDR // TOS= a verem új teteje iflt4N=OPC; if(N) goto T; else goto F //elágazás TOPC=PC–1; goto goto2 // igaz ág FPC=PC+1 // hamis ág, át kell lépni offset-et F2PC=PC+1; fetch; goto (Main1) // PC új értéke a folytatás 1. utasításának betöltése Fontos: T címe = F címe + 0x100
Máté: Architektúrák6. előadás11 INVOKEVIRTUAL disp (4.12. ábra), A CPP által mutatott területen a disp (2 bájt) indexű szó mutat a meghívandó metódus kezdő szavára. Ennek a szónak - az első két bájtja tartalmazza a metódus paramétereinek számát, - a második két bájtja a metódus lokális változóinak számát. A metódus végrehajtása a metódus 5. bájtján indul.
Máté: Architektúrák6. előadás12 INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató 3. paraméter 2. paraméter 1. paraméter OBJREF Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP A verem új alapja Betett paraméterek A verem alapja hívás előtt A hívó lokális területe verem a hívás előtt verem a hívás után
Máté: Architektúrák6. előadás13 INVOKEVIRTUAL disp A CPP által mutatott táblázat disp indexű eleme a meghívandó metódusra mutat. disp első bájtjának MBR-be olvasását már Main1 kezdeményezte. invo1PC = PC + 1; fetch // disp 2. bájtját olvassa invo2H = MBRU << 8 // disp 1. bájtját lépteti invo3H = H OR MBRU // H = disp invo4MAR = CPP + H; rd // kezdő cím olvasása invo5OPC = PC + 1 // OldPC = visszatérési cím A könyvben MBRU OR H szerepel, az OR művelet kommutativitása miatt megengedhető.
Máté: Architektúrák6. előadás14 INVOKEVIRTUAL: a metódus elején lévő 2 bájt tartalmazza a paraméterek számát. invo6PC = MDR; fetch // PC: új metódus eleje invo7PC = PC + 1; fetch // paraméterek száma invo8H = MBRU << 8 invo9H = H OR MBRU // H = paraméterek száma invo10TOS = SP – H // OBJREF is paraméter! invo11TOS = MAR = TOS + 1 // OBJREF címe TOS-ban tároljuk ideiglenesen OBJREF címét, ide mutat majd a hívott metódus LV-je. Az utasítások sorrendje más, mint a könyvben!
Máté: Architektúrák6. előadás15 INVOKEVIRTUAL: lokálisok száma 2 bájt a paraméterek száma után, OBJREF cseréje, ide kerül a lokális változók fölötti címre mutató Kapcsoló mutató. A mutatott címre kerül majd a Hívó PC-je. TOS = MAR = OBJREF címe invo12PC = PC + 1; fetch // lokálisok száma 1. bájt invo13PC = PC + 1; fetch // lokálisok száma 2. bájt invo14H = MBRU << 8 invo15H = H OR MBRU // H = lokálisok száma invo16MDR = H + SP + 1; wr // OBJREF cseréje TOS = OBJREF címe
Máté: Architektúrák6. előadás16 ← SP INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató 3. paraméter 2. paraméter 1. paraméter OBJREF Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP A verem új alapja Betett paraméterek A verem alapja hívás előtt A hívó lokális területe verem a hívás előtt verem a hívás után ← SP
Máté: Architektúrák6. előadás17 INVOKEVIRTUAL: a hívó PC-je és LV-je TOS = OBJREF címe invo17MAR = SP = MDR // hívó PC-jének helye invo18MDR = OPC; wr // hívó PC vermelése invo19MAR = SP = SP + 1 // hívó LV-jének a helye invo20MDR = LV; wr // hívó LV-jének vermelése invo21PC = PC + 1; fetch // utasítás olvasás invo22LV = TOS // LV új értéke invo23TOS = MDR; goto Main1 // TOS=hívó LV-je TOS = MDR nélkül TOS a Kapcsoló mutató címét (a hívott LV-jét) tartalmazná!
Máté: Architektúrák6. előadás18 IRETURN ~4.12. ábra Visszatérési é. Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató Visszatérési é. Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP Betett paraméterek A verem alapja IRETURN után A hívó lokális területe A verem alapja IRETURN előtt Verem IRETURN előtt Verem IRETURN után
Máté: Architektúrák6. előadás19 IRETURN // ~4.13. ábra iret1MAR = SP = LV; rd // kapcs. mut. olvasása iret2H = H // vár, hogy az olvasás befejeződjön iret3LV = MAR = MDR; rd // hívó PC olvasása iret4MAR = LV + 1; rd // hívó LV címe iret5PC = MDR; fetch // hívó PC, opkód olv. iret6MAR = SP // visszatérési érték címe iret7LV = MDR // hívó LV iret8MDR = TOS; wr; goto Main1 iret3-4: MAR nem lehet SOURCE operandus!
Máté: Architektúrák6. előadás20
Máté: Architektúrák6. előadás21 Házi feladat: A ábra többi része. Továbbfejlesztések: több sínes rendszerek.
Máté: Architektúrák6. előadás22 Logikai utasítások Bitenkénti logikai műveleteket végeznek. 1 az igaz, 0 a hamis logikai érték. ANDop1,op2; op1 op1 & op2, bitenkénti és TESTop1,op2; flag-ek op1 & op2 szerint ORop1,op2; op1 op1 | op2, bitenkénti vagy XORop1,op2; op1 op1 ^ op2 (eXclusive OR), ; bitenkénti kizáró vagy NOTop; op ~op, bitenkénti negáció, ; nem módosítja STATUS tartalmát!
Máté: Architektúrák6. előadás23 Bit forgató (Rotate) és léptető (Shift) utasítások Forgatják (Rotate) illetve léptetik (Shift) op tartalmát. A forgatás/léptetés történhet –1 bittel, –vagy byte illetve word esetén a CL regiszter alsó 3 illetve 4 bit-jén megadott bittel jobbra (Right) vagy balra (Left). Az utoljára kilépő bit lesz a Carry új tartalma.
Máté: Architektúrák6. előadás24 A rotálás történhet a Carry-n keresztül, ilyenkor a belépő bit a Carry-ből kapja az értékét: RCRop,1/CL; Rotate through Carry Right RCLop,1/CL; Rotate through Carry Left C… C…
Máté: Architektúrák6. előadás25 A rotálás történhet úgy, hogy Carry csak a kilépő bitet fogadja, a belépő bit értékét a kilépő bit szolgáltatja: RORop,1/CL; ROtate Right ROLop,1/CL; ROtate Left C… C…
Máté: Architektúrák6. előadás26 Logikai léptetés jobbra: A belépő bit 0: SHRop,1/CL; SHift Right 0 Előjel nélküli egész számok 2 hatványával történő osztására alkalmas. Aritmetikai léptetés jobbra: A belépő bit op előjele: SARop,1/CL; Shift Arithmetical Right Előjeles egész számok 2 hatványával történő osztására alkalmas. Negatív számok esetén csal! C… C…
Máté: Architektúrák6. előadás27 Balra léptetéskor a belépő bit mindig 0: SHLop,1/CL; SHift Left SALop,1/CL; Shift Arithmetical Left SAL ≡ SHL 0 Előjel nélküli vagy előjeles egész számok 2 hatványával történő szorzására alkalmas. C…
Máté: Architektúrák6. előadás28 hexaproc; ax kiírása hexadecimálisan ; legyen a példa kedvéért: ax = 1234H xchgah,al; ah és al felcserélése ; most: ax = 3412H, al = 12H callhexa_b; al (az eredeti ah) kiírása ; kiírtuk, hogy 12 xchgah,al; ah és al visszacserélése ; most újra: ax = 1234H, al = 34H call hexa_b; al kiírása ; most kiírtuk, hogy 34, tehát eddig kiírtuk, hogy 1234 ret; visszatérés hexaendp; a hexa eljárás vége
Máté: Architektúrák6. előadás29 hexa_bproc; al kiírása hexadecimálisan ; az első híváskor:al = 12H pushcx; mentés a verembe movcl,4; 4 bit-es rotálás előkészítése RORal,CL; az első jegy az alsó 4 biten ; most:al = 21H callh_jegy; az első jegy kiírása ; kiírtuk, hogy 1 RORal,CL; a 2. jegy az alsó 4 biten ; most újra: al = 12H callh_jegy; a második jegy kiírása ; most kiírtuk, hogy 2, tehát eddig kiírtuk, hogy 12 popcx; visszamentés a veremből ret; visszatérés hexa_bendp; a hexa_b eljárás vége
Máté: Architektúrák6. előadás30 h_jegyproc; hexadecimális jegy kiírása pushax; mentés a verembe ANDal,0FH; a felső 4 bit 0 lesz, ; a többi változatlan addal,’0’; + 0 kódja cmpal,’9’; 9 ? jleh_jegy1; ugrás h_jegy1 -hez, ha igen addal,’A’-0AH-’0’ ; A…F hexadecimális ; jegyek kialakítása h_jegy1:movah,14; BIOS hívás: int10H; karakter kiírás popax; visszamentés a veremből ret; visszatérés h_jegyendp; a h_jegy eljárás vége
Máté: Architektúrák6. előadás31 Processzor vezérlő utasítások I. A processzor állapotát módosít(hat)ják. A STATUS bitjeinek módosítása FlagCLearSeTSeTCoMplement CCLCSTCCMC DCLDSTD ICLISTI
Máté: Architektúrák6. előadás32 Input, output, interfész, I/O lapkák UART (Universal Asynchronous Receiver and Transmitter) egy bájtot tud olvasni az adatsínről, és aztán sorosan továbbítja az eszközhöz (vagy fordítva), programmal konfigurálható (belső regiszterének beállításával): 5-8 bit szélesség, sebesség ( bps), paritás ellenőrzés (páros, páratlan, nincs). USART (Universal Synchronous Asynchronous Receiver and Transmitter): szinkron és aszinkron módon is tud működni.
Máté: Architektúrák6. előadás33 PIO (Parallel Input/Output, ábra) 24 B/K vonal, amellyel TTL kompatibilis eszközökhöz (billentyűzet, kapcsolók, nyomtatók) tud kapcsolódni. Konfigurálható. Leggyakoribb az ábrán látható használat. Aszinkron eszközökhöz „kézfogás” logika van beépítve. 8255A párhuzamos B/K lapka Port A Port B Port C #CS A0-A1 #WR #RD RESET D0-D7
Máté: Architektúrák6. előadás34 Beviteli/Kiviteli (B/K, Input/Output, I/O) eszközök használata (chip selection): Valódi B/K eszköz. Memóriára leképezett B/K (memory-mapped I/O). Pl.: ábra K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél
Máté: Architektúrák6. előadás ábra. Teljes cím dekódolás. A 15 a legmagasabb helyértékű bit K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél #CS EPROM #CS RAM #CS PIO A 15 A0A0 A 11
Máté: Architektúrák6. előadás ábra. Részleges cím dekódolás K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél #CS EPROM #CS RAM #CS PIO A0A0 A 15
Máté: Architektúrák6. előadás37 Input, output (I/O) utasítások (I8086/88) A külvilággal történő információ csere port-okon (kapukon) keresztül zajlik. A kapu egy memória cím, az információ csere erre a címre történő írással, vagy erről a címről való olvasással történik. Egy-egy cím vagy cím csoport egy-egy perifériához kötődik. A központi egység oldaláról a folyamat egységesen az IN (input) és az OUT (output) utasítással történik.
Máté: Architektúrák6. előadás38 Input, output (I/O) utasítások (I8086/88) A perifériától függ, hogy a hozzá tartozó port 8 vagy 16 bites. A központi egységnek az AL illetve AX regisztere vesz részt a kommunikációban. A port címzése 8 bites közvetlen adattal vagy a DX regiszterrel történik. INAL/AX,port ; AL/AX egy byte/word a port-ról OUTport,AL/AX ; port egy byte/word AL/AX-ből
Máté: Architektúrák6. előadás39 A periféria oldaláról a helyzet nem ilyen egyszerű. Az input információ „csomagokban” érkezik, az output információt „csomagolva” kell küldeni. A csomagolás (vezérlő információ) mondja meg, hogy hogyan kell kezelni a csomagba rejtett információt (adatot). Éppen ezért az operációs rendszerek olyan egyszerűen használható eljárásokat tartalmaznak (BIOS – Basic Input/Output System – rutinok, stb.), amelyek elvégzik a ki- és becsomagolás munkáját, és ezáltal lényegesen megkönnyítik a külvilággal való kommunikációt.
Máté: Architektúrák6. előadás40 Input/output ( ábra) Az I/O vezérlő regiszterei (5.31. ábra). Terminál: külön regiszterek az inputra és outputra. Beírt karakterMegjelenítendő karakter Billentyűzet puffereKépernyő puffere Megszakítás engedélyezett Billentyűzet állapotKépernyő állapot Van beírt karakter Kész a következő karakter fogadására
Máté: Architektúrák6. előadás41 programozott B/K (5.32. ábra) tevékeny várakozás (pollozásos technika): public static void output_buffer(int buf[], int count) { // count számú bájt kiírása buf-ból az eszközre int status, i, ready; for(i=0; i < count; i++) { do { status = in(display_status_reg); // az állapot lekérdezése ready = (status >> 7) & 0x01; // a kész bit elkülönítése } while(ready != 1); out(display_buffer_reg, buf[i]); }
Máté: Architektúrák6. előadás42 megszakítás vezérelt B/K az eszköz megkapja a feladatát, majd ha elkészült, beállítja a „Megszakítás engedélyezett” bitet, addig a központi egység más feladatot végezhet. DMA (Direct Memory Access, ábra) a DMA önállóan végzi az eszköz figyelését és az adatok mozgatását CPU DMA cím számláló eszköz irány Memória Cikluslopás.
Máté: Architektúrák6. előadás43 Processzor vezérlő utasítások II. NOP; NO oPeration, üres utasítás, ; nem végez műveletet. WAIT; A processzor várakozik, amíg más ; processzortól (pl. lebegőpontos ; segédprocesszortól) kész jelzést nem kap. HLT; HaLT, leállítja a processzort. ; A processzor külső megszakításig ; várakozik.
Máté: Architektúrák6. előadás44 Megszakítás rendszer, interrupt utasítások Az I/O utasítás lassú a CPU gyors, a CPU várakozni kényszerül I/O regiszter (port): a port és a központi egység közötti információ átadás gyors, a periféria autonóm módon elvégzi a feladatát. Újabb perifériához fordulás esetén a CPU várakozni kényszerülhet. Pollozásos technika (~tevékeny várakozás): a futó program időről időre megkérdezi a periféria állapotát, és csak akkor ad ki újabb I/O utasítást, amikor a periféria már fogadni tudja. A hatékonyság az éppen futó programtól függ.
Máté: Architektúrák6. előadás45 Megszakítás A (program) megszakítás azt jelenti, hogy az éppen futó program végrehajtása átmenetileg megszakad – a processzor állapota megőrződik, hogy a program egy későbbi időpontban folytatódhassék – és a processzor egy másik program, az úgynevezett megszakítás kezelő végrehajtását kezdi meg. Miután a megszakítás kezelő elvégezte munkáját, gondoskodik a processzor megszakításkori állapotának visszaállításáról, és visszaadja a vezérlést a megszakított programnak.
Máté: Architektúrák6. előadás46 Pl.: nyomtatás Nyomtatás pufferbe, később a tényleges nyomtatást vezérlő program indítása. Nyomtatás előkészítése (a nyomtató megnyitása), HLT. A továbbiak során a nyomtató megszakítást okoz, ha kész újabb adat nyomtatására. Ilyenkor a HLT utasítást követő címre adódik a vezérlés. A következő karakter előkészítése nyomtatásra, HLT. A bekövetkező megszakítás hatására a megszakító rutin mindig a következő adatot nyomtatja. Ha nincs további nyomtatandó anyag, akkor a nyomtatást vezérlő program lezárja a nyomtatót (nem következik be újabb megszakítás a nyomtató miatt), és befejezi a működését.
Máté: Architektúrák6. előadás47 A HLT utasítás csak akkor szükséges, ha a nyomtatást kérő program befejezte a munkáját. Ellenkező esetben visszakaphatja a vezérlést. Ilyenkor az ő feladata az esetleg szükséges várakozásról gondoskodni a program végén. Bevitel esetén olyankor is várakozni kell, ha még a beolvasás nem történt meg, és a további futáshoz szükség van ezekre az adatokra. Jobb megoldás, ha a HLT utasítás helyett az operációs rendszer fölfüggeszti a program működését, és elindítja egy másik program futását. Ez vezetett a multiprogramozás kialakulásához.
Máté: Architektúrák6. előadás48 A megszakító rutin megszakítható-e? Gyors periféria kiszolgálása közben megszakítás kérés, … „Alap” állapot – „megszakítási” állapot, megszakítási állapotban nem lehet újabb megszakítás. Hierarchia: megszakítási állapotban csak magasabb szintű ok eredményezhet megszakítást. Bizonyos utasítások csak a központi egység bizonyos kitüntetett állapotában hajthatók végre, alap állapotban nem → csapda, szoftver megszakítás. Megoldható az operációs rendszer védelme, a tár védelem stb. A megoldás nem tökéletes: vírus.
Máté: Architektúrák6. előadás49 Csapda és megszakítás Csapda (trap): A program által előidézett feltétel (pl. túlcsordulás) hatására automatikus eljárás hívás. Csapda kezelő. Megszakítás (interrupt): Olyan automatikus eljárás hívás, amit általában nem a futó program, hanem valamilyen B/K eszköz idéz elő, pl. a program utasítja a lemezegységet, hogy kezdje el az adatátvitelt, és annak végeztével megszakítást küldjön. Megszakítás kezelő. A csapda a programmal szinkronizált, a megszakítás nem.
Máté: Architektúrák6. előadás50 Pl.: Egy sornyi karakter képernyőre írása a terminálon. Előkészítés: Egy rendszerprogram összegyűjti a kiírandó karaktereket egy pufferben, beállít egy globális változót, hogy mutasson a puffer elejére, egy másik globális változóban megadja a karakterek számát. Megnézi, hogy a terminál tud-e adatot fogadni (5.31. ábra), és ha igen, akkor elindítja az első karakter kiíratását. Ekkor a CPU fölszabadul egy másik program futtatására. A terminál a képernyőre írja a karaktert, és megszakítást kezdeményez. A megszakítás kezelő újabb karakter kiírását kezdeményezi...
Máté: Architektúrák6. előadás51 Megszakítás kezelés (3.43. ábra) 8259A Megszakítás vezérlő berendezések CPU INT INTA# RD# WR# A0# CS# D0-D7 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 IRi , INT , ha CPU tudja fogadni, akkor INTA# , i D0-D7, a CPU megszakításvektor táblázat i –edik eleméből tudja a megszakítást kiszolgáló eljárás kezdőcímét, megszakítás … Nyolcnál több eszköz kiszolgálásához több megszakítás vezérlő kapcsolható össze.
Máté: Architektúrák6. előadás52 Megszakítás Hardver tevékenységek (3.42. ábra): 1.Az eszköz vezérlő megszakítás jelet tesz a sínre, 2.ha a CPU fogadni tudja a megszakítást, nyugtázza, 3.az eszköz vezérlője az eszköz azonosítószámát (megszakítás-vektor) elküldi a sínen, 4.ezt a CPU átmenetileg tárolja, 5.a CPU a verembe teszi az utasításszámláló aktuális értékét és a PSW-t, 6.a CPU az azonosító indexű megszakítás kezelő címét teszi az utasításszámlálóba és gyakran betölti vagy módosítja PSW-t.
Máté: Architektúrák6. előadás53 Szoftver tevékenységek (terminálra íráskor): 7.menti a használni kívánt regisztereket, 8.kiolvassa egy eszközregiszterből a terminál számát, 9.beolvassa az állapotkódot, 10.ha B/K hiba történt, itt lehet kezelni, 11.aktualizálja a mutatót és a számlálót, a kimenő pufferbe írja a következő karaktert, ha van, 12.visszajelez az eszköz vezérlőnek, hogy készen van, 13.visszaállítja a mentett regisztereket, 14.visszatér a megszakításból, itt történik a PSW eredeti értékének visszaállítása is.
Máté: Architektúrák6. előadás54 Átlátszóság: Amikor bekövetkezik egy megszakítás, akkor bizonyos utasítások végrehajtódnak, de amikor ennek vége, a CPU ugyanolyan állapotba kerül, mint amilyenben a megszakítás bekövetkezése előtt volt. Ha sok eszköz van a rendszerben, akkor célszerű, ha egy megszakítás kiszolgálása közben másik megszakítás is történhet, ilyenkor a megszakítások hierarchiába vannak rendezve (5.46. ábra).
Máté: Architektúrák6. előadás ábra ISR: Interrupt Service Routine Felhasználói program RS232 ISR Lemez ISR Felhasználói program Nyom- tató ISR Nyomtató megszakítás 2-es elsőbbséggel RS232 megszakítás 5-ös elsőbbséggel Nyomtató ISR befejeződik Lemez ISR befejeződik RS232 ISR befejeződik, lemez megszakítás keletkezik A lemez 4-es elsőbbségű megszakítási kérelme függőben marad Nyomtató Felhasz- náló Nyomtató Felhasz- náló Verem
Máté: Architektúrák6. előadás56 I8086/88 Az i. megszakítási okhoz tartozó megszakító rutin FAR címe a memória 4*i. címén található (0 i 255). A megszakítási ok sorszámát hardver megszakítás esetén a hardver egység installáláskor adott száma, szoftver megszakítás esetén az operandus rész szolgáltatja. Megszakítási ok jelentkezésekor a STATUS, CS és IP a verembe kerül, az I és a T flag 0 értéket kap (az úgynevezett maszkolható megszakítások tiltása és folyamatos üzemmód beállítása), majd (CS:IP) felveszi a megszakítás kezelő kezdőcímét.
Máté: Architektúrák6. előadás57 Interrupt utasítások Szoftver megszakítást eredményeznek. INTi; 0 i 255, ; megszakítás az i. ok szerint. Az INT 3 utasítás kódja csak egy byte (a többi 2 byte), így különösen alkalmas nyomkövető (DEBUG) programokban történő alkalmazásra.
Máté: Architektúrák6. előadás58 A DEBUG program saját magához irányítja a 3-as megszakítást. Az ellenőrzendő program megadott pontján (törés pont, break point) lévő utasítást (annak 1. bájtját) átmenetileg az INT 3 utasításra cseréli, és átadhatja a vezérlést az ellenőrzendő programnak. Amikor a program az INT 3 utasításhoz ér, a megszakítás hatására a DEBUG kapja meg a vezérlést. Kiírja a regiszterek tartalmát, és további információt kérhetünk a program állapotáról. Később visszaírja azt a tartalmat, amit INT 3 -ra cserélt, elhelyezi az újabb törés pontra az INT 3 utasítást és visszaadja a vezérlést az ellenőrzendő programnak.
Máté: Architektúrák6. előadás59 Ezek alapján érthetővé válik a DEBUG program néhány „furcsasága”: Miért „felejti el” a töréspontot? Ha ugyanis nem felejtené el – azaz nem cserélné vissza a töréspontra elhelyezett utasítást az eredeti utasításra – akkor a program nyomkövetésében nem tudna továbblépni. Miért nem lehet egy ciklus futásait egyetlen töréspont elhelyezésével figyeltetni, stb?
Máté: Architektúrák6. előadás60 INTO; megszakítás csak O=1 (Overflow) ; esetén a 4. ok szerint Visszatérés a megszakító rutinból IRET; IP, CS, STATUS feltöltése a ; veremből
Máté: Architektúrák6. előadás61 Szemafor Legyen az S szemafor egy olyan word típusú változó, amely mindegyik program számára elérhető. Jelentse S=0 azt, hogy az erőforrás szabad, és S 0 azt, hogy az erőforrás foglalt. Próbáljuk meg a szemafor kezelését! ; 1. kísérlet ujra:movcx,S jcxzszabad...; foglalt az erőforrás, várakozás jmpujra szabad:movcx,0FFFFh movS,cx; a program lefoglalta az erőforrást
Máté: Architektúrák6. előadás62 ; 2. kísérlet ujra:MOVCX,0FFFFH XCHGCX,S; már foglaltat jelez a ; szemafor! JCXZszabad; ellenőrzés S korábbi tartalma ; szerint.... ; foglalt az erőforrás, ; várakozás jmpujra szabad:...; szabad volt az erőforrás, ; de a szemafor már foglalt
Máté: Architektúrák6. előadás63 Az XCHG utasítás mikroprogram szinten: Segéd regiszter S; S CX; CX Segéd regiszter olvasás – módosítás – visszaírás ujra:movcx,0FFFFh LOCKxchgcx,S; S már foglaltat jelez jcxzszabad; ellenőrzés S korábbi ; tartalma szerint...; foglalt, várakozás jmpujra szabad:...; használható az erőforrás, ; de a szemafor már foglalt... MOVS,0; a szemafor szabadra állítása
Máté: Architektúrák6. előadás64 Feladatok Mire szolgál a SWAP utasítás? Hogy valósítható meg a SWAP utasítás? Mire szolgál a WIDE utasítás? Hogy valósítható meg a WIDE utasítás? Mire szolgál az ILOAD utasítás? Hogy valósítható meg az ILOAD utasítás? Mire szolgál a WIDE ILOAD utasítás? Hogy valósítható meg a WIDE ILOAD utasítás? Mire szolgál a GOTO utasítás? Hogy valósítható meg a GOTO utasítás?
Máté: Architektúrák6. előadás65 Feladatok Melyek az IJVM feltételes ugró utasításai? Mire szolgál az IFLT utasítás? Hogy valósítható meg az IFLT utasítás? Mit nevezünk metódusnak? IJVM melyik utasítása szolgál a metódus hívására? Mire szolgál az INVOKEVIRTUAL utasítás? Hol található az INVOKEVIRTUAL disp utasítással hívott metódus? Milyen információ van a metódus elején? Hogy néz ki a veremnek egy metódus számára látható része?
Máté: Architektúrák6. előadás66 Feladatok Mely regiszterek tartalmát kell menteni metódus hívás esetén? IJVM melyik utasítása szolgál a metódusból való visszatérésre? Hogy találhatók meg a mentett regiszter tartalmak visszatéréskor? Miért nem lenne jó IRETURN megvalósításában: iret3:MAR = MDR; rd iret4:MAR = MAR + 1? Hol található a metódus visszatérési értéke az IRETURN utasítás után?
Máté: Architektúrák6. előadás67 Feladatok Az IRETURN utasítás mikroprogramozását úgy is megvalósíthattuk volna, hogy a Kapcsoló mutatót nem használjuk, hanem SP értékéből indulunk ki. Hogyan? Így 7 utasítás is elegendő lett volna. Miért jobb mégis az előadáson bemutatott megoldás? Elemezze a ábra programjait!
Máté: Architektúrák6. előadás68 Feladatok Hogy működik a TEST utasítás? Mi történik a flag-ekkel NOT utasítás hatására? Milyen operandusai vannak a SAR utasításnak? Milyen szerepe van C-nek a bit forgató utasításoknál? Hogy cserélhető fel BL alsó és felső négy bitje? Mi C tartalma többszörös léptetés esetén? Szorozza be BX-et 32-vel (tegyük fel, hogy az eredmény elfér BX-ben)! Ossza el az előjeles BX-et 16-tal!
Máté: Architektúrák6. előadás69 Feladatok Mi az UART? Mire szolgál az UART? Paritás ellenőrzés szempontjából hogy működhet az UART? Mi az USART? Milyen digitális áramkörök segítségével tudja megvalósítani a párhuzamos-soros átalakítást? Mit jelent a CS# jelölés egy chip lábán? Mit jelent a PIO rövidítés? Milyen lábai vannak PIO lapkának? Hány regisztere van PIO lapkának?
Máté: Architektúrák6. előadás70 Feladatok Mi biztosítja, hogy kapcsolók állapotának lekérdezésére és lámpák működtetésére is használható a PIO lapka? Mit jelent a valódi/memóriára leképezett I/O? Melyiknek mi az előnye, hátránya? Mit nevezünk teljes/részleges cím dekódolásnak? Melyiknek mi az előnye, hátránya? Mit nevezünk port-nak? Hogy történik egy port címzése a PC-n? Hogy működik az IN és az OUT utasítás? Mi a BIOS?
Máté: Architektúrák6. előadás71 Feladatok Milyen vezérlő regiszterei vannak egy terminálnak? Mire szolgál a terminál billentyűzet puffer regisztere? Hogyan történik a programozott B/K? Mit nevezünk pollozásos technikának? Mire használható a DMA? Hogy működik a DMA? Milyen regiszterei vannak a DMA-nak? Mire szolgál a NOP utasítás? Mire szolgál a WAIT utasítás? Mire szolgál a HLT utasítás?
Máté: Architektúrák6. előadás72 Feladatok Mit nevezünk program megszakításnak? Mi a megszakítás kezelő? Hogyan történhet a nyomtatás szervezése megszakítás segítségével? Megszakítható-e a megszakítás kezelő? Mi a csapda? Mi a különbség a csapda és a megszakítás között? Hogy működik a 8259A megszakítás vezérlő lapka? Milyen hardver és milyen szoftver tevékenységek tartoznak a megszakításhoz? Mit jelent az átlátszóság megszakítás esetén?
Máté: Architektúrák6. előadás73 Feladatok Hogy történik a program megszakítás a PC-n? Mire szolgál az INT utasítás, és hogy működik? Mi az INT 3 utasítás nevezetessége? Hogy működik a DEBUG program? Miért „felejti el” a töréspontot a DEBUG program? Miért nem lehet egy ciklus futásait egyetlen töréspont elhelyezésével figyeltetni a DEBUG programmal? Mire szolgál az INTO utasítás? Hogy történik a visszatérés a megszakítás kezelőből? Hogy működik az IRET utasítás?
Máté: Architektúrák6. előadás74 Feladatok Mire szolgál a szemafor? Miért támaszt speciális nehézséget a szemafor kezelése? Hogy kezelhető PC-n a szemafor?