Intel 8080: Porovnání verzí
+Ukázka kódu |
m Přidání šablony Commonscat dle ŽOPP z 28. 7. 2016; kosmetické úpravy |
||
Řádek 1: | Řádek 1: | ||
[[ |
[[Soubor:Intel C8080A 9064 33001 N8384 top.jpg|thumb|Procesor Intel C8080A]] |
||
'''Intel 8080''' je [[mikroprocesor|procesor]] firmy [[Intel]], vyvinutý v |
'''Intel 8080''' je [[mikroprocesor|procesor]] firmy [[Intel]], vyvinutý v roce [[1974]]. Po několika měsících výroby byl nahrazen zdokonalenou verzí 8080A s posílenými výstupy. Obvykle se procesorem 8080 myslí tato vylepšená verze. Procesor byl často [[slang]]ově nazýván "BOBO". |
||
Jedná se o 8[[bit |
Jedná se o 8[[bit]]ový procesor technologie [[NMOS]], s adresovatelným [[elektronická paměť|paměťovým prostorem]] 64 KB, 256 adresovatelnými [[V/V port|V/V bránami]]. Taktovací frekvence procesoru je cca 1–2 MHz, čas potřebný k vykonání instrukce je minimálně 4 hodinové takty. Byl to jeden z nejrozšířenějších procesorů své doby, který měl široké využití od průmyslových aplikací po první domácí počítače.<br /> |
||
Jeho přímý 8-bitový nástupce je procesor [[Intel 8085]], 16bitový nástupce je [[Intel 8086]]. Na procesor navazoval i procesor [[Z80]] firmy [[Zilog]]. |
Jeho přímý 8-bitový nástupce je procesor [[Intel 8085]], 16bitový nástupce je [[Intel 8086]]. Na procesor navazoval i procesor [[Z80]] firmy [[Zilog]]. |
||
Procesor byl často kopírován jinými výrobci. Vyráběl se například i v bývalém [[Československo|Československu]] pod označením – [[Tesla (podnik)|Tesla]] MHB8080A. |
Procesor byl často kopírován jinými výrobci. Vyráběl se například i v bývalém [[Československo|Československu]] pod označením – [[Tesla (podnik)|Tesla]] MHB8080A. |
||
== Specifikace == |
== Specifikace == |
||
[[ |
[[Soubor:Intel 8080 arch.svg|right|thumb|350px|Mikroarchitektura i8080.]] |
||
* výrobní proces 4,5 [[Metr#Mikrometr|μm]] (pro srovnání: [[intel Core]] i7 s architekturou [[Haswell]] – 22 [[Nanometr|nm]]) |
* výrobní proces 4,5 [[Metr#Mikrometr|μm]] (pro srovnání: [[intel Core]] i7 s architekturou [[Haswell]] – 22 [[Nanometr|nm]]) |
||
* 4500 [[tranzistor]]ů |
* 4500 [[tranzistor]]ů |
||
Řádek 85: | Řádek 85: | ||
| style="text-align:center;"| [[Příznak přenosu|C]] |
| style="text-align:center;"| [[Příznak přenosu|C]] |
||
| style="background:white; color:black" | '''F'''lags, příznaky |
| style="background:white; color:black" | '''F'''lags, příznaky |
||
|} |
|} |
||
|} |
|} |
||
Intel 8080 má jeden 8bitový akumulátorový registr (střadač pro aritmetické a logické/bitové operace) a 6 univerzálních 8bitových registrů. ''Registry'' jsou [[elektronická paměť| |
Intel 8080 má jeden 8bitový akumulátorový registr (střadač pro aritmetické a logické/bitové operace) a 6 univerzálních 8bitových registrů. ''Registry'' jsou [[elektronická paměť|paměťová]] místa umístěná v [[mikroprocesor]]u. |
||
Procesor umožňuje použití až 8 rutin [[obsluha přerušení|obsluhy přerušení]] od V/V zařízení. |
Procesor umožňuje použití až 8 rutin [[obsluha přerušení|obsluhy přerušení]] od V/V zařízení. |
||
Řádek 97: | Řádek 97: | ||
Většina aritmetických a logických instrukcí mikroprocesoru 8080 je jednoadresních - u binárních operací je vždy jeden operand ve střadači (akumulátoru), adresuje se pouze druhý operand. Výsledek se ukládá vždy do střadače. |
Většina aritmetických a logických instrukcí mikroprocesoru 8080 je jednoadresních - u binárních operací je vždy jeden operand ve střadači (akumulátoru), adresuje se pouze druhý operand. Výsledek se ukládá vždy do střadače. |
||
Převážná většina instrukcí pracuje s 8bitovými daty. Několik málo instrukcí pracuje šestnáctibitovými daty uloženými ve dvojicích registrů |
Převážná většina instrukcí pracuje s 8bitovými daty. Několik málo instrukcí pracuje šestnáctibitovými daty uloženými ve dvojicích registrů |
||
BC, DE a HL. |
BC, DE a HL. |
||
Řádek 103: | Řádek 103: | ||
==== Ukazatel zásobníku ==== |
==== Ukazatel zásobníku ==== |
||
''Zásobník'' (''stack'') slouží k ukládání adres pro návrat z podprogramů a přerušení. Lze jej používat i pro ukládání mezivýsledků. Na rozdíl od předchozích typů procesorů Intel může být zásobník umístěn kdekoli v paměti RAM. Vrchol zásobníku je adresován registrem SP. Zásobník roste k nižším adresám. Do zásobníku se ukládá vždy dvojice bytů. Registr SP (''stack pointer'') obsahuje adresu poslední uložené položky. Při ukládání na zásobník (instrukce PUSH), se před uložením každého z dvojice bytů SP dekrementuje – zmenšuje o 1. Naopak při čtení ze zásobníku (instrukce POP) je po přečtení každého ze dvojice bytů ukazatel inkrementován – zvýšen o 1. |
''Zásobník'' (''stack'') slouží k ukládání adres pro návrat z podprogramů a přerušení. Lze jej používat i pro ukládání mezivýsledků. Na rozdíl od předchozích typů procesorů Intel může být zásobník umístěn kdekoli v paměti RAM. Vrchol zásobníku je adresován registrem SP. Zásobník roste k nižším adresám. Do zásobníku se ukládá vždy dvojice bytů. Registr SP (''stack pointer'') obsahuje adresu poslední uložené položky. Při ukládání na zásobník (instrukce PUSH), se před uložením každého z dvojice bytů SP dekrementuje – zmenšuje o 1. Naopak při čtení ze zásobníku (instrukce POP) je po přečtení každého ze dvojice bytů ukazatel inkrementován – zvýšen o 1. |
||
==== Programový čítač ==== |
==== Programový čítač ==== |
||
Řádek 109: | Řádek 109: | ||
=== Pomocné registry === |
=== Pomocné registry === |
||
W, Z – jsou nepřístupné programátorovi, využívají se pro vnitřní potřebu [[mikroprocesor|CPU]] při vykonávání instrukcí. |
W, Z – jsou nepřístupné programátorovi, využívají se pro vnitřní potřebu [[mikroprocesor|CPU]] při vykonávání instrukcí. |
||
== Strojové instrukce == |
== Strojové instrukce == |
||
Řádek 434: | Řádek 434: | ||
; CNT - Počet bytů, které se mají kopírovat |
; CNT - Počet bytů, které se mají kopírovat |
||
SRC |
SRC DW 0 |
||
DST |
DST DW 0 |
||
CNT |
CNT DW 0 |
||
ORG 400h |
ORG 400h |
||
Řádek 475: | Řádek 475: | ||
=== Externí odkazy === |
=== Externí odkazy === |
||
* {{Commonscat}} |
|||
* [http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html 8080/Z80 Instruction Set] |
* [http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html 8080/Z80 Instruction Set] |
||
Řádek 481: | Řádek 482: | ||
{{Portály|Procesory}} |
{{Portály|Procesory}} |
||
[[Kategorie:Procesory Intel]] |
[[Kategorie:Procesory Intel]] |
Verze z 6. 12. 2016, 09:16
Intel 8080 je procesor firmy Intel, vyvinutý v roce 1974. Po několika měsících výroby byl nahrazen zdokonalenou verzí 8080A s posílenými výstupy. Obvykle se procesorem 8080 myslí tato vylepšená verze. Procesor byl často slangově nazýván "BOBO".
Jedná se o 8bitový procesor technologie NMOS, s adresovatelným paměťovým prostorem 64 KB, 256 adresovatelnými V/V bránami. Taktovací frekvence procesoru je cca 1–2 MHz, čas potřebný k vykonání instrukce je minimálně 4 hodinové takty. Byl to jeden z nejrozšířenějších procesorů své doby, který měl široké využití od průmyslových aplikací po první domácí počítače.
Jeho přímý 8-bitový nástupce je procesor Intel 8085, 16bitový nástupce je Intel 8086. Na procesor navazoval i procesor Z80 firmy Zilog.
Procesor byl často kopírován jinými výrobci. Vyráběl se například i v bývalém Československu pod označením – Tesla MHB8080A.
Specifikace
- výrobní proces 4,5 μm (pro srovnání: intel Core i7 s architekturou Haswell – 22 nm)
- 4500 tranzistorů
- 0,64 MIPS
- Vylepšená načítací logika NMOS.
- Programovací jazyk Assembler zpětně kompatibilní s Intel 8008.
- Teoreticky až 10× výkonnější než Intel 8008.
- Používán v Altair 8800, ovládání světelných křižovatek, střely s plochou dráhou letu.
- Potřebuje 6 podpůrných čipů proti 20 u 8008.
Vnitřní struktura 8080
Registry mikroprocesoru Intel 8080 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Intel 8080 má jeden 8bitový akumulátorový registr (střadač pro aritmetické a logické/bitové operace) a 6 univerzálních 8bitových registrů. Registry jsou paměťová místa umístěná v mikroprocesoru.
Procesor umožňuje použití až 8 rutin obsluhy přerušení od V/V zařízení.
Procesor není úplně monolitický, k jeho činnosti jsou nutné dva pomocné obvody – generátor hodin Intel 8224 a řadič sběrnice Intel 8228. Pro vytvoření mikropočítače je potřeba celá sada nejméně 6 obvodů.
Univerzální registry
Většina aritmetických a logických instrukcí mikroprocesoru 8080 je jednoadresních - u binárních operací je vždy jeden operand ve střadači (akumulátoru), adresuje se pouze druhý operand. Výsledek se ukládá vždy do střadače.
Převážná většina instrukcí pracuje s 8bitovými daty. Několik málo instrukcí pracuje šestnáctibitovými daty uloženými ve dvojicích registrů BC, DE a HL.
Indexové a ukazatelové registry
Ukazatel zásobníku
Zásobník (stack) slouží k ukládání adres pro návrat z podprogramů a přerušení. Lze jej používat i pro ukládání mezivýsledků. Na rozdíl od předchozích typů procesorů Intel může být zásobník umístěn kdekoli v paměti RAM. Vrchol zásobníku je adresován registrem SP. Zásobník roste k nižším adresám. Do zásobníku se ukládá vždy dvojice bytů. Registr SP (stack pointer) obsahuje adresu poslední uložené položky. Při ukládání na zásobník (instrukce PUSH), se před uložením každého z dvojice bytů SP dekrementuje – zmenšuje o 1. Naopak při čtení ze zásobníku (instrukce POP) je po přečtení každého ze dvojice bytů ukazatel inkrementován – zvýšen o 1.
Programový čítač
Registr PC obsahuje adresu další programové instrukce, která se má provést. Po přečtení každého bytu instrukce je automaticky inkrementován (zvýšen o 1), pokud je načtena instrukce skoku, je následně přepsán novou adresou.
Pomocné registry
W, Z – jsou nepřístupné programátorovi, využívají se pro vnitřní potřebu CPU při vykonávání instrukcí.
Strojové instrukce
Slovo mikroprocesoru Intel 8080 má 8 bitů. Oproti mikroprocesoru Intel 8008 však instrukční sada 8080 obsahuje i instrukce pro práci se 16bitovými daty, které používají dvojice registrů B+C, D+E, H+L, SP, případně A+příznaky a výrazně zjednodušují především práci s adresami. Instrukční sada se vyznačuje velmi nízkou ortogonalitou:
- Většinu unárních operací lze provádět pouze s akumulátorem (registr A); u binárních operací je jeden z operandů vždy v registru A a výsledek se ukládá také do registru A.
- Se 16bitovými registry lze provádět pouze operace načtení konstanty (LXI), zvětšení o 1 (inkrement, INX), zmenšení o jedničku (dekrement, DCX), sčítání DAD (jeden operand a výsledek je vždy v HL, druhý operand je BC, DE, HL nebo SP), uložení na zásobník (PUSH) a vyzvednutí ze zásobníku (POP).
- Intel 8080 používá pouze přímé adresování; nejbohatší využití má použití adresy uložené ve dvojici registrů HL; v instrukcích se takový operand označuje jako pseudoregistr M.
- Obsah registru A lze načíst (kromě adresy uložené v HL) z adresy zadané přímou adresou nebo z adresy uložené ve dvojici registrů BC nebo DE; stejné možnosti jsou i pro zapsání obsahu registru A do paměti.
- Intel 8080 má instrukce pro přehození obsahu 16bitových registrů DE a HL, pro přehození 16-bitového slova na vrcholu zásobníku s HL a instrukce pro naplnění registrů SP nebo PC z HL (naplnění PC z HL odpovídá skoku na adresu uvedenou v HL).
- Cíle skoků a volání procedur jsou zadávány jako absolutní 16bitové adresy, což vyžaduje relokaci programu (změnu adresních konstant) při jeho zavedení na jinou adresu. Všechny instrukce skoků, volání procedur a návratů z procedury mají podmíněné verze, u kterých se skok provede pokud je nebo není nastaven jeden vybraný ze 4 aritmetických příznaků.
- Pro vytvoření víceúrovňového systému přerušení je k dispozici 8 jednobytových instrukcí RST pro vyvolání podprogramu z jedné z 8 pevných adres.
Délka instrukcí závisí na přítomnosti konstant v instrukci. Instrukce neobsahující konstantu jsou jednobytové, instrukce obsahující osmibitovou konstantu (osmibitovou přímou hodnotu nebo číslo V/V portu) jsou dvoubytové, instrukce obsahující 16bitovou konstantu (adresu, případně konstantu pro načtení do dvojice registrů) jsou tříbytové.
12 operačních kódů je nevyužitých. Tyto kódy využívají procesory Intel 8085 a Z80 pro rozšíření instrukční sady.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ |
NOP 0 |
LXI B,w 1 |
STAX B 2 |
INX B 3 |
INR B 4 |
DCR B 5 |
MVI B,b 6 |
RLC 7 |
8 |
DAD B 9 |
LDAX B 10 |
DCX B 11 |
INR C 12 |
DCR C 13 |
MVI C,b 14 |
RRC 15 |
1_ |
16 |
LXI D,w 17 |
STAX D 18 |
INX D 19 |
INR D 20 |
DCR D 21 |
MVI D,b 22 |
RAL 23 |
24 |
DAD D 25 |
LDAX D 26 |
DCX D 27 |
INR E 28 |
DCR E 29 |
MVI E,b 30 |
RAR 31 |
2_ |
RIM[P 1] 32 |
LXI H,w 33 |
SHLD w 34 |
INX H 35 |
INR H 36 |
DCR H 37 |
MVI H,b 38 |
DAA 39 |
40 |
DAD H 41 |
LHLD w 42 |
DCX H 43 |
INR L 44 |
DCR L 45 |
MVI L,b 46 |
CMA 47 |
3_ |
SIM[P 1] 48 |
LXI SP,w 49 |
STA w 50 |
INX SP 51 |
INR M 52 |
DCR M 53 |
MVI M,b 54 |
STC 55 |
56 |
DAD SP 57 |
LDA w 58 |
DCX SP 59 |
INR A 60 |
DCR A 61 |
MVI A,b 62 |
CMC 63 |
4_ |
MOV B,B 64 |
MOV B,C 65 |
MOV B,D 66 |
MOV B,E 67 |
MOV B,H 68 |
MOV B,L 69 |
MOV B,M 70 |
MOV B,A 71 |
MOV C,B 72 |
MOV C,C 73 |
MOV C,E 74 |
MOV C,E 75 |
MOV C,H 76 |
MOV C,L 77 |
MOV C,M 78 |
MOV C,A 79 |
5_ |
MOV D,B 80 |
MOV D,C 81 |
MOV D,D 82 |
MOV D,E 83 |
MOV D,H 84 |
MOV D,L 85 |
MOV D,M 86 |
MOV D,A 87 |
MOV E,B 88 |
MOV E,C 89 |
MOV E,E 90 |
MOV E,E 91 |
MOV E,H 92 |
MOV E,L 93 |
MOV E,M 94 |
MOV E,A 95 |
6_ |
MOV H,B 96 |
MOV H,C 97 |
MOV H,D 98 |
MOV H,E 99 |
MOV H,H 100 |
MOV H,L 101 |
MOV H,M 102 |
MOV H,A 103 |
MOV L,B 104 |
MOV L,C 105 |
MOV L,E 106 |
MOV L,E 107 |
MOV L,H 108 |
MOV L,L 109 |
MOV L,M 110 |
MOV L,A 111 |
7_ |
MOV M,B 112 |
MOV M,C 113 |
MOV M,D 114 |
MOV M,E 115 |
MOV M,H 116 |
MOV M,L 117 |
HLT 118 |
MOV M,A 119 |
MOV A,B 120 |
MOV A,C 121 |
MOV A,E 122 |
MOV A,E 123 |
MOV A,H 124 |
MOV A,L 125 |
MOV A,M 126 |
MOV A,A 127 |
8_ |
ADD B 128 |
ADD C 129 |
ADD D 130 |
ADD E 131 |
ADD H 132 |
ADD L 133 |
ADD M 134 |
ADD A 135 |
ADC B 136 |
ADC C 137 |
ADC D 138 |
ADC E 139 |
ADC H 140 |
ADC L 141 |
ADC M 142 |
ADC A 143 |
9_ |
SUB B 144 |
SUB C 145 |
SUB D 146 |
SUB E 147 |
SUB H 148 |
SUB L 149 |
SUB M 150 |
SBB A 151 |
SBB B 152 |
SBB C 153 |
SBB D 154 |
SBB E 155 |
SBB H 156 |
SBB L 157 |
SBB M 158 |
SBB A 159 |
A_ |
ANA B 160 |
ANA C 161 |
ANA D 162 |
ANA E 163 |
ANA H 164 |
ANA L 165 |
ANA M 166 |
ANA A 167 |
XRA B 168 |
XRA C 169 |
XRA D 170 |
XRA E 171 |
XRA H 172 |
XRA L 173 |
XRA M 174 |
XRA A 175 |
B_ |
ORA B 176 |
ORA C 177 |
ORA D 178 |
ORA E 179 |
ORA H 180 |
ORA L 181 |
ORA M 182 |
ORA A 183 |
CMP B 184 |
CMP C 185 |
CMP D 186 |
CMP E 187 |
CMP H 188 |
CMP L 189 |
CMP M 190 |
CMP A 191 |
C_ |
RNZ 192 |
POP B 193 |
JNZ w 194 |
JMP w 195 |
CNZ w 196 |
PUSH B 197 |
ADI b 198 |
RST 0 199 |
RZ 200 |
RET 201 |
JZ w 202 |
203 |
CZ w 204 |
CALL w 205 |
ACI b 206 |
RST 1 207 |
D_ |
RNC 208 |
POP D 209 |
JNC w 210 |
OUT b 211 |
CNC w 212 |
PUSH D 213 |
SUI b 214 |
RST 2 215 |
RC 216 |
217 |
JC w 218 |
IN b 219 |
CC w 220 |
221 |
SBI b 222 |
RST 3 223 |
E_ |
RPO 224 |
POP H 225 |
JPO w 226 |
XTHL 227 |
CPO w 228 |
PUSH H 229 |
ANI b 230 |
RST 4 231 |
RPE 232 |
PCHL 233 |
JPE w 234 |
XCHG 235 |
CPE w 236 |
237 |
XRI b 238 |
RST 5 239 |
F_ |
RP 240 |
POP PSW 241 |
JP w 242 |
DI 243 |
CP w 244 |
PUSH PSW 245 |
ORI b 246 |
RST 6 247 |
RM 248 |
SPHL 249 |
JM w 250 |
EI 251 |
CM w 252 |
253 |
CPI b 254 |
RST 7 255 |
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F |
Ukázka kódu
Následující zdrojový kód v jazyce symbolických adres procesoru Intel 8080 je procedura MEMCPY
pro kopírování bloku dat zadané délky z jednoho místa v paměti na jiné.
; memcpy --
; Zkopíruje blok paměti z jednoho místa na jiné.
;
; Vstupní parametry
; SRC - Adresa zdrojového bloku
; DST - Adresa cílového bloku
; CNT - Počet bytů, které se mají kopírovat
SRC DW 0
DST DW 0
CNT DW 0
ORG 400h
MEMCPY:
LHLD CNT ;HL <- (CNT)
MOV B,H
MOV C,L ;BC <- (CNT)
LHLD DST ;HL <- (DST)
XCHG ;DE <- (DST)
LHLD SRC ;HL <- (SRC)
MEMCLO:
MOV A,B
ORA C ;Jestliže BC = 0,
RZ ; pak návrat
MOV A,M ;A <- (HL)
STAX D ;(DE) <- A
INX H ;HL <- HL + 1
INX D ;DE <- DE + 1
DCX B ;BC <- BC - 1
JMP MEMCLO ;Další průchod cyklem
END
Odkazy
Poznámky
- ↑ a b Instrukce dostupné pouze na Intel 8085
Související články
Externí odkazy
- Obrázky, zvuky či videa k tématu Intel 8080 na Wikimedia Commons