Kocsis Ilona Győri László Számítógép Architektúrák Előadás jegyzet
SZÁMÍTÓGÉP ARCHITEKTÚRÁK A számítógép architektúra szintjei A digitális számítógép olyan gép, amely a neki szóló utasítások alapján problémákat old meg. Azt az utasítássorozatot, amely leírja, hogyan oldjunk meg egy feladatot, programnak nevezzük. A legtöbb gépi utasítás ritkán bonyolultabb mint: Adj össze két számot! Ellenőrizz egy számot, vajon nulla-e! Egy adatot másolj a számítógép memóriájában egyik helyről a másikra! Egy számítógép utasításainak együttese egy olyan nyelvet alkot, amelyen az ember a számítógéppel képes kommunikálni. Az ilyen nyelvet gépi nyelvnek nevezzük. Legyen L 0 a gépi nyelv, és L 1 egy az ember számára kényelmesebb nyelv. Hogy hajtható végre az L 1 nyelven írt program? Kellene olyan gép, amelynek gépi nyelve az L 1 nyelv. Fordítás és értelmezés Fordítás: Először az L 1 nyelvű program minden utasítását helyettesítjük az L 0 nyelv utasításainak egy vele ekvivalens sorozatával. Az így nyert program teljes egészében az L 0 utasításaiból áll. Ezután az eredeti L 1 nyelvű program helyett a számítógép ezt az L 0 nyelvű programot hajtja végre. Értelmezés: Az L 1 nyelvű program következő utasítását elemezzük, és a vele ekvivalens L 0 nyelvű utasítássorozatot azonnal végrehajtatjuk a számítógéppel. A fordítás és az értelmezés is elvégezhető az L 0 nyelvű számítógéppel. Olyan, mintha lenne olyan gépünk, amely végre tudja hajtani az L 1 nyelven írt programot: az ilyen gépet virtuális gépnek nevezzük. A gépi és az ember számára kényelmes nyelv között oly nagy az eltérés, hogy annak áthidalásához nyelvek és virtuális számítógépek hierarchiája alakult ki. Strukturált számítógép-felépítés: Az L n nyelvű programokat vagy az alsóbb szinten futó értelmező hajtja végre, vagy az alsóbb szinten futó fordítóprogram fordítja alsóbb szintre. Gépi, nyelvi szintek Digitális logika szintje (0. szint) - kapu (gate), AND, OR, - egy és több bites memória, regiszter Mikroarchitektúra szintje (1. szint) - mikroutasítások, mikroprogram - nem minden gépen létezik, de a gépi utasítások végrehajtását gyakran mikroprogram végzi, ekkor ez a szint értelmezi a 2. szintet - regiszterek, aritmetikai-logikai egység, adatfolyam adatút Gépi utasítás szintje (2. szint) - itt dől el a kompatibilitás kérdése Operációs rendszer szintje (3. szint) - speciális kiegészítők (memóriakezelés, párhuzamos futtatás, ) - átalában értelmezés - a szint utasításait az operációs rendszer vagy közvetlenül a gépi utasítás szintje hajtja végre - az eddigi szintek programjai hosszú számsorozatok
Assembly nyelv szintje (4. szint) - szimbolikus leírás Probléma orientált nyelv szintje (5. szint) - pascal, C, C++, - adatbázis kezelők, - ezek tényleges nyelvek, fordítás Gépi utasítás szintje Az utasítások a memóriában vannak tárolva. 4 címes utasítás cím) command dest, source1, source2, next - cím: az utasítást tartalmazó memóriarekesz címe - command (utasítás): az utasítás kódja - dest (cél): itt képződik az eredmény - source1 (forrás1): a művelet 1. operandusa - source2 (forrás2): a művelet 2. operandusa - next: a következő végrehajtandó utasítás címe. Ez legtöbbször az utasítás utáni első rekesz címe, ezért általában nem kell megadni, csak akkor, ha más utasítással folytatódik a program (ugró utasítás). A next implicit operandus. 3 címes utasítás cím) add, dest, source1, source2 - hatására dest fölveszi a source1 + source2 értéket. Ilyenkor persze elvész dest régi értéke 2 címes utasítás cím) add, op1, op2 - hatására op1 fölveszi az op1 + op2 értéket 1 címes utasítás cím) add, op - hatására A fölveszi az A + op értéket, ahol A egy kitüntetett regiszter (accumulator) Az elektronikus számítógépek fejlődése, generációi, általános felépítése 1. generáció: elektroncső (1945-1955) COLOSSUS (Turing, 1943): titkosírások megfejtése - 30 évre titkosítva. ENIAC (Electronic Numerical Integrator and Computer - Mauchley, Eckert, 1943): 18000 cső, 140 KW, 30 tonna, 20 darab 10 decimális jegyes regiszter. 10 cső egy decimális számjegyhez! Dugaszolással programozható. 1946-ig nem sikerült befejezni. Neumann János megismerte az ENIAC-ot, és új gépet tervezett (IAS): bináris aritmetika, tárolt program. A vezérlő egység határozza meg a működést a tárból kiolvasott adatok alapján EDSAC: 2-es számrendszer, 4096 szavas memória. 40 bites szavak: előjeles egész, vagy két utasítás. Tárolt program: 8 bites utasításkód, 12 bites cím. Akkumulátor. Nem volt lebegőpontos aritmetika! IBM 701 (1953) 2K 36 bites memória. Legnagyobb 1. generációs: IBM 709 (1958).
2. generáció: tranzisztor (1955-1965). Tranzisztor feltalálása: 1948, Nobel díj: 1956. Első jelentős tranzisztoros gép: DEC PDP-1 (1961). Ciklusideje fele az IBM 7090-nek (az IBM 709 tranzisztoros változata): 4K 18 bites szó, 5 ms ciklusidő, 512x512 display! Ára csak töredéke: 120 000 US$. Több tucat eladott gép. Néhány évvel később: PDP-8: omnibusz (általános sín) 15 000 US$, 50 000 eladott gép. Magyarországon: KFKI, TPAi. IBM 7090, 7094. Első üzlet-orientált gép (1961): IBM 1401 byte-szervezésű memória. Burroughs B5000 (1963), Cél: hatékony ALGOL fordítót lehessen írni! Első szuper-gyors gép (1964): CDC 6600 Tervező: Seymour Cray. Párhuzamos működésre képes egységek, külön egység az összeadásra, szorzásra, osztásra. Párhuzamos utasítás-végrehajtás. 3. generáció: integrált áramkör (1965-1980) Robert Noyce (1958): szilícium alapú integrált áramkör IBM problémája: 7094 és 1401 nem kompatibilis. (1964): IBM 360-as sorozat Később a szocialista országokban R-sorozat. Emuláció: a sorozat gépein futtathatók az előző 7094 és 1401 típusok programjai is. (mikroprogramozás). Multiprogramozás (DOS, POWER, OS). 24 bites címtartomány (16 Mbyte). A nyolcvanas évek közepéig elég, akkor áttérés a 32 bites címre. DEC: PDP-11 (1970): 16 bites Magyarországon: TPA70. Nem kompatibilis a PDP-11 -gyel. 4. generáció: VLSI (Very Large Scale Integration) (1980- napjainkig) Néhány millió elem egy lapkán (chipen). Személyi számítógépek. Kezdetben zacskóban: nyomtatott áramköri lap, IC-k, köztük általában INTEL 8080, kábelek, tápegység, hajlékony lemez CP/M operációsrendszer (Gary Kildall), Commodore, Apple, Spectrum-80. IBM PC (I-8088 alapú) a terveket publikálták - klónok. Microsoft: MS-DOS, OS/2, Windows. Technológiai fejlődés Moore törvény (1965): Az egy lapkán elhelyezhető elemek száma másfél évenként duplázódik (1.8. ábra). Azt várják, hogy 2020-ig teljesülni fog. Minden más területen (lemezek, adatátvitel,...) hasonló sebességű a fejlődés. A szoftverek mérete, bonyolultsága is követi ezt: Nathan első törvénye: A szoftver gáz: kitölti a rendelkezésére álló teret.
A Neumann-elv A modern számítógépekkel szembeni követelmények: Fő funkcionális részek: Vezérlő egység (control unit) Arithmetikai és logikai egység (ALU) Tár (memory), ami címezhető és újraírható Ezek elektronikusak és bináris számrendszert használnak Tárol program elvén működik A vezérlő egység határozza meg a működést a tárból kiolvasott adatok alapján Numerikus adatok gépi ábrázolása Fixpontos számok Pl.: előjeles kétjegyű decimális számok : Ábrázolási tartomány: [-99, +99]. Pontosság (két szomszédos szám különbsége): 1. Maximális hiba: (az ábrázolási tartományba eső) tetszőleges valós szám, és a hozzá legközelebb lévő ábrázolható szám különbsége: 1/2. Számolási pontatlanságok: a = 70, b = 40, c = - 30 esetén a + (b + c) = 80, (a+b) + c = -20 - túlcsordulás Helyértékes ábrázolás Pl.: 521,25 10 = 5 * 10 2 + 2 * 10 1 + 1 * 10 0 +2 * 10-1 + 5 * 10-2. Általában (q alapú számrendszer esetén): a n a n-1 a 0,b 1 b 2 b m = a n *q n +a n-1 *q n-1 + +a 0 +b 1 *q -1 +b 2 *q -2 + +b m *q -m 0 a i, b j < q Átszámolás számrendszerek között Pl. 10-esből 2-esbe: egész rész osztással, tört rész szorzással. Véges tizedes tört azonban nem biztos, hogy binárisan is véges! Átszámítás 10-es számrendszerbe q alapú számrendszerből Legegyszerűbben a Horner elrendezéssel alakíthatunk át: a n *q n +a n-1 *q n-1 + +a 0 +b 1 *q -1 +b 2 *q -2 + +b m *q -m = ( (a n *q + a n-1 ) * q + + a 1 )* q+ a 0 ( (b m /q + b m-1 )/q + + b 1 )/q Pl.: $a_5f67=(((10*16+5)*16+15)*16+6)*16+7 %1_0110_0101=(((((((1*2+0)*2+1)*2+1)*2+0)*2+0)*2+1)*2+0)*2+1 A számítógép kettes számrendszerben dolgozik, 10-es számrendszerből a Horner elrendezéssel alakítja át a számokat. A formulában a i -t, b j -t és q -t kettes számrendszerben kell megadni. Kettes számrendszerből 10-es számrendszerbe 10-zel való ismételt osztással állítja elő az egész részt, és 10- zel való ismételt szorzással állítja elő a tört részt hasonlóan ahhoz, ahogy korábban bemutattuk a 10-es számrendszerből 2-esbe való átszámítást.
Lebegőpontos számok Sok ekvivalens ábrázolási lehetőség, a leggyakrabban a törtrész első számjegye az adott szám első, nullától különböző számjegye (normalizált alak). Példa: 254 = 0,0254x10 4 = 0,254x10 3 (= 2,54x10 2 ). - A nulla ábrázolásához külön megállapodásra van szükség (általában csupa nulla számjegyből áll) - A lebegőpontos ábrázolásoknál is meghatározható a legkisebb és a legnagyobb ábrázolható szám, továbbá a legkisebb és legnagyobb hiba. Előjeles fixpontos számok 2 8 = 256 különböző 8 bites szám lehetséges. Melyek jelentsenek negatív értékeket? Előjeles számok szokásos ábrázolásai: előjeles abszolút érték, egyes komplemens, kettes komplemens, többletes. Előjeles abszolút érték Az első bit (balról) az előjel: 0: +, 1: - Pl.: +25 10 = 00011001 2, -25 10 = 10011001 2. Jellemzők (8 bites szám esetén): a legkisebb szám -127, a legnagyobb 127, a nulla kétféleképpen ábrázolható. Negatív számok ábrázolásai Egyes komplemens Az első bit az előjel (0: pozitív, 1: negatív). Egy szám -1-szerese (negáltja) úgy kapható meg, hogy a szám minden bitjét negáljuk (ellenkezőjére változtatjuk). Pl.: +25 10 = 00011001 2, - 25 10 = 11100110 2. Jellemzők (8 bites szám esetén): a legkisebb szám -127, a legnagyobb 127, a nulla kétféleképpen ábrázolható. Kettes komplemens Az első bit az előjel (0: pozitív, 1: negatív). Egy szám negáltja úgy kapható meg, hogy az egyes komplemenshez egyet hozzáadunk. Pl.: +25 10 = 00011001 2, -25 10 = 11100110 2 egyes komplemens, -25 10 = 11100111 2 kettes komplemens. Jellemzők (8 bites szám esetén): a legkisebb szám -128, a legnagyobb 127, a nulla egyértelműen ábrázolható. Képzése: Egyes komlemens +1 előjel, 0 = pozitív, 1 = negatív Ha pozitív, ugyanaz az érték, mint a normál számok esetén
Ha negatív, az abszolút érték meghatározásához kettes komplemenst kell képezni. Úgy is megfogalmazható, hogy: A legmagasabb helyiértékű bit +2 n-1 helyett -2 n-1 et ér Többletes A szám és a többlet összegét ábrázoljuk előjel nélkül (ez már pozitív!). m bites szám esetén a többlet általában 2 m-1 vagy 2 m-1 1 Pl.: +25 10 = 10011001 2, 128-többletes ábrázolás -25 10 = 01100111 2 128-25=103 Jellemzők (128 többlet esetén): a legkisebb szám -128, a legnagyobb 127, a nulla egyértelműen ábrázolható. Megjegyzés: a 2 m-1 többletes ábrázolás azonos a kettes komplemenssel fordított előjellel. Használata: a lebegőpontos számok kitevő-részénél. Feladat: Ábrázoljuk nyolcas számrendszerben 254 10 -et: előjelbittel kezdve, a kitevő legyen 1 jegyű (3 bites), 4-többletes, a törtrész 4 jegyű. Megoldás: 376 8, normalizált alak: 0,376x8 3, a megoldás: 0111011111110000 2 = 073760 8 BCD ábrázolás BCD (Binary Coded Decimal) ábrázolás: minden decimális számjegyet négy biten ábrázolunk. Negatív számok BCD ábrázolása: 9 vagy 10 komplemens kóddal. Pl.: +301 10 =0000 0011 0000 0001, -301 10 = 1001 0110 1001 1000 (9 komplemens), -301 10 = 1001 0110 1001 1001 (10 komplemens). Az IEEE 754 szabvány Single 32 bites, double 64 bites (, extended 80 bites). Single 32 bites: előjel: 1 bit kitevőrész: 8 bit, 127-többletes törtrész:23 bit Double 64 bites: előjel: 1 bit kitevőrész: 11 bit, 1023 többletes törtrész: 52 bit Ha 0 < a kitevőrész < 255, a szám normalizált. Normalizált tört vezető 1-es bitje nincs ábrázolva! Karakter kódolási szabványok ASCII - American Standard Code for Information Interchanges - 7 bites: vezérlőkarakterek - az angol abc kis és nagy betűi, szimbólumok, ISO 8859 - kódlap, ISO 8859-2: magyar betűk is. UNICODE 32 bites: kódpozíciók (code point)
UTF-8 Kínai, japán, koreai: fonetikus szimbólumok, Han ideogramok (20992 jel, nincsenek szótár szerint rendezve).... Japán íráshoz kevés (> 50000 kanji jel van). Elvileg 2 31 különböző karakter, jel Tárolás UTF-8 szerint 8 bites Unicode átalakítási formátum bármilyen Unicode karaktert képes reprezentálni visszafelé kompatibilis a 7 bites ASCII szabvánnyal nagyon elterjedt, mivel zökkenőmentes átmenetet biztosít az ASCII vagy ISO alapú rendszerekből a kódolt végeredmény jól tömöríthető CPU Central Processor Unit Feladata: a memóriában tárolt program végrehajtása. Részei: vezérlőegység, feladata: a program utasításainak beolvasása, az ALU, a regiszterek vezérlése, aritmetikai-logikai egység (ALU), feladata: az utasítások végrehajtása, regiszter készlet, feladata: részeredmények, vezérlő információk tárolása. A legfontosabbak: Adatút (data path) utasításszámláló (Program Counter): PC, utasításregiszter (Instruction Register): IR, A regiszter készletből feltöltődik az ALU két bemenő regisztere ALU Az eredmény az ALU kimenő regiszterébe kerül Az ALU kimenő regiszteréből a kijelölt regiszterbe kerül az eredmény Nem biztos, hogy az ALU be- és kimenő regiszterei tényleges (címezhető, hivatkozható) regiszterként vannak kialakítva. Központi memória, bájt sorrend, hibafelismerés és hibajavítás kérdése Központi memória A programok és adatok tárolására szolgál. Bájtsorrend Bit: a memória alapegysége, egy 0-t vagy 1-et tartalmazhat. Memória rekesz (cella): több bit együttese. Minden rekesz ugyanannyi bitből áll. Minden rekeszhez hozzá van rendelve egy szám, a rekesz címe. Egy rekeszre a címével hivatkozhatunk. A rekesz a legkisebb címezhető egység. A rekesz hossza manapság legtöbbször 8 bit (byte ~ bájt). A legtöbb processzor több egymás utáni bájttal is tud dolgozni (szó word, ). A legmagasabb helyértékű bájt a szóban a legalacsonyabb címen: a legmagasabb címen: nagy (big) endian kis (little) endian MSBfirst LSBfirst
Most Significant Byte first Least Significant Byte first Ha egy 32 bites szó bájtjainak értéke rendre: a, b, c, d, akkor a szó értéke: a*256 3 +b*256 2 +c*256+d a+b*256+c*256 2 +d*256 3 Problémák a gépek közötti kommunikációban! Hibafelismerés és hibajavítás Kódolás: adat + ellenőrző bitek = kódszó. 2 kódszó Hamming távolsága: az eltérő bitek száma. Pl.: 11001 és 11011 (Hamming) távolsága = 1. Hibaérzékelő kód: bármely két kódszó távolsága > 1: paritás bit. d hibás bit javítása: a kódszavak távolsága > 2d. Egy hibát javító kód m adat, r ellenőrző bit, összesen n = m + r. 2 m jó szó + minden jó szónak n db egyhibás szomszédja van, ezért (1+ n)2 m 2 n = 2 m+ r 2 m -mel egyszerűsítve: m + r +1 2 r, vagy másképp: m + r < 2 r szükséges. Operandusok megadás módjai (címzési módok) Közvetlen operandus (immediate operand) Az operandus megadása az utasításban. Direkt címzés (direct addressing) A memóriacím megadása a címrészen. Az utasítás mindig ugyanazt a címet használja. Az operandus értéke változhat, de a címe nem (fordításkor ismert kell legyen!). Regiszter címzés (register addressing) Mint a direkt címzés, csak nem memóriát, hanem regisztert címez. Regiszter-indirekt címzés (register indirect addresing) A címrészen valamelyik regisztert adjuk meg, de a megadott regiszter nem az operandust tartalmazza, hanem azt a memóriacímet, amely az operandust tartalmazza (mutató - pointer). Rövidebb és a cím változtatható. Önmódosító program (Neumann): Ma már kerülendő (cache problémák!), pl. regiszterindirekt címzéssel kikerülhetjük. Indexelt címzés (indexed addressing) Egy eltolási érték (offset) és egy (index) regiszter tartalmának összege lesz az operandus címe. Bázisindex címzés (based-indexed addressing) Egy eltolási érték (offset) és 2 (egy bázis és egy index) regiszter tartalmának összege lesz az operandus címe. Verem címzés (stack addressing) Az operandus a verem tetején van. Nem kell operandust megadni az utasításban. Az Intel 8086/88 regiszter készlete, társzervezése, címzési módjai, címzési mód byte Az Intel 80x86 CPU regiszterei Általános célú regiszterek Speciális regiszterek alkalmazások számára hozzáférhető STATUS/Flag regiszter (SR, Flags, F, EF) (Utasítás számláló (IP, EIP)) operációs rendszer (ill. a vezérlő) számára fenntartott
szegmens regiszterek CS: Kód SS: Verem DS: Adat ES, FS, GS: Extra adat Az Intel 80x86 CPU általános regiszterei 8 bites regiszeterek : AL, AH, BL, BH, CL, CH, DL, DH 16 bites regiszterek : AX, BX, CX, DX, SI, DI, BP, SP 32 bites regiszterek: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP Átfedés van közöttük: AX=EAX%65535=256*AH+AL, BX, CX, DX SI=ESI%65535, DI, BP, SP jelentés a név mögött: AX=Accumulator, BX=Base register, CX=Counter_register, DX=Data_register, SI=Source_Index, DI=Destination_Index BP=Base_Pointer, SP=Stack_Pointer (NE HASZNÁLD!) AL=Accumulator Low, AH=Accumulator High, stb... EAX=Extended Accumulator, stb... A flag regiszter Egyedi zászlók - logikai változók gyűjteménye Állapot jelzők bit-0: CF Carry átvitel / előjel nélküli túlcsordulás bit-2: PF Parity párosság bit-4: AF - Auxiliary carry közbenső átvitel bit-6: ZF Zero zéró bit-7: SF Sign előjel bit-b: OF Overflow Előjeles Túlcsordulás Vezérlő bitek bit-8: TF Trace nyomkövető bit-9: IF Interrupt enable Megszakítás engedélyezés bit-a: DF Direction Irány jelző Az Intel 8086/8088 társzervezése A memória byte szervezésű. Egy byte 8 bitből áll. word, double word. Byte sorrend: Little Endian (LSBfirst). A negatív számok 2-es komplemens kódban. szegmens, szegmens cím a szegmensen belüli relatív cím, logikai cím, virtuális cím, OFFSET, displacement, eltolás, Effective Address (EA) fizikai cím (Address) Címzésmódok (operandusok megadási módjai) konstans, azonnali: MOV(54,AL); ADD($54,AL); regiszter: MOV(54,AL); SUB(BH,AL);
Memória címzések direkt, közvetlen: MOV(AX,[$AF4D]); MOV(valt,AX); regiszter indirect: MOV([EAX],EAX); ADD(34,[EBX]); bázis relative:mov([ebx+23],bl); MUL(valt[ESI]); indexelt: MOV([$AD34+ECX*2],AX);MUL(v[esi*2]) bázisrelatív indexelt MUL(v[EBX+ECX*2]) Az Intel 8086/88 utasításai Adatmozgató utasítások (Minden flag változatlan) MOV(forrás,cél); MOVSX(forrás,cél_reg);MOVZX(forrás,cél_reg) XCHG(m/r,m/r); // azonos méret, XLAT; // MOV([EBX+AL],AL) LEA(mem,cél_reg32);// = MOV(&mem,cél_reg32) LAHF; SAHF; // Load, Save az AH szempontjából.. CBW; CWD; CDQ; //movsx(al,ax) Verem műveletek PUSH(forrás);//mem, reg, 16/32 bit o PUSHW(forrás); // mem16, reg16, konst; ESP-=2 o PUSHD(forrás); // mem32, reg32, konst; ESP-=4 POP(forrás); //mem, reg, 16/32 bit PUSHF; PUSHFD; POPF; POPFD; // Flagek mégis változhatnak!! PUSHA; PUSHAD; POPA; POPAD; Aritmetikai utasítások ADD(forrás,cél);SUB(forrás,cél); ADC(forrás,cél);SBB(forrás,cél); INC(m/r); DEC(m/r);NEG(m/r); CMP(cél,forrás);//mint a SUB(forrás,cél), de nem tárol Feltételes ugrások CMP után J... címke; pozitív mennyiségek hasonlítása után JA, JB, JE, JAE, JBE, Above JNA, JNB, JNE, JNAE, JNBE Below előjeles mennyiségek hasonlítása után JG, JL, JE, JGE, JLE, Greater JNG, JNL, JNE, JNGE, JNLE Less INTMUL(forrás,cél);intmul(kons,forrás,cél); MUL(forrás);IMUL(forrás); DIV(osztó);IDIV(osztó);//kivétel Logikai utasítások NOT(cél); // Minden flag változatlan
OR(forrás, cél); AND(forrás,cél); XOR(forrás,cél); TEST(forrás,cél); // TEST(al,al); TEST(8,AH); forrás: mem/reg/konst cél: mem/reg cél és forrás azonos méretű / 8-16-32 bit, nem lehet mindkettő memória cím OF=CF=0 AF határozatlan PF, ZF, SF értelemszerűen Sztringkezelő utasítások Adatmozgató utasítások LODSB; LODSW; LODSD; // DS:ESI // direction flag STOSB; STOSW; STOSD; // ES:EDI // AL, AX, EAX MOVSB; MOVSW; MOVSD; // ESI, EDI hasonlító utasítások SCASB; SCASW; SCASD; // AL-[EDI] CMPSB; CMPSW; SMPSD; // [ESI]-[EDI] Ismétlő prefixek // ECX REP.MOZGATO REPE.HASONLITO Forgatások, léptetések REPNE.HASONLITO SHL(sz,cél);//SHR, SAR ROL(sz,cél);//ROR, RCL, RCR SHLD(sz,forrás,cél); // SHL(sz,cél:forrás); 16/32 bit SHRD(sz,reg,mem/reg);// SHR(sz,forrás:cél); Csak a cél változik meg sz: konstans vagy CL cél és forrás azonos méretű forrás csak regiszter lehet, csak 16-32 bites lehet Csak CF és OF változik meg a forgatásoknál CF az utoljára kilépő bit másolata SZ=0 esetén minden változatlan marad SZ=1 esetén OF azt mutatja meg, hogy megváltozott-e az előjelbit értéke SZ>1 esetén OF határozatlan AF határozatlan a léptetéseknél Két menetes assembler fordító Első menet Legfontosabb feladata a szimbólum tábla felépítése. A szimbólum neve értéke egyéb információk
- érték: címke címe, változó címe, szimbolikus konstans értéke. - egyéb információk: pl.: típus, méret, szegmens neve, amelyben a szimbólum definiálva van, Második menet Az első menet célja összegyűjteni, táblázatba foglalni a szimbólum definíciókat, így a második menet idején már minden (a programban definiált) szimbólum ismert, tehát a második menetben már nem jelentkezik az előre hivatkozási probléma. Összeállítás = assemble Az assembler számos hibát ismerhet fel: használt szimbólum nincs definiálva, egy szimbólum többször van definiálva, nem létező operációs kód, nincs elegendő operandus, túl sok operandus van, hibás kifejezés (pl. 3 egy bináris számban), illegális regiszter használat, típus hiba, nincs END utasítás, Számos olyan hibát azonban, melyet a magasabb szintű nyelvek fordítói könnyen felismernek vagy egyáltalán elő se fordulhatnak az assembler nem tud felderíteni: az eljárás hívás paramétereinek típusa nem megfelelő, (Alacsony szintű eljáráshívás esetén.) a regiszter mentések és helyreállítások nem állnak párban, hibás vagy hiányzik a paraméter vagy a lokális változó terület ürítése a veremből, a hívás és a hívott eljárás helyén érvényes ASSUME-ok ellentmondásosak (nem feltétlenül hiba, de az lehet), // Ez MASM-ban fordulhat elő Kapcsolat szerkesztő. Time sharing (idő osztás) Szerkesztő A következő feladatokat kell megoldania: az azonos nevű és osztályú szegmens (Kód, Readonly, Static, Storage) szeletek egymáshoz illesztése a szegmens szeletek definíciójában megadott módon, a GROUP pszeudo utasítással egy csoportba sorolt szegmensek egymás után helyezése, (MASM) a relokáció elvégzése, a külső hivatkozások (@EXTERN) feloldása. Az object file nemcsak a lefordított utasításokat tartalmazza, hanem további a szerkesztőnek szóló információt is. Lehetővé teszi a program akár különböző nyelveken készített részleteinek összeillesztését. Két menetben dolgozik: Az első menetben táblázatokat készít (térkép map és globális szimbólum tábla). A második menetben a táblázatokban elhelyezett információk alapján elvégzi a szerkesztést. Időosztásos (time sharing) rendszer Egy program elindításakor többek között a következő feladatokat kell végrehajtani: betöltés indítás felfüggesztés kimentés a program folytatásakor: visszamentés futtatás felfüggesztés kimentés
Általában nem biztosítható, hogy a visszamentett program a memóriának ugyanarra a területére kerüljön vissza, ahol korábban futott! Binding (cím hozzárendelés), dinamikus szerkesztés Cím hozzárendelés (binding) Időosztáshoz kapcsolódóan: Ha pl. a programunk egy JMP L ugró utasítást tartalmaz, akkor L-hez valamikor hozzá kell rendelnünk egy konkrét fizikai címet binding = (cím) hozzárendelés. Dinamikus szerkesztés (DLL) Nagyméretű programokban bizonyos eljárások csak nagyon ritkán szükségesek. Ezeket nem kell statikusan a programhoz szerkeszteni. Csatoló táblázat (Linkage Segment): minden esetleg szükséges eljáráshoz egy csatoló blokkot (struktúrát) tartalmaz. Boole-függvények áramköri ekvivalenciája Két Boole-függvény ekvivalens, ha az összes lehetséges bemenetre a két függvény azonos kimenetet ad. Két Boole-függvény ekvivalenciája könnyen ellenőrizhető az igazság táblájuk alapján. Kapuk, kombinációs áramkörök, multiplexer, demultiplexer, dekódoló, összehasonlító, programozható logikai tömbök Kombinációs áramkörök Definíció: A kimeneteket egyértelműen meghatározzák a pillanatnyi bemenetek. Multiplexer n vezérlő bemenet, 2 n adatbemenet, 1 kimenet. Az egyik adatbemenet kapuzott (gated) a kimenetre. n vezérlő bemenetű multiplexerrel tetszés szerinti n változós Boole-függvény megvalósítható az adatbemenetek megfelelő választásával. Demultiplexer Egy egyedi bemenetet irányít az n vezérlő bemenet értékétől függően a 2 n kimenet egyikére Dekódoló n bemenet, 2 n kimenet. Pontosan egy kimeneten lesz 1. Demultiplexerrel: a bemenetet igazra állítjuk. Összehasonlító (comparator) KIZÁRÓ VAGY kapu Programozható logikai tömbök PLA (Programmable Logic Array) Biztosítékok kiégetése. Aritmetikai áramkörök, léptető, fél és teljes összeadó, ALU Aritmetikai áramkörök A kombinációs áramkörökön belül külön csoportot alkotnak. Léptető (shifter) Jobbra vagy balra léptet.
Fél összeadó Teljes összeadó Aritmetikai-logikai egység bitszelet (bit slice), F0, F1 -től függően ÉS, VAGY, NEGÁCIÓ vagy + Nem kombinációs áramkörök. Óra, tárolók, flip-flop-ok Óra (clock) ciklusidő (cycle time) Pl.: 500 MHz - 2 nsec. Finomabb felbontás késleltetéssel. Aszimmetrikus óra. Tároló Szint vezérelt (level triggered). SR tároló (Set Reset latch. Stabil állapot: a két kimenet 0, 1 vagy 1, 0. S (set), R (reset) bemenet. Időzített (clocked) SR tároló: Mindkét SR tároló indeterminisztikussá válna, ha S = R = 1 egyszerre fordulna elő. Flip-flop Élvezérelt (edge triggered) CK: órajel CK=1, CK=0 szint esetén írja be D-t, CK emelkedő, (d) CK lefelé menő élénél. Sokszor S (set, PR preset), R (reset,clr clear) be- és Q# kimenet is van. Gyorsító tár (cache). Találati és hiba arány. Közös és osztott gyorsító tár Gyorsító tár A processzorok mindig gyorsabbak a memóriáknál. A CPU lapkára integrálható memória gyors, de kicsi. Feloldási lehetőség: a központi memória egy kis részét (gyorsító tár) a CPU lapkára helyezni: Amikor egy utasításnak adatra van szüksége, akkor először itt keresi, ha nincs itt, akkor a központi memóriában. Lokalitási elv: Ha egy hivatkozás a memória A címére történik, akkor a következő valószínűleg valahol A közelében lesz (ciklus, mátrix manipulálás, ). Ha A nincs a gyorsító tárban, akkor az A-t tartalmazó (adott méretű) blokk (gyorsító sor - cache line) kerül beolvasásra a memóriából a gyorsító tárba.
Találati arány (h) Az összes hivatkozás mekkora hányada szolgálható ki a gyorsító tárból. Hiba arány: 1-h Ha a gyorsító tár elérési ideje: c, a memória elérési ideje: m, akkor az átlagos elérési idő = c + (1- h) m. A gyorsító tár mérete: nagyobb tár drágább. A gyorsító sor mérete: nagyobb sor nagyobb a sor betöltési ideje is. Ugyanakkora tárban kevesebb gyorsító sor fér el. Osztott (külön utasítás és adat) gyorsító tár előnyei: Egyik szállítószalag végzi az utasítás, másik az operandus előolvasást. Az utasítás gyorsító tárat sohasem kell visszaírni (az utasítások nem módosulnak). Egyesített gyorsító tár nem lehetséges párhuzamosítás. Direkt leképezésű és halmaz kezelésű gyorsító tár Direkt leképezésű gyorsító tár működése Ha a gyorsító tár Vonal által mutatott sorában V=1 (valid), és a TAG megegyezik a címben lévő TAG-gel, akkor az adat bent van a gyorsító tárban (ebben a sorban). Halmazkezelésű (csoportasszociatív) gyorsító tár Ha egy program gyakran használ olyan szavakat, amelyek távol vannak egymástól, de ugyanoda képződnek le a gyorsító tárban, akkor sűrűn kell cserélni a gyorsító sort. Ha minden címhez n bejegyzés van, akkor n utas halmazkeresésű gyorsító tárról beszélünk. Ritka a több, mint 4 utas kezelés. LRU (Least Recently Used) algoritmus Gyorsító sor betöltése előtt a legrégebben használt bejegyzés kerül ki a gyorsító tárból. Memóriába írás Memóriába írás Stratégiák: Írás áteresztés (write through): az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni, különben el kellene dobni a gyorsító sort. Késleltetett írás (write deferred, write back): ha a cím bent van a gyorsító tárban, akkor csak a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél. Ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük: írás allokálás (write allocation) többnyire ezt alkalmazzák késleltetett írás esetén. Sín. Sín protokolm, mester szolga, sín vezérlő, vevő, adóvevő, sín szélesség, sáv szélesség Sín (bus) Korai személyi számítógépeknél egyetlen (külső) rendszersín, manapság legalább kettő van: egy belső és egy külső (I/O) Sínprotokoll A sín működésének + a csatlakozások mechanikai, elektronikus definíciója Mesterek (masters) Aktív (kezdeményező) berendezések (CPU, lemez vezérlő).
Szolgák (slaves) Passzív (végrehajtó) berendezések (lemez vezérlő, CPU). Sín vezérlő, sín vevő, sín adóvevő A sínhez kapcsolódó lapkák lényegében erősítők. Mester sín vezérlő (bus driver) sín. Sín sín vevő (bus receiver) szolga. Mester szolgáknál: sín adó-vevő (bus transceiver). A csatlakozás gyakran tri-state device vagy open collector wired-or segítségével történik. Sávszélesség (továbbítható bitek száma) / sec. Sávszélesség növelése: Gyorsítás: probléma a sín aszimmetria (skew), kompatibilitás. Sínszélesség: szélesebb sín drágább, kompatibilitás. Sokszorozott sín Sokszorozott (multiplexed) sín pl. először a cím van a sínen, majd az adat (ugyanazokon a vezetékeken). Ilyenkor a sín szélesség lényegesen csökken (olcsóbb, kevesebb láb szükséges a sínhez való csatlakozáshoz), csökken a sáv szélesség is, de nem olyan mértékben. Általában bonyolultabb a sín protokoll. Sín időzítés: szinkron, aszinkron sín, teljes kézfogás, sín ütemezés, sín műveletek Szinkron sín Aszinkron sín 5 100 MHz-es órajel van a sín egy vezetékén. Minden síntevékenység az órajelhez van igazítva. Minden sínművelet a ciklusidő (sín ciklus) egész számú többszöröséig tart: pl. 2.1 ciklusidő helyett 3 ciklusidő kell. A leglassabb eszközhöz kell a sín sebességét igazítani, a gyors eszköz is lassan fog működni. Minden eseményt egy előző esemény okoz! Nincs órajel, WAIT. MSYN# (kérés - Master SYNchronization), SSYN# (kész - Slave SYNchronization). Az aszinkron sín működése: akkor indulhat újabb tranzakció, ha SSYN# negált. Ugyanazon a sínen gyors és lassú mester - szolga pár is lehet. Teljes kézfogás (full handshake) Akkor indulhat, ha SSYN# negált! Mester: kívánságok beállítása, majd MSYN#, vár, Szolga: látja MSYN#-t: dolgozik, majd SSYN#, vár, Mester: látja SSYN# -t (kész), dolgozik, ha kell, majd negálja MSYN# -t, Szolga: látja MSYN# negálását, negálja SSYN# -t. Ugyanazon a sínen gyors és lassú mester - szolga pár is lehet. Sínütemezés (kiosztás) Ha egyszerre többen is igénylik a sínt (CPU, I/O vezérlő), akkor a sínütemező (bus arbiter) dönt. Általában I/O elsőbbséget kap (cikluslopás). Centralizált: (margaréta) láncolás (daisy chaining), egy vagy többszintű lehet. Ha van kérés és a sín szabad: sín foglalási engedély.
Néha további vezeték van az engedély fogadásának jelzésére (újabb sín kérés kezdődhet a sín használata közben). Decentralizált pl. 16 prioritású: 16 eszközhöz 16 kérés vonal, minden eszköz minden kérés vonalat figyel, tudja, hogy a saját kérése volt-e a legmagasabb prioritású. ha nem foglalt és be, akkor lefoglalhatja a sínt (ki negálása, foglalt beállítása). Sín műveletek Az eddigiek közönséges sín műveletek voltak. Blokkos átvitel: A kezdő memória címen kívül az adat sínre kell tenni a mozgatandó adatok számát. Esetleges várakozó ciklusok után ciklusonként egy adat mozgatása történik. Megszakítás kezelés: később tárgyaljuk részletesen. Több processzoros rendszerekben: olvasás módosítás visszaírás ciklus: szemafor. Universal Serial Bus Általános soros sín (USB) Igény: bármikor könnyen lehessen perifériát kapcsolni a géphez, ne kelljen szétszedni a gépet, újra bootolni, ne kelljen áramellátásról gondoskodni, Plug n Play (csatlakoztasd és működik) perifériák. Sokféle perifériát lehessen azonos módon csatlakoztatni, akár a gép működése közben, hardver ismeretek nélkül. USB (Universal Serial Bus - általános soros sín): Négy vezeték: adatok (2), tápfeszültség (1), föld (1). USB 1.0 1,5 Mbps (billentyűzet, egér, ) USB 1.1 12 Mbps (nyomtató, fényképezőgép, ) USB 2.0 480 Mbps (DVD lejátszó, ) A központi elosztó (root hub) 1 ms-onként üzenetekkel (frame, 3.54. ábra) kommunikál az eszközökkel. A frissen csatlakoztatott eszköz címe 0. Ha a központi elosztó tudja fogadni az eszközt, akkor egyedi címet (1-127) ad neki (konfigurálja). Memória műveletek 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. ALU és az adatút vezérlése, mikroutasítások Az adatút vezérlése 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. 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. Adatút és memória ciklus Adatút ciklus (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. 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. 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. Az A.S. Tanenbaum-féle Mic-1 és működése, az IJVM megvalósítása Mic-1 segítségével Mic-1 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. MPC új tartalmának kialakítása 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.: Cím Addr JAM Adatút vezérlő bitek 0x75 0x092 001... JAM Z =1 esetén a mikroprogram a 0x092 címen folytatódik, ha Z = 0,