Intel 8080
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 pod názvem 8080 myslí tato vylepšená verze, které se vyrobilo mnohonásobně více. Procesor byl často slangově nazýván "BOBO".
Intel 8080 | |
---|---|
Mikroprocesor Intel C8080A | |
Specifikace | |
Kódové značení | Intel C8080 |
Návrh | Chuck Peddle a Bill Mensch |
Uvedení | duben 1974 |
Výrobci | Intel |
Výrobní proces | NMOS 6 µm |
Frekvence | 2 až 3,125 MHz |
Šířka datové sběrnice | 8 bitů |
Šířka adresní sběrnice | 16 bitů |
Instrukční sada | 8080 |
Patice | 40-pin DIP |
Předchůdce | Intel 8008 |
Nástupce | Intel 8085 Zilog Z80 Intel 8086 Intel 8088 |
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ý 8bitový 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.
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í 16bitové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
- Instrukce dostupné pouze na Intel 8085