A Számítógépek felépítése, működési módjai Mechatronika, Optika és Gépészeti Informatika Tanszék Kovács Endre tud. Mts. A Számítógépek felépítése, működési módjai Mikroprocesszoros Rendszerek Felépítése
Buszrendszer CPU OPERATÍV TÁR BUS Illesztő egységek ROM μ processzor RAM BUS Illesztő egységek I/O Interface 1. I/O Interface 2. . . . . . . I/O Interface n. Klaviatúra Monitor Perif. Egység n. Periféria egységek: Klaviatúra, Monitor, Printer, Egér, Szkenner, …… stb. Mérő perifériák, Ipari folyamatirányító rendszerek perifériái, ….stb.
CÍM BUS BUS BUS ADAT BUS CONTROL BUS Tápfeszültség t [ ns ] A0 A1 A2 MR MW CONTROL BUS I/O R I/O W ACK Tápfeszültség Pld: Operatív tár Írás H 1 CPU Cím érvényes Address L 0 1 CPU Adat érvényes Data 1 CPU MW 1 Slave ACK t [ ns ]
Operatív tár olvasás Memory Read MR Operatív tár írás Memory Write MW H 1 CPU Cím érvényes Address L 0 1 CPU Adat érvényes Data 1 CPU MW 1 Slave ACK t [ ns ] BUSZ CIKLUS BUSZ ciklusok: Operatív tár olvasás Memory Read MR Operatív tár írás Memory Write MW I/O olvasás I/O Read IOR I/O írás I/O Write IOW IT vektor beolvasás DMA ciklusok Handshake jelpár: MW-ACK
Bináris Decimális Hexadecimális 27 26 25 24 23 22 21 20 183 1 1 1 1 1 1 1 1 1 1 B7 23 22 21 20 23 22 21 20 1 1 1 1 1 1 1 2 3 . 9 10 A 11 B 12 C 13 D 14 E 15 F B 7 1 2 3 . 9 00 . . . . . . . . . 1 1 1 1 1 1 1 1 255 FF
Operatív tár Gépi szó hossza A byte egész számú többszöröse. 8, 16, 32, 64, 128 bites gépi szó. (Arithmetika) Címezhető legkisebb egység Külön címmel rendelkező (külön elérhető memória regiszter. Pld. byte Operatív tár mérete Memóriaregiszterek száma byte-ban. RAM Random Access Memory ROM Read-Only Memory Technológia MOS-FET Dinamikus memória 0000 : 00 0001 : B7 0002 : 3F 0003 : A1 . . . . . . FFFF : 00 Pld: 64 Kbyte
Mikroprocesszor belső felépítése Központi vezérlő egység Arithmetikai egység CPU fő elemei: • Vezérlő egység: • utasítás számláló (PC, IP), • utasítás regiszter (IR), • akkumulátor (ACC), • vezérlő jelek (órajel, IT, stb.) • ALU: aritmetikai és logikai műveletek, feltétel vizsgálat • Regiszterek: általános célú, státusz, címzés: szegmens, index, stb. • belső busz, memória címregiszter, memória adatregiszter
BUSZ Meghajtó interface
A μ processzoros rendszer regiszter modellje (részlet) RAM térkép: Regisztertömb : 0200 : LDA /3A/ 0201 : Addr L /00/ A : 00 04 F : 0202 : Addr H /20/ B : 00 C : 00 0203 : ADD /87/ Vezérlő/ Utasítás dekóder 00 D : E : 0204 : Addr L /00/ 0205 : Addr H /30/ 00 H : L : 0206 : STA /32/ 0207 : Addr L /00/ LDA /3A/ 0208 : Addr H /40/ PC : 0200 0202 0201 0203 . . . SP : 2000 : 04 . . . . . . További 2db byte 3000 : 05 Addr : 20 00 . . . 4000 : -- . . . Regisztermodell: • A: Akkumulátor, • B,C,D,E,H általános célú regiszterek, • PC: utasítás számláló regiszter (IR), • SP: Stack pointer, ……….. FFFF : -- Fontos !! Az utasítás felhozatala után a PC a soronkövetkező utasítás első byte-jára mutat.
A gépi kódú program Assembly nyelvű program: ………….. LDA 2000; ADD 3000; Fordítási folyamat gépi kódú program STA 4000; (compiler, linker) …………… Utasításkészlet Adatmozgató utasítások Arithmetikai / Logikai utasítások Vezérlésátadó utasítások (feltétel nélküli és feltételes ugrás) Szubrutinhívás I/O utasítások Különleges utasítások (IT vezérlése, NOP …..)
PC=0206, Akkumulátor: 09 . . . . . . . . . . . . RAM térkép: 1. Utasítás: Utasítás felhozatal: PC=0200 Buszciklus MR, addr: 0200, data: 3A Buszciklus MR, addr: 0201, data: 00 Buszciklus MR, addr: 0202, data: 20 Utasítás dekódolás [ A (2000) ] Végrehajtás: Buszciklus MR, addr: 2000, data: 04 PC=0203, Akkumulátor: 04 RAM térkép: 0200 : LDA /3A/ 0201 : Addr L /00/ 1. utasítás 0202 : Addr H /20/ 0203 : ADD /87/ 0204 : Addr L /00/ 2. Utasítás: Utasítás felhozatal: PC=0203 Buszciklus MR, addr: 0203, data: 87 Buszciklus MR, addr: 0204, data: 00 Buszciklus MR, addr: 0205, data: 30 Utasítás dekódolás [ A = A + (3000) ] Végrehajtás: Buszciklus MR, addr: 3000, data: 05 ALU A = A + 05 PC=0206, Akkumulátor: 09 2. utasítás 0205 : Addr H /30/ 0206 : STA /32/ 0207 : Addr L /00/ 3. utasítás 0208 : Addr H /40/ . . . 2000 : 04 . . . 3000 : 05 . . . 3. Utasítás: Utasítás felhozatal: PC=0206 Buszciklus MR, addr: 0206, data: 32 Buszciklus MR, addr: 0207, data: 00 Buszciklus MR, addr: 0208, data: 40 Utasítás dekódolás [ A --> (4000) ] Végrehajtás: Buszciklus MW, addr: 4000, data: 09 PC=0209, Akkumulátor: 09 4000 : 09 . . . FFFF : --
Az ugrás (feltétel nélküli ugrás) utasítás végrehajtása - 1. Utasítás: Utasítás felhozatal: PC=0280 Buszciklus MR, addr: 0280, data: „JUMP” Buszciklus MR, addr: 0281, data: 00 Buszciklus MR, addr: 0282, data: 50 PC=0283 Utasítás dekódolás [ PC 5000 ] Végrehajtás: PC=5000 025A : Program kezdete 0280 : JMP 0281 : 00 JUMP utasítás 0282 : 50 0283 : . Nem tároltuk azt az információt, hogy ‘honnan ugrottunk az új címre !! 5000 : LDA /3A/ Addr L /00/ Addr H /20/ - Program vége Feltételes ugró utasítás
A feltételes ugrás utasítás végrehajtása A FLAG (állapotjelző) szerepe: 027F : „CMPA” 0280 : JIZ F : 0281 : 00 0282 : 50 0283 : S Z - AC - P - CY . 1 S: Előjel Z: Zéró AC: Kiegészítő átviteljelző Auxiliary Carry Flag P: Paritásjelző CY: Átviteljelző Carry Flag 5000 : JIZ Utasítás: Utasítás felhozatal: PC=0280 Buszciklus MR, addr: 0280, data: „JIZ” Buszciklus MR, addr: 0281, data: 00 Buszciklus MR, addr: 0282, data: 50 PC=0283 Utasítás dekódolás Ha igaz akkor [ PC < 5000 ] Végrehajtás: Ha Z=1 PC=5000 Ha Z=0 PC=0283 NEM VÁLTOZIK! Az utasításkészlet leírása meghatározza, hogy mely utasítások melyik FLAG-eket állítják.
A STACK Szükségessége az Elméleti Számítástudomány eredményeiből következik. A stack (verem) a memóriában helyezkedik el, mérete és helye (kezdőcíme) a programból meghatározható. Stack kezelő utasítások: PUSH, POP 9000 : - A stack kezdőcímét a programban értékadó utasítással állítjuk be. 9001: F7 SP : 9003 9002 : D3 9003 : - 9004 : - B : D3 C : F7 Példa: PUSH BC Végrehajtás előtt: SP=9003, B=D3, C=F7 SP=SP-1, B regiszter tartalmának beírása az op. tárba SP=SP-1, C regiszter tartalmának beírása az op. tárba Végrehajtás után: SP=9001, B=D3, C=F7, (9002)=D3, (9001)=F7
A Szubrutinhívó utasítás végrehajtása (CALL, RET utasítás pár) Paraméterátadás: pld: y=f(x) ->hol található x Címkidolgozás: hol kezdődik az alprogram Visszatérési lehetőség biztosítása >STACK - 025A : Program kezdete CALL Utasítás: Utasítás felhozatal: PC=0280 Buszciklus MR, addr: 0280, data: „CALL” Buszciklus MR, addr: 0281, data: 00 Buszciklus MR, addr: 0282, data: 50 PC=0283 Utasítás dekódolás Végrehajtás: PC -> Stack (Push jellegű művelet) PC=5000 0280 : CALL 0281 : 00 CALL 5000 0282 : 50 0283 : . RET Utasítás: Utasítás felhozatal: PC=503D Buszciklus MR, addr: 503D, data: „RET” PC=503E Utasítás dekódolás Végrehajtás: PC <- Stack (Pop jellegű művelet), PC=0283 5000 : Szubrutin kezdete Szubrutin 503D : RET 503E : Program vége
ZH !!! Egy főprogramhoz több szubrutin is tartozhat. Egy szubrutinon belül meghívhatunk egy másik szubrutint ? Ebben az esetben STACK tartalma hogyan alakul ? Elvileg végtelen számú szubrutin ágyazódhat egymásba ?
Az Interrupt (A Program megszakítása)_1 IT ok: A Folyamatban rendkívüli esemény történt, azonnal reagálni kell, el kell zárni a gázcsapot. IRQ1: Interrupt request, (Megszakítás igény) jelentkezése. A BUS egyik Control vezetéke. IT Rutin1: Interrupt lekezelő rutin, amelynek haladéktalanul le kell futnia, az I/O interfacen lévő regiszter megfelelő bitjét 0-ra állítva (az OUT-put rendszer szervói segítségével el kell zárnia a mágnes szelepet, majd vissza kell térni a főprogramba, oda ahol a megszakítás előtt a programvégrehajtás tartott. μ processzor OPERATÍV TÁR IRQ1 . . . . . . I/O Interface 1. IT ok1 Érzékelők: Túlnyomas érzékelő ………….. Beavatkozók: Mágnesszelep ………….. IPARI FOLYAMAT
Az Interrupt (A Program megszakítása)_2 - Szükségessége Címkidolgozás: hol kezdődik az IT kezelő alprogram Vezérlés: visszatérési lehetőség biztosítása >STACK Egymásba ágyazódó IT-k IT Prioritás rendszer kialakítása 025A : Főprogram kezdete 0280 : LDA /3A/ Főprogram 0281 : Addr L /00/ Az IT jelentkezése: Előre nem tervezhető időpontban. ( A program futásához asszinkron.) Végrehajtás lépései: Az éppen végrehajtás alatt álló utasítást befejezni. A PC ekkor a soron következő utasításra mutat. Ezt az értéket (op.tár címet elmenteni a STACK-be. Címkidolgozás: Vezérlés: Visszatérés a főprogramba. 0282 : Addr H /20/ 0283 : Főprogram vége . 5000 : IT Rutin1 kezdete IT Rutin1 503D : RETURN IT 503E :
Az Interrupt (A Program megszakítása)_3 (címkidolgozás, vezérlés) 0000 : IT UGRÁSI IT regiszter IT vektor IT rutin1 kezdőcíme PC=5000 00 42 TÁBLA Program PC Az IT ekkor jelentkezik, PC->STACK VEKTOR I/O Interface 1. IT Rutin1 kezdete IT Rutin1 PC<-STACK RETURN IT