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 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.
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.
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írovatSRCDW0DSTDW0CNTDW0ORG400hMEMCPY:LHLDCNT;HL <- (CNT)MOVB,HMOVC,L;BC <- (CNT)LHLDDST;HL <- (DST)XCHG;DE <- (DST)LHLDSRC;HL <- (SRC)MEMCLO:MOVA,BORAC;Jestliže BC = 0,RZ; pak návratMOVA,M;A <- (HL)STAXD;(DE) <- AINXH;HL <- HL + 1INXD;DE <- DE + 1DCXB;BC <- BC - 1JMPMEMCLO;Další průchod cyklemEND