37
µP 8080/85

mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85

Page 2: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [2] CPU 8085:

interná 8-bitová dátová zbernica

8-bitový akumulátor (register A)

8-bitový register B 8-bitový register C

8-bitový register E

8-bitový register H

8-bitový register D

8-bitový register L

16-bitový register SP (stack pointer – register zásobníka)

16-bitový register PC (program counter)

16-bitový budič adresnej zbernice (A15 … A0)

8-bitový register inštrukcií (IR)

dekóder inštrukcií a generátor

strojových cyklov

aritmetická a logická jednotka (ALU)

register príznakov

univerzálne registre 8-bitový

prechodný register

riadiaca jednotka

8-bitový obojsmerný budič dátovej zbernice (D7 … D0)

ovládanie prerušení sériový vstup/výstup

Page 3: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [3] Mikroprocesor (µP) je zariadenie synchronizované hodinovým signá-lom a všetky jeho aktivity sú striktne podriadené tomuto taktovaniu. Perióda hodinového signálu (T) predstavuje základnú časovú jednotku pre činnosť mikroprocesora a nazývame ju hodinovým cyklom. Pre µP 8085 bola horná hranica frekvencie hodinového signálu (f=1/T) približne 3MHz. Činnosť µP pozostáva z opakovaného vykonávania neveľkého počtu typických úkonov (napr. zápis údajov do pamäti, čítanie obsahu pamäti, čítanie inštrukcií z pamäti a pod.) . Tieto činnosti nazývame strojovými cyklami procesora (M). Jednotlivé strojové cykly sa vykonajú počas presne definovaného počtu hodinových cyklov.

T

Page 4: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [4] Užívateľom napísaný program pre mikroprocesor pozostáva z jednotlivých inštrukcií. µP 8085 vykonáva inštrukcie postupne jednu za druhou v takom poradí, v akom ich programátor napísal. Dobu vykonania jednotlivých inštrukcií nazývame inštrukčným cyklom a ten pozostával z presne definovaného počtu strojových cyklov.

T M1 M2 M3 M4

strojový cyklus

inštrukčný cyklus

hodinový cyklus

Page 5: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [5] µP 8080/8085 boli predstaviteľmi tzv. 8-bitovej architektúty mikro-procesorov. Ich základnou pamäťovou jednotkou je 8–bitová slabika (byte): Slabiku tvorí osem usporiadaných a navzájom nezávislých bitov. Jediné, čo sa v skutočnosti dá do slabiky uložiť je (ľubovoľná) kombiná-cia núl a jednotiek v rozsahu: od: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 …………… do: 1 1 1 1 1 1 1 1 (= 28 = 256 rôznych kombinácií).

b0 b1 b2 b3 b4 b5 b6 b7

Page 6: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [6] V µP 8080/8085 je zabudovaných sedem univerzálnych 8-bitových registrov {A, B, C, D, E, H, L}. ktoré slúžia predovšetkým na operatívne ukladanie medzivýsledkov pri riešení zadanej úlohy. Vlastné inštrukcie výpočtového programu a všetky údaje užívateľa sú uložené mimo mikroprocesora – v operačnej pamäti. Prístup k pamäti sa deje pomocou dvoch zberníc: adresnej a dátovej. Adresná zbernica je 16-bitová (A15, A14, … A1, A0) a je jednosmerná – adresy vysiela iba mikroprocesor smerom k periférnym zariadeniam. Dátová zbernica bola 8-bitová (D7, D6, … D1, D0) a je obojsmerná – znamená to, že údaje môžu ísť z mikroprocesora smerom k periférnym zariadeniam – alebo naopak. Operačná pamäť má (podobne ako registre) 8-bitovú štruktúru a slabiky pamäti majú svoju jedinečnú 16-bitovú adresu. Adresný pries-tor (t.j. rozsah možných adries) siaha od {0000000000000000} po {1111111111111111} čo je 216 = 65536 rôznych adries.

Page 7: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [7] Ak procesor potrebuje styk s pamäťou musí na adresnú zbernicu vyslať konkrétnu 16-bitovú adresu tej slabiky, s ktorou chce komunikovať a pomocou dvoch riadiacich signálov (R – read) alebo (W – write) určí smer prenosu informácie po (obojsmernej) dátovej zbernici. Ten je daný z pohľadu procesora – ak sa informácia (jedna slabika) prenáša z procesora do pamäti hovoríme o zapisovaní (write) ak je smer opačný – procesor číta (read) informáciu z pamäti. Mikroprocesor 8080/85 mal len jediný, neštruktúrovaný homogénny adresný priestor – t.j. záležalo iba na programátorovi, do ktorej oblasti pamäti uložil jednotlivé informácie (samotný program, svoje údaje, …). To samozrejme zo sebou prinášalo aj nebezpečenstvo poškodenia (prepísania) dôležitých údajov alebo i programu. Moderné procesory majú už (oveľa väčšiu) operačnú pamäť systémovo rozdelenú na neprekrývajúce sa oblasti, ktoré sú vyhradené pre jediný typ zapísaných údajov a tak sa minimalizuje možnosť ich poškodenia.

Page 8: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [8] Inštrukcie (príkazy) pre procesor sa zapisujú do slabík. µP 8085 pozná tri dĺžky inštrukcií: Prvá (alebo jediná) slabika inštrukcie vždy obsahuje tzv. operačný kód inštrukcie, prípadná druhá a tretia slabika obsahujú adresu alebo údaje. Inštrukcie musia byť uložené v pamäti v súvislom bloku za sebou idúcich slabík (bez medzier). Keďže pre operačný kód je vyhradená iba jedna slabika, µP 8085 pozná maximálne 256 rôznych inštrukcií. Ako prvú predstavu o inštrukciách a ich formáte obráťme sa k schéme µP 8085. Vidíme, že programátor má k dispozícii sedem univerzálnych 8-bitových registrov A, B, C, D, E, H, L.

troj-slabičná:

op. kód

op. kód

op. kód

dvoj-slabičná:

jedno-slabičná:

Page 9: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [9] Medzi inštrukcie procesora patrí možnosť naplniť každý z týchto registrov konštantnou (8-bitovou) hodnotou, ktorá je súčasťou inštrukcie. Napríklad inštrukcia, ktorou zapíšeme hodnotu 2110 = 000101012 do registra C má tvar: 00001110 ← operačný kód inštrukcie 00010101 ← hodnota, ktorá sa má zapísať Symbolicky znázorníme túto operáciu zápisom: (C) ← 00010101 okrúhle zátvorky () nahrádzajú v týchto zápisoch slovíčko "obsah", takže zápis čítame ako: "binárnou hodnotou 00010101 nahradíme doterajší obsah registra "C" alebo kratšie: hodnotu 00010101 uložíme (zapíšeme) do C. Všimnime si aj smer priradenia; dokumentácia procesorov od Intelu používa notáciu, keď cieľový operand je na ľavej strane priradenia. Vidíme, že táto inštrukcia je dvojslabičná.

Page 10: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [10] Spoznajme ešte jednu z inštrukcií mikroprocesora – prepísanie obsahu jedného univerzálneho registra do iného, napr. (B) ← (C) Súčasným obsahom registra "C" sa prepíše doterajší obsah registra "B" (obsah registra "C" sa nezmení). Operačný kód tejto inštrukcie je: 01000001 Inštrukcia je jednoslabičná. Predpokladajme, že náš program začína práve týmito dvoma inštrukciami a je v pamäti uložený od adresy "α", takže výpis obsahu pamäti, kde je program uložený by vyzeral:

adresa obsah

α 00001110 ← operačný kód inštrukcie

α+1 00010101 ← 8-bitový numerický údaj (data8)

α+2 01000001 ← operačný kód druhej inštrukcie

α+3 xxxxxxxx ← operačný kód nasledujúcej inštrukcie

Page 11: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [11] Na automatické riadenie behu programu využíva mikroprocesor svoj 16-bitový register PC (Program Counter). Na počiatku behu programu sa adresa prvej inštrukcie uloží do registra PC. (PC) ← α Toto prvé naplnenie PC registra robí spravidla operačný systém vtedy, keď užívateľ spúšťa program. Od tejto chvíle je už celý ďalší beh programu "v réžii" mikroprocesora. Každý inštrukčný cyklus začína špecifickým strojovým cyklom M1 (opcode fetch – privolanie inštrukcie). V rámci tohto cyklu sa obsah PC registra zobrazí na adresnej zbernici A15 … A0 a z pamäťovej bunky, ktorá má práve túto adresu sa jej obsah prenesie (po dátovej zbernici D7 … D0) do registra inštrukcií (IR) v mikroprocesore. Zároveň sa obsah PC (Program counter) registra zväčší o jednotku (1). (PC) ← (PC) + 1 Takúto navýšenie (o 1) urobí PC register po každom prenesení slabiky do procesora.

Page 12: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [12] K zápisu (PC) ← (PC) + 1 treba vysvetlenie: v priraďovacom zápise sa ako prvý vyhodnocuje výraz na pravej strane – a to s doterajšími ("starými") hodnotami premenných a až touto ("novou") hodnotou sa nahradí obsah cieľového operandu. Takže konkrétne pre našu situáciu: ak PC register obsahoval hodnotu " α " (adresu prvej inštrukcie programu) po prenesení obsahu tejto slabiky do registra IR sa zmení obsah PC registra na "α+1" – ukazuje teda na nasledujúcu slabiku programu uloženého v pamäti. V okamihu, keď je register inštrukcií (IR) naplnený operačným kódom inštrukcie, prichádza k slovu dekóder inštrukcií, ktorý rozpozná unikátny kód každej inštrukcie a vygeneruje postupnosť strojových cyklov, ktoré danú inštrukciu realizujú. Ak dekóder inštrukcií zistí, že inštrukcia je viacslabičná, generuje strojové kódy prenosu slabík pamäti do mikroprocesora.

Page 13: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [13] schématicky: Po tomto kroku je obsah PC registra už Dekodér inštrukcií vie, že táto inštrukcia je dvojslabičná, vydá preto pokyn na prenesenie ďalšej slabiky z operačnej pamäti do procesora.

adresa obsah

α 00001110

α+1 00010101

α+2 01000001

α+3 xxxxxxxx

(PC)≡α ⇒ A15 … A0

(IR)

(PC) ← (PC)+1

α+1

(PC)≡α+1 ⇒ A15 … A0 adresa obsah

α 00001110

α+1 00010101

α+2 01000001

α+3 xxxxxxxx (C)

(PC) ← (PC)+1

Page 14: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [14] Obsah PC registra je teraz už α+2 a ukazuje na adresu nasledujúcej inštrukcie. Po skončení inštrukčného cyklu prvej inštrukcie, začína nový inštrukčný cyklus opäť strojovým cyklom M1 – teda prenesením ďalšej slabiky z operačnej pamäti do (IR) – samozrejme, že to musí byť operačný kód druhej inštrukcie:

PC register má teraz už hodnotu α+3, takže ukazuje na slabiku s operačným kódom nasledujúcej inštrukcie. Druhá inštrukcia vykoná operáciu (B) ← (C) a ukončí svoj inštrukčný cyklus. Registre B a C majú teraz rovnaký obsah : 00010101.

adresa obsah

α 00001110

α+1 00010101

α+2 01000001

α+3 xxxxxxxx

(PC)≡α+2 ⇒ A15 … A0

(IR)

(PC) ← (PC)+1

Page 15: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [15] Tento postup sa opakuje pozdĺž celého programu uloženého v pamäti a zaručuje lineárne vykonávanie jednej inštrukcie za druhou v takom poradí, v akom sú zapísané v pamäti (o skokoch, ktoré umožňujú porušiť naznačené poradie vykonávania inštrukcií budeme hovoriť neskôr). [Poznámka] Iste Vás napadla otázka, ako mikroprocesor rozozná, čo obsahuje určitá slabika v pamäti? Zatiaľ sme spoznali dve alternatívy: inštrukcie a binárne hodnoty. Bežnou je ešte aj tretia možnosť – slabika obsahuje kód alfanumerického alebo zvláštneho znaku podľa kódovej tabuľky. Ako základná sa u súčasných mikroprocesorových systémov používa tabuľka ASCII (American Standard Code for Information Interchange).

Page 16: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [16] Z predchádzajúceho príkladu si vyberme napr. inštrukciu pre presun obsahu registra C do registra B: (B) ← (C) , ktorej operačný kód je 01000001. Ale ten istý bitový obraz bude mať aj slabika, ktorá obsahuje binárnu hodnotu 26+20=6510 a rovnako aj slabika, ktorá reprezentuje ASCII kód písmena "A". Ani procesor - a ani čo aj skúsený programátor nevedia z obsahu izolovanej slabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť iba v kontexte, v akom sa k danej slabike pristupuje. V našom príklade v celom bloku slabík od adresy "α" bude každá prvá slabika v rámci inštrukčného cyklu procesorom chápaná ako operačný kód inštrukcie a uložená do registra inštrukcií (IR). Druhá slabika prvej inštrukcie bude však rozpoznaná ako číselná hodnota a uložená do registra C. Je to dôsledok skutočnosti, že inštrukcia je dvojslabičná a jej druhá slabika musí byť 8-bitová binárna hodnota.

Page 17: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [17] ASCII kódová tabuľka (kódy v rozsahu 3210 – 12710)

32 48 0 64 @ 80 P 96 ` 112 p 33 ! 49 1 65 A 81 Q 97 a 113 q 34 " 50 2 66 B 82 R 98 b 114 r 35 # 51 3 67 C 83 S 99 c 115 s 36 $ 52 4 68 D 84 T 100 d 116 t 37 % 53 5 69 E 85 U 101 e 117 u 38 & 54 6 70 F 86 V 102 f 118 v 39 ' 55 7 71 G 87 W 103 g 119 w 40 ( 56 8 72 H 88 X 104 h 120 x 41 ) 57 9 73 I 89 Y 105 i 121 y 42 * 58 : 74 J 90 Z 106 j 122 z 43 + 59 ; 75 K 91 [ 107 k 123 { 44 , 60 < 76 L 92 \ 108 l 124 | 45 - 61 = 77 M 93 ] 109 m 125 } 46 . 62 > 78 N 94 ^ 110 n 126 ~ 47 / 63 ? 79 O 95 _ 111 o 127 �

Page 18: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [18] Predchádzajúci príklad nás poučí aj o tom, že dovnútra skupiny dvoch alebo troch slabík, ktoré tvoria jednu inštrukciu, nesmieme vkladať iné slabiky (ani prázdne). Ak by sme (hoci aj omylom) za kód inštrukcie na adresu "α+1" vložili slabiku so samými nulami program by prebehol nechceným spôsobom: ⇒ • z adresy "α" by sa načítala prvá inštrukcia, ktorú by procesor správne vyhodnotil ako príkaz uložiť nasledujúcu slabiku do registra C; • nasledujúca slabika je binárna hodnota 0 - tá sa uloží do registra C; • ďalšiu slabiku procesor považuje za operačný kód nasledujúcej

inštrukcie a kód 00010101 patrí inštrukcii, ktorá zníži o 1 - hodnotu uloženú v registri D (D) ← (D) – 1

a túto inštrukciu sme vôbec do nášho programu nevložili!

adresa obsah

α 00001110

α+1 00000000

α+2 00010101

α+3 01000001

Page 19: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [19] Hexadecimálna číselná sústava – ako prirodzený komunikačný prostriedok pre oblasť informačných technológií.

v hexadecimálnej sústave zapisujeme obsah 8-bitovej slabiky ako dvojciferný údaj: napr. operačné kódy: 000011102 → 0E16

numerické hodnoty: 000101012 → 1516

Korektný zápis čísla v šestnástkovej sústave obsahuje na pravom okraji znak "H" a ak prvý znak je písmeno, potom pred ním znak nula "0", napríklad: 0EH, 15H, 0ABH, 0FFH.

[2] [16] [2] [16] [2] [16] [2] [16]

0000 0 0100 4 1000 8 1100 C

0001 1 0101 5 1001 9 1101 D

0010 2 0110 6 1010 A 1110 E

0011 3 0111 7 1011 B 1111 F

Page 20: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [20] a ešte raz upravená ASCII tabuľka: [10] [16] znak [10] [16] znak [10] [16] znak [10] [16] znak [10] [16] znak [10] [16] znak 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B { 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C | 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D } 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~ 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F �

Page 21: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [21] 16 bitová adresná zbernica umožňuje priamy prístup k adresám v rozsahu 0H – FFFFH [dekadicky 0 – 65 535; = 64 kB (kiloByte)]. Prijatie 16-kovej číselnej sústavy prinieslo zmeny v inžinierskom zápise veľmi veľkých a veľmi malých hodnôt (napr. 5,5.109, 1,8.10-5) a aj v pomenovaní násobkov hodnôt: (103) kilo-, (106) mega-, (109) giga-, (10-3) mili-, (10-6) mikro-, (10-9) nano-.

n 2n n 2n n 2n 0 1

1 2 11 2048 21 2097152 2 4 12 4096 22 4194304 3 8 13 8192 23 8388608 4 16 14 16384 24 16777216 5 32 15 32768 25 33554432 6 64 16 65536 26 67108864 7 128 17 131072 27 134217728 8 256 18 262144 28 268435456 9 512 19 524288 29 536870912

10 1024 20 1048576 30 1073741824

Page 22: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [22] Z tabuľky mocnín základu 2 vidíme, že 210=1024 je najbližšia hodnota k číslu 100010 – a preto túto spájame s násobiacou predponou kilo-; podobne 220=1048576 je hodnota pre predponu Mega- a 230=1073741824 je hodnotou predpony Giga-. Potom je skutočne 64 kB = 64*1024 = 65 536.

Page 23: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [23] Strojový kód vs. assembler Mikroprocesor „rozumie“ iba postupnosti núl a jednotiek, ktoré číta z pamäti vo forme inštrukcií. Takýto formát je veľmi "neprívetivý" k užívateľovi. Preto paralelne s kódmi inštrukcií existuje aj programovací jazyk najnižšej úrovne, ktorý operačné kódy inštrukcií nahrádza mnemotechnickými skratkami – tzv. asembler. Príkazy asembleru majú zrozumiteľný tvar, ktorý vyjadruje funkciu príslušnej inštrukcie. Asembler je vo vzťahu k strojovému kódu tzv. jazykom 1:1. Znamená to, že jedna inštrukcia napísaná v asembleri "generuje" práve jednu strojovú inštrukciu. Samozrejme, program napísaný v asembleri sa pred spustením programu musí preložiť do strojového kódu. Túto činnosť vykonáva zvláštny program, ktorý býva súčasťou operačných systémov a voláme ho tiež asembler.

Page 24: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [24] Inštrukcie µP 8080/85 možno logicky zaradiť do piatich kategórií: • inštrukcie na presun údajov; • aritmetické inštrukcie; • logické inštrukcie; • inštrukcie na vetvenie programu; • zvláštne inštrukcie (práca so zásobníkom, vstupno/výstupné

inštrukcie a riadiace povely). Začneme skupinou povelov na presun údajov. symbolmi: r, r1, r2 budeme označovať jeden z univerzálnych registrov {A, B, C, D, E, H, L}

Page 25: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [25] Základnou inštrukciou tejto skupiny je asemblerovská inštrukcia

MOV r1, r2 (Move Register) ktorá realizuje operáciu (r1) ← (r2) "MOV" je mnemotechnický názov operácie – zrejme z anglického "move" a vykoná presun obsahu registra r2 (zdrojový register) do registra r1 (cieľový register). Obsah registra r2 ostane zachovaný. Samozrejme, že nie je cieľom nášho kurzu spoznať strojové kódy jednotlivých inštrukcií, ale špeciálne u tejto inštrukcie je tvar operač-ných kódov inštrukcií veľmi jednoduchý. Všetky inštrukcie "MOV" sú jednoslabičné. Adresácia (t.j. určenie, ktorý z registrov je zdrojový a ktorý cieľový) je priamo súčasťou inštrukcie. Na tento účel sú univerzálne registre "očíslované" trojbitovým kódom:

Page 26: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [26] Interné kódy registrov: "M" nie je názov žiadneho registra, ale je odkazom na pamäť (memory) – o využití tohto kódu budeme hovoriť o malú chvíľu. Operačné kódy inštrukcií "MOV" majú jednotnú štruktúru: DDD je trojciferný kód cieľového registra (destination) a SSS je takýto kód pre zdrojový register (source). Takže napr. inštrukcia: MOV A, E (A) ← (E) bude mať operačný kód 01111011 = 7BH (01112 = 716; 10112 = B16).

register kód register kód

B 000 H 100

C 001 L 101

D 010 M 110

E 011 A 111

0 1 D D D S S S

Page 27: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [27] Keďže procesor obsahuje sedem univerzálnych registrov – práve sme "minuli" 7x7 = 49 operačných kódov (z celkového počtu max. 256 rôznych kódov). Je pravdou, že kvôli jednoduchosti sú medzi nimi aj málo užitočné kódy typu (A) ← (A) MOV A, A ale aj tie sa niekedy dajú využiť na vytvorenie časovej medzery medzi inštrukciami. Tieto inštrukcie využívali tzv. priame adresovanie registrov – odvolávka na vybraný register bola priamo súčasťou operačného kódu inštrukcie (polia DDD a SSS). K inštrukciám "MOV"patrí aj 2x7 inštrukcií, u ktorých je jedným z operandov "pseudoregister" M (nesmú byť oba): MOV M, A alebo MOV C, M V tomto okamžiku prichádzame k tzv. nepriamemu adresovaniu.

Page 28: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [28] U nepriameho adresovania nie je v inštrukcii obsiahnutá adresa operandu, ktorý sa má podieľať na danej operácii, ale iba odvolávka na miesto, kde je táto adresa uložená. V prípade inštrukcií MOV r, M a MOV M, r je touto oblasťou dvojica 8-bitových univerzálnych registrov HL, ktoré sú teraz chápané spolu ako 16-bitový register a pojmú práve celú 16-bitovú adresu slabiky v pamäti, ktorá sa zúčastní prenosu údajov (ako zdrojová alebo cieľová oblasť). MOV r, M (r) ← ((HL)) MOV M, r ((HL)) ← (r) dvojica zátvoriek okolo pomenovania registrového páru "HL" je skutočne opodstatnená – hovorí, napr. v prvom prípade, že do registra "r" treba preniesť obsah toho pamäťového miesta (vonkajšie zátvorky), ktorého adresu nájdeme ako obsah registrového páru "HL"(vnútorné zátvorky). Pomocou tejto dvojice inštrukcií máme prístup k celému adresnému priestoru mikroprocesora.

Page 29: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [29] Inštrukcia MOV, u ktorej by bola ako zdrojovou tak aj cieľovou oblasťou slabika v operačnej pamäti neexistuje! Operačný kód, ktorý by podľa mechanizmu tvorby kódov MOV zodpovedal inštrukcii MOV M, M – teda kód čo je 76H je rezervovaný pre inštrukciu HLT – o ktorej budeme hovoriť až v piatej skupine inštrukcií. Do skupiny inštrukcií na prenos informácií patria aj ďalšie inštrukcie: MVI r, data (r) ← data pod "data " chápeme jednu 8-bitovú slabiku údajov, ktorá je explicitnou súčasťou inštrukcie (ako druhá slabika za operačným kódom). ("I" v mnemotechnickom názve je od názvu inštrukcie "Move Immediate".)

0 1 1 1 0 1 1 0

Page 30: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [30] Aj operačné kódy týchto inštrukcií sú tvorené jednoduchým mechanizmom: Iste si ešte pamätáte na náš príklad z úvodu, keď sme do registra "C" ukladali hodnotu 000101012

(C) ← 00010101 Vtedy sme prijali fakt, že jej operačný kód je: 00001110 Teraz sa o tom môžeme presvedčiť, pretože vieme, že išlo o inštrukciu MVI C, 00010101 ktorej kód je skutočne : 00001110 = 0EH Samozrejme sem patrí aj inštrukcia s nepriamym adresovaním:

MVI M, data ((HL)) ← data pomocou ktorej vieme zapísať údaje do každej slabiky operačnej pamäti.

0 0 D D D 1 1 0

Page 31: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [31] Pri inštrukciách s nepriamym adresovaním cez registrový pár "HL" je nepraktické napĺňanie tejto dvojice registrov pomocou dvoch oddelených inštrukcií: MVI H, data alebo MOV H, r a MVI L, data alebo MOV L, r Existuje skupina inštrukcií, ktorá dokáže v jedinom inštrukčnom cykle naplniť celý 16-bitový registrový pár: (Load register pair immediate) LXI rp, data16 V rámci inštrukcie sa objavili nové označenia: pod skratkou "rp" rozumieme 16-bitový celok (registrový pár), ktorého interný kód je daný v tabuľke: data16 je pomenovanie pre 16-bitové údaje, ktoré sú tvorené dvojicou 8-bitových slabík.

rp kód

B-C 00

D-E 01

H-L 10

SP 11

Page 32: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [32] Operačný kód týchto inštrukcií sa tvorí podľa schémy: Takže napríklad naplnenie registrového páru "HL" bude mať operačný kód 00100001 = 21H Pri použití inštrukcie LXI rp, data16 treba venovať pozornosť usporiadaniu údajov v bloku "data16 ". Ak napríklad chceme do registrového páru "HL" uložiť hexadecimálnu hodnotu "12ABH" napíšeme inštrukciu v asembleri:

LXI HL, 12ABH Už vieme, že operačný kód tejto inštrukcie je "21H", ale pri zápise strojového kódu inštrukcie do operačnej pamäti treba dodržať nasledovné poradie:

rp kód

B-C 00

D-E 01

H-L 10

SP 11

0 0 R P 0 0 0 1

Page 33: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [33] ale v strojovom kóde bude mať zápis iné poradie: Použitie 16-bitového registra "SP" preberieme neskôr v kapitole o inštrukciách na vetvenie programu. V aritmetickej časti prehľadu inštrukcií µP 8080/85 sa dozvieme o výnimočnom postavení univerzálneho registra "A" (akumulátor). Preto neudivuje, že sú mu venované špeciálne inštrukcie na uloženie obsahu akumulátora do pamäti a spätné načítanie obsahu pamäťovej bunky do akumulátora.

adresa kód hexa

α 00100001 21 ← operačný kód inštrukcie

α+1 10101011 AB ← dolná (nižšia) slabika "data16"

α+2 00010010 12 ← horná (vyššia) slabika "data16"

Page 34: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [34] (Load/Store Accumulator Direct) LDA addr (operačný kód 3AH ) (A) ← (addr) STA addr (operačný kód 32H ) (addr) ← (A) Nový symbol "addr " označuje 16-bitovú priamu adresu pamäťovej bunky. Inštrukcia je trojslabičná, druhá a tretia slabika obsahujú adresu – v strojovom kóde opäť v poradí najskôr spodná polovica adresy a potom horná. Napr. inštrukcia LDA 0ABCDH (A) ← (0ABCDH) bude ako strojová inštrukcia mať tvar:

adresa kód hexa

α 00111010 3A ← operačný kód inštrukcie

α+1 10101011 CD ← dolná (nižšia) slabika "data16"

α+2 00010010 AB ← horná (vyššia) slabika "data16"

Page 35: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [35] Podobné "privilégium" ako akumulátor má aj registrový pár "HL" , ktorý možno naplniť z buniek pamäti, resp. uložiť do pamäti jedinou inštrukciou. Samozrejme teraz je situácia opäť o niečo zložitejšia, pretože na naplnenie registrového páru potrebujeme dve slabiky operačnej pamäti. (Load/Store HL direct) LHLD addr (operačný kód 2AH ) (L) ← (addr) (H) ← (addr+1) SHLD addr (operačný kód 22H ) (addr) ← (L) (addr+1) ← (H)

Page 36: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [36] Pre naplnenie/uloženie akumulátora existuje ešte jedna dvojica inštrukcíí, ktorá dovoľuje tieto operácie vykonať formou nepriameho adresovania. (Load/Store accumulator indirect) LDAX rp (A) ← ((rp)) STAX rp ((rp)) ← (A) Ako registrové páry "rp " možno použiť iba "BC" a "DE" Operačné kódy sa generujú podľa schémy: LDAX rp 0 0 r p 1 0 1 0 STAX rp 0 0 r p 0 0 1 0 Kde rp = 00 pre BC registrový pár A rp=01 pre DE registrový pár

Page 37: mP 8080/85 - old.dep.fmph.uniba.skold.dep.fmph.uniba.sk/~gregus/PPH/Prednasky/L11_2017.pdfslabiky usúdiť, či ide o inštrukciu, numerický údaj alebo kód znaku. Dá sa tak urobiť

µP 8080/85 [37] A konečne posledná inštrukcia v skupine presunov: (Exchange HL with DE) XCHG (H) ↔ (D) (L) ↔ (E) Operačný kód: 0EBH