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".

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 

 
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í 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.

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

Související články 
 Altair 8800
 CP/M
 Intel 8085
 PMI-80
 Sběrnice S-100

Externí odkazy 
 

 8080/Z80 Instruction Set

8bitové mikroprocesory
Procesory Intel