Intel 8080

Intel 8080處理器
英特爾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修正了這個缺陷。

**功能**
i8080 微架構

**編譯模型**
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 字節）內存的訪問。

**寄存器**
處理器有七個 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 可以被推入或從堆棧中彈出。

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

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

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

**指令集**

**輸入/輸出方案**

**輸入輸出端口空間**
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 微處理器系列中。

**獨立的堆棧空間**
處理器狀態字中的一個位（見下文）指示處理器正在從堆棧訪問數據。使用這個信號，可以實現一個獨立的堆棧內存空間。這個功能很少被使用。

**狀態字**
對於更高級的系統，在每個機器週期的開始，處理器在數據總線上放置一個八位狀態字。這個字節包含的標誌決定了是訪問內存還是 I/O 端口，以及是否需要處理中斷。
中斷系統狀態（啟用或禁用）也在一個單獨的引腳上輸出。對於簡單系統，其中不使用中斷，在某些情況下可能會發現這個引腳被用作額外的單比特輸出端口（例如，在蘇聯製造的流行的 Radio-86RK 計算機）。

**示例代碼**
以下是8080/8085彙編器源代碼，用於一個名為memcpy的子程序，該子程序將給定大小的數據塊從一個位置複製到另一個位置。數據塊一次複製一個字節，數據移動和循環邏輯使用16位操作。
8080 針腳定義

**針腳**
地址總線擁有自己的16個針腳，而數據總線有8個可用的針腳，無需任何複用。使用另外兩個針腳（讀和寫信號），可以非常容易地組裝簡單的微處理器設備。僅需為獨立的IO空間、中斷和DMA添加解碼處理器針腳信號的芯片。
然而，針腳的負載能力是有限的；即使是簡單的計算機通常也需要總線放大器。
處理器需要三個電源（-5V、+5V和+12V）和兩個非重疊的高幅度同步信號。然而，至少在蘇聯後期的版本КР580ВМ80А能夠僅使用單一的+5V電源工作，將+12V針腳連接到+5V，將-5V針腳接地。
隨芯片提供的文檔中的針腳佈局表，如下描述針腳：

**支持芯片**
8080的成功關鍵因素之一是有廣泛的支持芯片可用，提供串行通信、計數/定時、輸入/輸出、直接內存訪問和可編程中斷控制等多種功能：- 8214 - 優先級中斷控制單元- 8224 – 時鐘發生器- 8228/ 8238 date=20230918030959  – 系統控制器和總線驅動器- 8251 – 通信控制器- 8253 – 可編程間隔定時器- 8255 – 可編程外圍接口- 8257 – DMA控制器- 8259 – 可編程中斷控制器

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