Intel 8080

|produced-end=|slowest=2|slow-unit=MHz|fastest=3.125|fast-unit=MHz|fsb-slowest=|fsb-fastest=|fsb-slow-unit=|fsb-fast-unit=|hypertransport-slowest=|hypertransport-fastest=|hypertransport-slow-unit=|hypertransport-fast-unit=|qpi-slowest=|qpi-fastest=|qpi-slow-unit=|qpi-fast-unit=|dmi-slowest=|dmi-fastest=|dmi-slow-unit=|dmi-fast-unit=|size-from=6 µm|size-to=|soldby=Intel|designfirm=Intel|manuf1=Intel|core1=|sock1=DIP40|pack1=40-pin DIP|brand1=|arch=8080|microarch=|instructions=|transistors=4,500 or 6,000|extensions=|data-width=8 bits|address-width=16 bits|virtual-width=|cpuid=|code=|numcores=1|l1cache=|application=|predecessor=Intel 8008|successor=Intel 8085|variant=|pcode=|support status=Unsupported}}

英特爾 8080 微處理器是英特爾設計和製造的第二款 8 位微處理器。它於 1974 年 4 月首次亮相，是早期 8008 設計的擴充套件和增強版本，儘管它們之間沒有二進位制相容性。最初規定的時鐘頻率或頻率限制為 2 MHz，常見指令使用 4、5、7、10 或 11 個週期。因此，該處理器能夠每秒執行數十萬條指令。後來推出了兩個更快的變種，8080A-1 和 8080A-2，它們的時鐘頻率限制分別為 3.125 MHz 和 2.63 MHz。 8080 在大多數應用中需要兩個支援晶片才能工作：i8224 時鐘生成器 / 驅動器和 i8228 匯流排控制器。它採用 N 型金氧半導體邏輯（NMOS）實現，使用非飽和增強模式電晶體作為負載，因此除了主要的電晶體 - 電晶體邏輯（TTL）相容的 + 5 V 外，還需要 + 12 V 和 - 5 V 的電壓。

儘管早期的微處理器通常用於如計算器、收銀機、計算機終端、工業機器人等大批次生產的裝置中，8080 在更廣泛的應用中取得了更大的成功，它在很大程度上被認為是微型計算機行業的起點。 其受歡迎的幾個因素包括：其 40 腳封裝比 18 腳的 8008 更易於介面，並且使其資料匯流排更高效；其 NMOS 實現使其電晶體比 P 型金氧半導體邏輯（PMOS）的 8008 更快，同時透過使其與 TTL 相容簡化了介面；可用的支援晶片種類更多；其指令集相對於 8008 有所增強；以及其完整的 16 位地址匯流排（相對於 8008 的 14 位）使其能夠訪問 64 KB 的記憶體，是 8008 範圍的四倍。它被用於 Altair 8800 和後續的 S-100 匯流排個人計算機，直到被 Z80 取代，並且是由 Gary Kildall 開發的 CP/M 作業系統的原始目標 CPU。

8080 直接影響了後來的 x86 架構。英特爾設計了 8086，使其組合語言與 8080 足夠相似，大多數指令可以直接對映到彼此上，這樣就可以在 8086 上執行轉譯的 8080 彙編程式碼。

歷史

微處理器的客戶對採用 8008 持謹慎態度，原因在於它存在諸多限制，如單一定址模式、低時鐘速度、低引腳數以及小型片上棧，這些因素限制了軟體的規模和複雜度。對於 8080 的設計提案有很多，範圍從僅僅給 8008 新增棧指令到完全脫離所有之前英特爾的架構。最終的設計是各種提案之間的一種妥協。

Federico Faggin 是 8080 架構的發起人，他在 1972 年初向英特爾的管理層提出了這一晶片設計，並推動了它的實施。六個月後，他終於獲得了開發的許可。Faggin 於 1972 年 11 月從日本聘請了與他一起設計 4004 的 Masatoshi Shima。Shima 在 Faggin 的指導下進行了詳細設計，使用了 Faggin 為 4000 系列創造的隨機邏輯矽門設計方法。

8080 被明確設計為一個面向更廣泛客戶的通用微處理器。大量的開發工作致力於嘗試將 8008 的輔助晶片的功能整合到一個封裝中。開發初期就決定 8080 不與 8008 二進位制相容，而是選擇源相容性，一旦透過轉譯器執行，就可以允許新軟體不受 8008 同樣的限制。出於同樣的原因，以及為了擴充套件基於棧的例程和中斷的能力，棧被移至外部記憶體。

注意到程式設計師在大型機系統中對通用暫存器的專用使用，晶片架構師 Stanley Mazor 決定 8080 的暫存器將是專用的，暫存器對有不同的用途集。這也使得工程師能夠更有效地將電晶體用於其他目的。

Shima 在 1973 年 8 月完成了佈局。在 NMOS 製造調整之後，一個 8080 的原型在 1974 年 1 月完成。它有一個缺陷，即使用標準 TTL 裝置驅動時，因為高電流流入狹窄的線路而增加了地線電壓。在 Shima 對原型進行特性分析之前，英特爾已經按照銷售部門的指示生產了 40,000 個 8080 單元。它被髮布時要求使用低功耗肖特基 TTL（LS TTL）裝置。8080A 修正了這個缺陷。

功能

2.1 編譯模型

Intel 8080 是 8008 的後繼者。它使用與 8008 相同的基本指令集和暫存器模型，儘管它既不與其前身相容原始碼，也不相容二進位制程式碼。8008 中的每條指令在 8080 中都有等效指令。8080 還在其指令集中添加了 16 位操作。而 8008 需要使用 HL 暫存器對來間接訪問其 14 位記憶體空間，8080 添加了定址模式，允許直接訪問其完整的 16 位記憶體空間。8008 的內部 7 級下壓呼叫堆疊被專用的 16 位堆疊指標（SP）暫存器替換。8080 的 40 引腳 DIP 封裝允許它提供 16 位地址匯流排和 8 位資料匯流排，實現對 64 KiB（2^16 位元組）記憶體的訪問。

2.2 暫存器

處理器有七個 8 位暫存器（A、B、C、D、E、H 和 L），其中 A 是主 8 位累加器。其他六個暫存器可以根據特定指令作為單獨的 8 位暫存器或在三個 16 位暫存器對（BC、DE 和 HL，在 Intel 文件中分別稱為 B、D 和 H）中使用。某些指令還允許 HL 暫存器對作為（有限的）16 位累加器使用。偽暫存器 M，指的是由 HL 指向的解引用記憶體位置，幾乎可以在任何其他暫存器可以使用的地方使用。8080 有一個 16 位的堆疊指標指向記憶體，替換了 8008 的內部堆疊，並有一個 16 位的程式計數器。

標誌

處理器維護內部標誌位（狀態暫存器），這些標誌位指示算術和邏輯指令的結果。只有特定的指令會影響標誌位。標誌位包括：

符號（S），如果結果為負則設定。
零（Z），如果結果為零則設定。
奇偶校驗（P），如果結果中 1 的位數為偶數則設定。
進位（C），如果最後一次加法操作產生了進位或者最後一次減法操作需要借位則設定。
輔助進位（AC 或 H），用於二進位制編碼的十進位制算術（BCD）。

特定指令可以設定或反轉進位位。條件分支指令測試各種標誌狀態位。累加器和標誌位一起被稱為 PSW，或程式狀態字。PSW 可以被推入或從堆疊中彈出。

2.3 命令與指令

與許多其他 8 位處理器一樣，所有指令都編碼為一個位元組（包括暫存器編號，但不包括立即數資料），以簡化操作。有些可以跟隨一到兩個位元組的資料，這可以是立即數運算元、記憶體地址或埠號。像更高階的處理器一樣，它有自動 CALL 和 RET 指令用於多級過程呼叫和返回（甚至可以像跳轉一樣有條件地執行），以及用於在機器堆疊上儲存和恢復任何 16 位暫存器對的指令。存在八個一位元組的呼叫指令（RST），用於在固定地址 00h、08h、10h、...、38h 處的子程式。這些旨在由外部硬體提供，以呼叫相應的中斷服務例程，但也經常用作快速系統呼叫。執行最慢的指令是 XTHL，用於將 HL 暫存器對與堆疊指標指示的地址處儲存的值交換。

2.3.1 8 位指令

所有具有兩個運算元的 8 位操作只能在 8 位累加器（A 暫存器）上執行。另一個運算元可以是立即值、另一個 8 位暫存器或由 16 位暫存器對 HL 地址的記憶體位元組。增量和減量操作可以在任何 8 位暫存器或 HL 地址的記憶體位元組上執行。支援直接複製任意兩個 8 位暫存器之間以及任何 8 位暫存器和 HL 地址的記憶體位元組之間。由於 MOV 指令的規則編碼（使用了可用操作碼空間的四分之一），存在將暫存器複製到其自身的冗餘程式碼，除了用於延遲外幾乎無用。然而，系統性的 MOV M,M 操作碼被用來編碼停止（HLT）指令，直到外部重置或中斷髮生時停止執行。

2.3.2 16 位操作

雖然 8080 通常是一個 8 位處理器，它有限地能夠執行 16 位操作。任何三個 16 位暫存器對（BC、DE 或 HL，在 Intel 文件中分別稱為 B、D、H）或 SP 可以使用載入立即 16 位值，使用 和 進行增量或減量操作，或使用 加到 HL 上。透過將 HL 加到其自身，可以使用一條指令實現與 16 位算術左移相同的結果。唯一影響任何標誌的 16 位指令是 ，它設定 CY（進位）標誌，以允許進行程式設計的 24 位或 32 位算術（或更大），這對於實現浮點算術是必需的。可以使用 和 分配堆疊幀。可以使用，執行對計算指標的跳轉。 從直接定址的記憶體中載入 HL， 同樣儲存 HL。指令交換 HL 和 DE 暫存器對的值。XTHL 與堆疊上最後推入的項和 HL 交換。

2.4 指令集

2.5 輸入 / 輸出方案

2.5.1 輸入輸出埠空間

8080 支援多達 256 個輸入 / 輸出（I/O）埠，透過使用埠地址作為運算元的專用 I/O 指令訪問。這種 I/O 對映方案被認為是一個優勢，因為它釋放了處理器有限的地址空間。許多 CPU 架構相反使用所謂的記憶體對映 I/O（MMIO），在這種設計中，RAM 和外圍晶片使用共同的地址空間。這消除了對專用 I/O 指令的需求，儘管這樣的設計可能存在的一個缺點是，由於外圍裝置通常比記憶體慢，因此必須使用特殊硬體來插入等待狀態。然而，在一些簡單的 8080 計算機中，I/O 確實被當作記憶體單元進行定址，即 “記憶體對映”，從而不使用 I/O 命令。I/O 定址有時也可以利用處理器將相同的 8 位埠地址輸出到低地址位元組和高地址位元組的事實（即，IN 05h 會在 16 位地址總線上放置地址 0505h）。類似的 I/O 埠方案被用在向後相容的 Zilog Z80 和 Intel 8085，以及密切相關的 x86 微處理器系列中。

2.5.2 獨立的堆疊空間

處理器狀態字中的一個位（見下文）指示處理器正在從堆疊訪問資料。使用這個訊號，可以實現一個獨立的堆疊記憶體空間。這個功能很少被使用。

2.6 狀態字

對於更高階的系統，在每個機器週期的開始，處理器在資料匯流排上放置一個八位狀態字。這個位元組包含的標誌決定了是訪問記憶體還是 I/O 埠，以及是否需要處理中斷。

中斷系統狀態（啟用或停用）也在一個單獨的引腳上輸出。對於簡單系統，其中不使用中斷，在某些情況下可能會發現這個引腳被用作額外的單位元輸出埠（例如，在蘇聯製造的流行的 Radio-86RK 計算機）。

2.7 示例程式碼

以下是 8080/8085 彙編器原始碼，用於一個名為 memcpy 的子程式，該子程式將給定大小的資料塊從一個位置複製到另一個位置。資料塊一次複製一個位元組，資料移動和迴圈邏輯使用 16 位操作。

2.8 針腳

地址匯流排擁有自己的 16 個針腳，而資料匯流排有 8 個可用的針腳，無需任何複用。使用另外兩個針腳（讀和寫訊號），可以非常容易地組裝簡單的微處理器裝置。僅需為獨立的 IO 空間、中斷和 DMA 新增解碼處理器針腳訊號的晶片。

然而，針腳的負載能力是有限的；即使是簡單的計算機通常也需要匯流排放大器。

處理器需要三個電源（-5V、+5V 和 + 12V）和兩個非重疊的高幅度同步訊號。然而，至少在蘇聯後期的版本КР580ВМ80А能夠僅使用單一的 + 5V 電源工作，將 + 12V 針腳連線到 + 5V，將 - 5V 針腳接地。

隨晶片提供的文件中的針腳佈局表，如下描述針腳：

支援晶片

8080 的成功關鍵因素之一是有廣泛的支援晶片可用，提供序列通訊、計數 / 定時、輸入 / 輸出、直接記憶體訪問和可程式設計中斷控制等多種功能：

8214 - 優先順序中斷控制單元
8224 – 時鐘發生器
8228/ 8238 – 系統控制器和匯流排驅動器
8251 – 通訊控制器
8253 – 可程式設計間隔定時器
8255 – 可程式設計外圍介面
8257 – DMA 控制器
8259 – 可程式設計中斷控制器

實現

8080 積體電路使用非飽和增強型負載 nMOS 門，需要額外的電壓（用於負載門偏置）。它是在一個矽門過程中製造的，使用最小特徵尺寸為 6 微米。設計中大約 4500 個電晶體透過單層金屬層互聯，但較高電阻的多晶矽層（一些互聯需要更高的電壓）是用電晶體門實現的。晶片尺寸大約為 20 平方毫米。