Informatika alapjai-6 számítógép felépítése 1/8 számítógép alapfelépítése Nevezzük számítógépnek a következő kétféle elrendezést: : Harvard struktúra : Neumann struktúra kétféle elrendezés alapvetően egyformán működik: a PU (entral Processing Unit = központi egység) - általában sorban egymás után - előveszi az utasításokat a program memóriából és végrehajtja azokat az utasítás végrehajtása alapvetően háromféle lehet: o az adatmemóriában lévő adatokat manipulálja o az utasítások végrehajtásának sorrendjét módosítja o adatot hoz be a környezetből, vagy adatot visz ki. kétfajta elrendezés néhány tulajdonsága különbözik: Legfontosabb a Neumann János által megfogalmazott struktúrának az a tulajdonsága, hogy a program és az adatok ugyanabban a memóriában vannak, így a gép képes arra, hogy saját programját generálja, majd futtassa az első fázisban a program adat, melyet az akkor futó program, az úgynevezett fordító hoz létre, általában egy forrás szövegből, amit a programozó írt meg. Harvard struktúrában a program- és adatmemória szervezése különböző lehet a Harvard struktúrából adódik egy gyorsítási lehetőség: mialatt egy utasítás végrehajtása folyik, elő lehet venni a következő utasítást. Ezt pipe-line szervezésnek nevezik. Megjegyezzük, hogy Neumann struktúrájú számítógépekben is sokféle működés gyorsító technikát alkalmaznak például pipe line-t is. számítástechnikában mindkét féle elrendezésre számos példát találunk: Neumann struktúrájúak az úgynevezett univerzális számítógépek, például a P amelyet közismerten alkalmaznak saját programjának fejlesztésére is. mikrokontrollerek egy része például a PI-ek Harvard struktúrájúak. ( mikrokontrollerek alkalmazásával a következő előadásban foglalkozunk.) Mi a számítógép, mint eszköz? számítógép digitális áramkör, melyben sok-sok kapuáramkör és tárolóelem működik. Manapság a számítógép, vagy legalábbis annak PU-ja nagy integráltságú integrált áramkör (LSI). kapuk száma 10 4 10 8 Ezek az áramkörök jellegzetes struktúrákba vannak szervezve. Regiszter Tárolóelem sor, melyben adott számú (8, 16, 32...) egybites tároló van összefogva egy feladatra tipikusan egy szám vagy kód tárolására:
Informatika alapjai-6 számítógép felépítése 2/8 it 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Ezt általában egy dobozzal jelöljük, amelybe beírjuk a regiszter nevét. Például: kkumulátor Multiplexer Több adat közül egyet kiválaszt, és azt adja a kimenetre. z adatok általában több bitesek. z alábbi példában,,, 8 bitesek. z ábra a jelölést és a kapukból történő megvalósítást mutatja. Select dat 7 6 0 7 7 dat7 6 6 dat6... 0 0 dat0 7 6 0 Select Select Select Select Memória Nagyobb mennyiségű adat tárolására szolgáló egység. Szervezése: W (szélesség) x N (kapacitás) bit. Például 16 x 8 bites memória: memória sorait a ÍM azonosítja. memóriának egyszerre egy címét lehet írni, olvasni. számítógépekben alkalmazott memóriák általában sokkal nagyobbak: 10 3..10 8 x (8..64 bit) ím 7 6 6 4 3 2 1 0 Tartalom 0 0 0 0 1 0 0 0 1 11h 1 1 0 1 0 0 1 0 1 5h 2 1 1 0 0 1 0 0 1 9h 3 0 1 1 0 0 1 1 0 66h 4 0 0 0 0 0 0 0 0 00h 5 1 1 1 1 1 1 1 1 FFh 6 1 1 0 1 0 0 0 0 0h 7 1 1 1 0 0 0 0 1 E1h 8 0 0 0 1 0 0 0 1 10h 9 1 0 1 0 0 1 0 0 4h 10 1 1 0 0 1 0 0 0 8h 11 0 1 1 0 0 1 1 1 67h 12 0 0 0 0 0 0 0 1 01h 13 1 1 1 1 1 1 1 0 FEh 14 1 1 0 1 0 0 0 0 0h 15 1 1 1 0 0 0 0 0 E0h
Informatika alapjai-6 számítógép felépítése 3/8 számítógépek utasításrendszere Megpróbálunk kialakítani egy egyszerű hipotetikus PU struktúrát és utasításrendszert. Regiszter struktúra PU-ban regiszterek vannak: P (Program counter): ez tartalmazza a soron lévő utasítás címét. lapesetben tartalma minden utasítás elővétele után eggyel nő, így a PU az egymás utáni utasításokat veszi elő IR (Instruction register) ebbe kerül az elővett utasítás. (kkumulátor): ebben keletkezik az aritmetikai és logikai utasítások eredménye Flag-ek egybites regiszterek Zero: bebillen, ha egy művelet eredménye 0 arry: bebillen, ha két előjel nélküli számot összeadva az eredmény nagyobb, mint ami elfér: 129 10000001 (Mem) + 127 01111111 (arry=1) 256 (1)00000000 (a 256 nem ábrázolható 8 biten) Sign (előjel): előjeles bináris számábrázoláskor a legnagyobb bit az előjel. Sign flag az eredmény legnagyobb bitjét mutatja (ld. 1. előadás): +3 0 0000011 (Mem) + -6 1 1111010 (arry=1) -3 1 1111101 (a negatív számok magyarázata: [-x = NOT X + 1] -6 = NOT 6 + 1 = NOT(00000110) + 1 = 11111001 + 1 = 11111010-3 = NOT 3 + 1 = NOT(00000011) + 1 = 11111100 + 1 = 11111101) flagekkel általában a program futását vezéreljük (ld. később),, : segédregiszterek többek között indirekt memóriacímzésre és ciklusszámlálásra használjuk (Stack pointer): szerepét az utasítástípusoknál tisztázzuk Tételezzük fel, hogy minden regiszter egyforma hosszú, mondjuk 16 bit (az előző példák az egyszerűség kedvéért 8 bitesek voltak). Ezt nevezzük szónak (Word). számítógép blokkvázlata:
Informatika alapjai-6 számítógép felépítése 4/8 IR P(program counter) Mem IR(Instruction register) Mem Műveletvégző Vezérlő (akkumulátor) P IR Mem P IR ím Flagek(, S, Z) Memória dat írás dat olvasás Mem IR Legyen a memória is maximum 2^16 = 65536 szó hosszú, így a,, regiszterrrel megcímezhető. Utasítástípusok, megadásuk: Operandus nélküli: Mnemonik Például RET ;visszatérés szubrutinból Egy operandusos: Mnemonik OP1 Például IN ;az akkumulátor tartalmát eggyel növeli Két operandusos: Mnemonik OP1,OP2 Például MOVE,25 ;25-öt tölt az akkumulátorba (MOVE az utasítás mnemonikja, és 25 a két operandus. mozgatás iránya OP1 OP2. Magas szintű nyelven így jelölnénk: := 25 ) ímzési módok Közvetlen (immediate): az adat, amivel operálunk, az utasításban van. Például: MOVE,25 ;25-öt tölt az akkumulátorba Regiszter: az adatot, amivel operálunk, az utasításban megadott regiszterből veszi elő, vagy oda tárolja. regiszter,, vagy lehet, és ezt a továbbiakban Reg-gel jelöljük: Reg =. Például: MOVE,25 MOVE, ;25-öt tölt az akkumulátorba és a regiszterbe irekt: az adatot, amivel operálunk, az utasításban megadott című memóriából veszi elő, vagy oda tárolja. Például:
Informatika alapjai-6 számítógép felépítése 5/8 MOVE MOVE MOVE,25 ;25-öt tölt az akkumulátorba (32), ;z akkumulátor tartalmát a 32. memóriacímre tölti,12 ;12-t tölt az akkumulátorba,(32) ; 32. memóriacím tartalmát 25-öt hozzáad az akkumulátorhoz, így annak tartalma most 37 Indirekt: az adatot egy regiszter által meghatározott című memóriacímről veszi elő, vagy oda tárolja. Például: MOVE,32 MOVE,25 MOVE (), fenti utasítás sorozat 25-öt tesz a 32. címre Indexelt indirekt: a számot egy regiszter által meghatározott című memóriacímhez képest az utasításban megadott eltolással veszi elő. például: MOVE,32 MOVE,25 MOVE (+7), fenti utasítás sorozat a 39. címre tesz 25-öt. kisebb mikrokontrollerekben ilyen utasítás már nem is szokott lenni. dat struktúrák (rekordok) kezelésekor van jelentősége. Stack (Verem): a számítógépben adatok átmeneti tárolására szolgál. Ez a memória egy része, amin speciális címzési módot használnak. PUSH: az (Stack pointer) által meghatározott memóriacímre teszi egy regiszter tartalmát, és -t eggyel csökkenti, így az egymás utáni PUSH műveletek egymás fölé teszik az adatokat a memóriában. PUSH művelet általában regisztereknek a memóriában történő mentésére szolgál. Hipotetikus gépünkben kétféle PUSH utasítás lesz: PUSH Reg (PUSH, PUSH, PUSH, PUSH ) PUSH FLGS ;ez a flag-eket egy szóként menti a memóriába POP: ez a PUSH művelet fordítottja: -t eggyel csökkenti, majd az által meghatározott memóriacímről tölt egy regisztert. 3 POP utasításunk lesz: POP Reg POP FLGS ;ez a memória tartalmat szétosztja a flag-ek között Ha több regisztert mentünk PUSH-sal, akkor a POP-okat fordított sorrendben kell végrehajtani. Üres Stack PUSH PUSH Stack-ben és POP POP Üres stack datkezelő utasítások dat mozgatás következő adatmozgató utasításaink legyenek: MOVE Reg,immediate MOVE Reg,(mem.cím) MOVE,(Reg) MOVE,(Reg + constant) MOVE (mem.cím),reg MOVE (Reg), MOVE (Reg + constant),
Informatika alapjai-6 számítógép felépítése 6/8 ( regiszterek töltése és memóriába írása különböző címzési módokkal, z immediate töltésnek nyilvánvalóan nincs fordítottja. Indexelten és indirekten csak az akkumulátort lehet tölteni, vagy memóriába írni) MOVE, MOVE, (így a Stack Pointert az akkumulátorban kiszámított értékkel tudjuk egyszerűen tölteni, és oda tudjuk átmásolni) PUSH és POP utasítások is adatot mozgatnak! PUSH Reg POP Reg PUSH FLGS POP FLGS ritmetikai és logikai műveletek Ezek egy- vagy két operandusúak lehetnek. z egy operandusú műveletek magában az akkumulátorban történnek: NOT ; bitjeit bitenként negáljuk NEG ;(NOT ) + 1 ;a kettes komplemens szám -1-szeresét képzi két operandusú műveletek az akkumulátor és egy cím között mennek végbe, az eredmény az akkumulátorba kerül. címzési mód közvetlen, regiszter, direkt, indirekt vagy indexelt lehet. Ezt összefoglalva így jelöljük: OP2 = közvetlen Reg direkt indirekt indexelt. OP2 ; := + OP2 SU OP2 ; := OP2 OR OP2 ; bitjei := bitjei OR OP2 bitjei; bitenkénti VGY N OP2 XOR OP2 ; bitjei := bitjei N OP2 bitjei; bitenkénti ÉS ; bitjei := bitjei XOR OP2 bitjei; bitenkénti KIZÁRÓ VGY (0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 = 1, 1 XOR 1 = 0) Inkrementálás, dekrementálás Ezek is aritmetikai műveletek, de az összes regiszteren végrehajthatók: IN Reg ;eggyel növeli a regiszter tartalmát E Reg ;eggyel csökkenti a regiszter tartalmát. kkumulátor léptetés z akkumulátor bitjeit jobbra vagy balra lépteti. Többféle szokott belőle lenni: SL (Shift Left = léptetés balra: szorzás 2-vel) SR (Shift Right = léptetés jobbra: osztás 2-vel) SR (rithmetic Shift Right = aritmetikai léptetés jobbra: előjeles szám osztása 2-vel) RL (Rotate Left = Rotálás balra: a kicsurgó bitet visszaforgatjuk) RR (Rotate Right = Rotálás jobbra: a kicsurgó bitet visszaforgatjuk) RL (Rotate Left through arry= Rotálás balra a arry-n keresztül: a arry-ből is kicsurgó bitet forgatjuk vissza) RR (Rotate Right through arry= Rotálás jobbra a arry-n keresztül: a arry-ből is kicsurgó bitet forgatjuk vissza)
Informatika alapjai-6 számítógép felépítése 7/8 Látszik, hogy az akkumulátorból kicsorgó bit mindig a arrybe kerül, így a léptetés után meg lehet nézni, hogy mi csorgott ki. Nem részletezzük, hogy melyik léptetési mód mire használható. Vezérlésátadó utasítások vezérlésátadó utasítás hatására a program nem a soron lévő utasításon folytatódik. JUMP cím Feltétlen ugrás: a program a megadott címre ugrik JUMP feltétel, cím program a címre ugrik, ha a feltétel teljesül (Pl. JUMP arry,15) feltétel arry, Sign, Zero, Noarry, NoSign, NoZero lehet, azaz a flagek igaz, vagy hamis értékénél történhet ugrás LL cím Eljárás hívás z utasítás számláló tartalma a Stack tetejére kerül, majd a program a megadott címre ugrik. tulajdonképpen: PUSH P P cím RET Visszatérés az eljárásból. Visszaállítja a stack tetején mentett címet. Tulajdonképpen: POP P Szubrutin hívás: a LL és RET utasítás együttműködése e/kiviteli utasítások perifériának ugyanúgy címe van, mint a memória celláknak. Legyen két egyszerű I/O utasításunk: IN,(cím) OUT (cím),
Informatika alapjai-6 számítógép felépítése 8/8 Példaprogram 1. Egy memóriablokk átmásolása egy másik memória blokkba: cim1=100 cim2=200 darab=50 start: MOVE,cim1 MOVE,cim2 MOVE,darab ciklus: MOVE,() MOVE (), IN IN E JUMP NoZero, ciklus ;kész vagyunk! programban megjelenik néhány, az assembly programozásban szokásos elem. legfontosabb, hogy számokat szimbólumokkal helyettesítünk. im1, cim2, darab konstans adatok; start és ciklus pedig címek, melyeket szimbólikusan jelöltünk. pontosvesszővel kezdődő sor megjegyzés, melyet a programozó a program érthetőbbé tételéért írt oda. fenti ssembly programot az ssembler fordítja le a számítógép által végrehajtható kódra. Példaprogram 2 Maximális érték kikeresése egy memóriatartományban: cim1=100 darab=50 start: MOVE,cim1 MOVE,-32768 ;a maximum kezdőértéke a lehető ;legkisebb szám MOVE,darab ciklus: MOVE,() ;Elővesszük a soron lévő értéket SU, ;ha az eddigi maximum nagyobb, ;az eredmény negatív, nem kell ;cserélni JUMP Sign,címke MOVE,() ;Újra elővesszük a soron lévő ;értéket MOVE, ;Ez lesz az új maximum címke: IN E JUMP NZero, ciklus ;kész vagyunk!