Informatika alapjai-6 A számítógép felépítése
1/8
A számítógép alapfelépítése Nevezzük számítógépnek a következ! kétféle elrendezést: A: Harvard struktúra B: Neumann struktúra
A kétféle elrendezés alapvet!en egyformán m)ködik: • a CPU (Central 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. A 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. A 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 PC – amelyet közismerten alkalmaznak saját programjának fejlesztésére is. • A mikrokontrollerek egy része – például a PIC-ek – Harvard struktúrájúak. (A mikrokontrollerek alkalmazásával a következ! el!adásban foglalkozunk.)
Mi a számítógép, mint eszköz? A 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 CPU-ja nagy integráltságú integrált áramkör (LSI). A kapuk száma 104…108 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 A számítógép felépítése Bit 15
14
13 12
11
10
9
8
7
6
5
4
3
2/8 2
1
0
Ezt általában egy dobozzal jelöljük, amelybe beírjuk a regiszter nevét. Például: Akkumulátor Multiplexer Több adat közül egyet kiválaszt, és azt adja a kimenetre. Az adatok általában több bitesek. Az alábbi példában A, B, C, D 8 bitesek. Az ábra a jelölést és a kapukból történ! megvalósítást mutatja. A B C D
Adat
MX
Select A7
A6
B7
B6
C7
Adat7
D7
A0 Adat6 ...
C6 D6
B0 Adat0
C0 D0
Select A Select B Select C Select D
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: A memória sorait a CÍM azonosítja. A memóriának egyszerre egy címét lehet írni, olvasni. A számítógépekben alkalmazott memóriák általában sokkal nagyobbak: 103..108 x (8..64 bit)
Cím 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B7 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1
B6 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1
B6 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
B4 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0
B3 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0
B2 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0
B1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0
B0 Tartalom 1 11h 1 A5h 1 C9h 0 66h 0 00h 1 FFh 0 D0h 1 E1h 1 10h 0 A4h 0 C8h 1 67h 1 01h 0 FEh 0 D0h 0 E0h
Informatika alapjai-6 A számítógép felépítése
3/8
A számítógépek utasításrendszere Megpróbálunk kialakítani egy egyszer) hipotetikus CPU struktúrát és utasításrendszert. Regiszter struktúra A CPU-ban regiszterek vannak: • PC (Program counter): ez tartalmazza a soron lév! utasítás címét. Alapesetben tartalma minden utasítás el!vétele után eggyel n!, így a CPU az egymás utáni utasításokat veszi el! • IR (Instruction register) ebbe kerül az el!vett utasítás. • A (Akkumulá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 Carry: bebillen, ha két el!jel nélküli számot összeadva az eredmény nagyobb, mint ami elfér: A 129 10000001 (Mem) + 127 01111111 A (Carry=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. A Sign flag az eredmény legnagyobb bitjét mutatja (ld. 1. el!adás): A +3 0|0000011 (Mem) + -6 1|1111010 A (Carry=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) A flagekkel általában a program futását vezéreljük (ld. kés!bb) • B, C, D: segédregiszterek – többek között indirekt memóriacímzésre és ciklusszámlálásra használjuk • SP (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). A számítógép blokkvázlata:
Informatika alapjai-6 A számítógép felépítése IR
4/8
PC(program counter) IR(Instruction register)
Mem A B C D Mem
MX
Vezérl# M veletvégz#
A(akkumulátor) PC IR B C D SP Mem
PC IR B C D SP
Flagek(C, S, Z) B MX
C D A
SP Adat írás
MX
Cím
MX
Memória Adat olvasás
IR A B C D SP
Mem
Legyen a memória is maximum 2^16 = 65536 szó hosszú, így a B, C, D 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 INC A ;az akkumulátor tartalmát eggyel növeli Két operandusos: Mnemonik OP1,OP2 Például MOVE A,25 ;25-öt tölt az akkumulátorba (MOVE az utasítás mnemonikja, A és 25 a két operandus. A mozgatás iránya OP1 OP2. Magas szint) nyelven így jelölnénk: A := 25 )
Címzési módok • •
•
Közvetlen (immediate): az adat, amivel operálunk, az utasításban van. Például: MOVE A,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. A regiszter A, B, C vagy D lehet, és ezt a továbbiakban Reg-gel jelöljük: Reg = A|B|C|D. Például: MOVE A,25 MOVE B,A ;25-öt tölt az akkumulátorba és a B regiszterbe Direkt: 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 A számítógép felépítése
5/8
MOVE MOVE MOVE ADD
•
•
•
A,25 ;25-öt tölt az akkumulátorba (32),A ;Az akkumulátor tartalmát a 32. memóriacímre tölti A,12 ;12-t tölt az akkumulátorba A,(32) ;A 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 B,32 MOVE A,25 MOVE (B),A A 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 C,32 MOVE A,25 MOVE (C+7),A A fenti utasítás sorozat a 39. címre tesz 25-öt. A kisebb mikrokontrollerekben ilyen utasítás már nem is szokott lenni. Adat 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 SP (Stack pointer) által meghatározott memóriacímre teszi egy regiszter tartalmát, és SP-t eggyel csökkenti, így az egymás utáni PUSH m)veletek egymás fölé teszik az adatokat a memóriában. A 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 A, PUSH B, PUSH C, PUSH D) PUSH FLAGS ;ez a flag-eket egy szóként menti a memóriába • POP: ez a PUSH m)velet fordítottja: SP-t eggyel csökkenti, majd az SP által meghatározott memóriacímr!l tölt egy regisztert. 3 POP utasításunk lesz: POP Reg POP FLAGS ;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 A PUSH B
Stack-ben A és B
POP B POP A
B A
SP
SP SP
Adatkezel utasítások Adat mozgatás A következ! adatmozgató utasításaink legyenek: MOVE Reg,immediate MOVE Reg,(mem.cím) MOVE (mem.cím),Reg MOVE A,(Reg) MOVE (Reg),A MOVE A,(Reg + constant) MOVE (Reg + constant),A
Üres stack
Informatika alapjai-6 A számítógép felépítése
6/8
(A regiszterek töltése és memóriába írása különböz! címzési módokkal, Az 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 SP,A MOVE A,SP (így a Stack Pointert az akkumulátorban kiszámított értékkel tudjuk egyszer)en tölteni, és oda tudjuk átmásolni) A PUSH és POP utasítások is adatot mozgatnak! PUSH Reg POP Reg PUSH FLAGS POP FLAGS Aritmetikai és logikai m,veletek Ezek egy- vagy két operandusúak lehetnek. Az egy operandusú m)veletek magában az akkumulátorban történnek: NOT A ;A bitjeit bitenként negáljuk NEG A ;(NOT A) + 1 ;a kettes komplemens szám -1-szeresét képzi A 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. A 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. ADD OP2 ;A := A + OP2 SUB OP2 ;A := A OP2 OR OP2 ;A bitjei := A bitjei OR OP2 bitjei; bitenkénti VAGY AND OP2 ;A bitjei := A bitjei AND OP2 bitjei; bitenkénti ÉS XOR OP2 ;A bitjei := A bitjei XOR OP2 bitjei; bitenkénti KIZÁRÓ VAGY (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: INC Reg ;eggyel növeli a regiszter tartalmát DEC Reg ;eggyel csökkenti a regiszter tartalmát. Akkumulátor léptetés Az 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) ASR (Arithmetic 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)
RLC (Rotate Left through Carry= Rotálás balra a Carry-n keresztül: a Carry-b!l is kicsurgó bitet forgatjuk vissza)
RRC (Rotate Right through Carry= Rotálás jobbra a Carry-n keresztül: a Carry-b!l is kicsurgó bitet forgatjuk vissza)
Informatika alapjai-6 A számítógép felépítése
7/8
Látszik, hogy az akkumulátorból kicsorgó bit mindig a Carrybe 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 A 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 A program a címre ugrik, ha a feltétel teljesül (Pl. JUMP Carry,15) A feltétel Carry, Sign, Zero, NoCarry, NoSign, NoZero lehet, azaz a flagek igaz, vagy hamis értékénél történhet ugrás CALL cím Eljárás hívás Az utasítás számláló tartalma a Stack tetejére kerül, majd a program a megadott címre ugrik. tulajdonképpen: PUSH PC PC cím RET Visszatérés az eljárásból. Visszaállítja a stack tetején mentett címet. Tulajdonképpen: POP PC Szubrutin hívás: a CALL és RET utasítás együttm)ködése
Be/kiviteli utasítások A perifériának ugyanúgy címe van, mint a memória celláknak. Legyen két egyszer) I/O utasításunk: IN A,(cím) OUT (cím),A
Informatika alapjai-6 A 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 MOVE MOVE ciklus: MOVE MOVE INC INC DEC JUMP ;kész vagyunk!
B,cim1 C,cim2 D,darab A,(B) (C),A B C D NoZero, ciklus
A programban megjelenik néhány, az assembly programozásban szokásos elem. A legfontosabb, hogy számokat szimbólumokkal helyettesítünk. Cim1, cim2, darab konstans adatok; start és ciklus pedig címek, melyeket szimbólikusan jelöltünk. A pontosvessz!vel kezd!d! sor megjegyzés, melyet a programozó a program érthet!bbé tételéért írt oda. A fenti Assembly programot az Assembler 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 MOVE MOVE ciklus: MOVE SUB JUMP MOVE MOVE címke: INC DEC JUMP ;kész vagyunk!
B,cim1 C,-32768 ;a maximum kezd5értéke a lehet5 ;legkisebb szám D,darab A,(B) ;El5vesszük a soron lév5 értéket A,C ;ha az eddigi maximum nagyobb, ;az eredmény negatív, nem kell ;cserélni Sign,címke A,(B) ;Újra el5vesszük a soron lév5 ;értéket C,A ;Ez lesz az új maximum B D NZero, ciklus