Máté: Architektúrák6. előadás1 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ás2 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ás3 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ás4 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ás5 A belépő bit balra léptetéskor mindig 0. Jobbra léptetéskor lehet 0 (logikai léptetés): SHRop,1/CL; SHift Right 0 SHLop,1/CL; SHift Left 0 Előjel nélküli egész számok 2 hatványával történő szorzására (SHL) és osztására (SHR) alkalmas. C… C…
Máté: Architektúrák6. előadás6 A belépő bit balra léptetéskor mindig 0. Jobbra léptetéskor lehet lehet op előjele (aritmetikai léptetés): SARop,1/CL; SHift Arithmetical Right SALop,1/CL; SHift Arithmetical Left SAL ≡ SHL Előjeles egész számok 2 hatványával történő szorzására (SAL) és osztására (SAR) alkalmas. C…
Máté: Architektúrák6. előadás7 hexaproc; ax kiírása hexadecimálisan xchgah,al; ah és al felcserélése callhexa_b; al (az eredeti ah) kiírása xchgah,al; ah és al visszacserélése call hexa_b; al kiírása ret; visszatérés hexaendp; a hexa eljárás vége
Máté: Architektúrák6. előadás8 hexa_bproc; al kiírása hexadecimálisan 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 callh_jegy; az első jegy kiírása RORal,CL; a 2. jegy az alsó 4 biten callh_jegy; a második jegy kiírása 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ás9 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’-’0’-0AH; 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 hexa_b eljárás vége
Máté: Architektúrák6. előadás10 Processzor vezérlő utasítások 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ás11 Processzor vezérlő utasítások 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ás12 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ás13 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. Használata: Valódi B/K eszköz. Memóriára leképezett B/K (memory-mapped I/O). Pl.: ábra. Teljes és részleges cím dekódolás.
Máté: Architektúrák6. előadás14 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ás15 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ás16 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 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ás17 Input/output ( ábra) Az I/O vezérlő regiszterei (5.30. ábra). Terminál: külön regiszterek az inputra és outputra. programozott B/K ábra, tevékeny várakozás 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. DMA (Direct Memory Access, ábra) ha a tömb átvitele megkezdődhet, akkor a DMA önállóan végzi az eszköz figyelését és az adatok mozgatását. Cikluslopás.
Máté: Architektúrák6. előadás18 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: 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ás19 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ás20 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), HALT. A továbbiak során a nyomtató megszakítást okoz, ha kész újabb adat nyomtatására. Ilyenkor a HALT utasítást követő címre adódik a vezérlés. A következő karakter előkészítése nyomtatásra, HALT. 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ás21 A HALT utasítás csak akkor szükséges, ha a nyomtatást kérő program befejezte a munkáját. Ellenkező estben 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 HALT 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ás22 A megszakító rutin megszakítható-e? Elromlik a visszatérési cím, stb. … „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 (privilegizált) állapotában hajthatók végre, alap állapotban nem. → 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ás23 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. Csapdakezelő. 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áskezelő. A csapda a programmal szinkronizált, a megszakítás nem.
Máté: Architektúrák6. előadás24 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.30. á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.
Máté: Architektúrák6. előadás25 Megszakítás. Hardver tevékenységek (3.42. ábra) 1.Az eszköz vezérlője megszakítás jelet tesz a buszra, 2.ha a CPU fogadni tudja a megszakítást, nyugtázza, 3.az eszköz vezérlője a saját azonosítószámát (megszakítás-vektor) elküldi a buszon, 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ás26 Szoftver tevékenységek: 7.menti a regisztereket, 8.kiolvassa a terminál számát egy eszközregiszterből, 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, 12.visszajelez a eszköz vezérlőnek, hogy készen van, 13.visszaállítja a regisztereket, 14.visszatér a megszakításból, sokszor itt történik a PSW eredeti értékének visszaállítása is.
Máté: Architektúrák6. előadás27 Á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.44. ábra).
Máté: Architektúrák6. előadás28 I8086/88 Az i. megszakítási okhoz tartozó megszakító rutin FAR címe a memória 4i. 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ó rutin címét.
Máté: Architektúrák6. előadás29 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ás30 A DEBUG program saját magához irányítja a 3-as megszakítást. Az ellenőrzendő program megfelelő 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, 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ás31 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ás32 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ás33 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ás34 ; 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ás35 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 az erőforrás, várakozás jmpujra szabad:...; használható az erőforrás, ; de a szemafor már foglalt... MOVS,0; a szemafór szabadra állítása