Intel 8080: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Skoky a instrukce RST.
+Ukázka kódu
Řádek 420: Řádek 420:
{{chset-table-footer}}
{{chset-table-footer}}
|}
|}

== Ukázka kódu ==

Následující zdrojový kód v [[jazyk symbolických adres|jazyce symbolických adres]] procesoru Intel 8080 je procedura <code>MEMCPY</code> pro kopírování bloku dat zadané délky z jednoho místa v paměti na jiné.

<source lang="nasm">
; 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
</source>


== Odkazy ==
== Odkazy ==

Verze z 11. 12. 2015, 22:18

Procesor Intel C8080A

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

Mikroarchitektura i8080.
  • 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
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (číslo bitu)
Univerzální registry
A Flags AF (akumulátor a příznaky)
B C BC
D E DE
H L HL (nepřímá adresa)
Indexregistry
SP Stack Pointer, ukazatel vrcholu zásobníku
Programový čítač
PC Program Counter, programový čítač
Stavový registr
  S Z I H - P - C Flags, 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 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.

Strojový kód Intel 8080/8085
_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

  1. a b Instrukce dostupné pouze na Intel 8085

Související články

Externí odkazy