热门问题
时间线
聊天
视角
Intel 8080
8位微處理器 来自维基百科,自由的百科全书
Remove ads
英特爾8080微處理器是英特爾設計和製造的第二款8位元微處理器。它於1974年4月首次亮相,是早期8008設計的擴充和增強版本,儘管它們之間沒有二進制相容性。最初規定的時脈頻率或頻率限制為2 MHz,常見指令使用4、5、7、10或11個周期。因此,該處理器能夠每秒執行數十萬條指令。後來推出了兩個更快的變種,8080A-1和8080A-2,它們的時脈頻率限制分別為3.125 MHz和2.63 MHz。[2] 8080在大多數應用中需要兩個支援晶片才能工作:i8224時鐘生成器/驅動器和i8228匯流排控制器。它採用N型金氧半導體邏輯(NMOS)實現,使用非飽和增強模式電晶體作為負載[3][4],因此除了主要的電晶體-電晶體邏輯(TTL)相容的+5 V外,還需要+12 V和-5 V的電壓。
![]() |

儘管早期的微處理器通常用於如計算機、收銀機、電腦終端、工業機器人等大批次生產的裝置中[5],8080在更廣泛的應用中取得了更大的成功,它在很大程度上被認為是微型電腦行業的起點。[6] 其受歡迎的幾個因素包括:其40腳封裝比18腳的8008更易於介面,並且使其資料匯流排更高效;其NMOS實現使其電晶體比P型金氧半導體邏輯(PMOS)的8008更快,同時通過使其與TTL相容簡化了介面;可用的支援晶片種類更多;其指令集相對於8008有所增強[7];以及其完整的16位元位址匯流排(相對於8008的14位元)使其能夠訪問64 KB的主記憶體,是8008範圍的四倍。它被用於Altair 8800和後續的S-100匯流排個人電腦,直到被Z80取代,並且是由Gary Kildall開發的CP/M作業系統的原始目標CPU。
8080直接影響了後來的x86架構。英特爾設計了8086,使其組合語言與8080足夠相似,大多數指令可以直接對映到彼此上,這樣就可以在8086上執行轉譯的8080組譯代碼。[8]
Remove ads
歷史
微處理器的客戶對採用8008持謹慎態度,原因在於它存在諸多限制,如單一定址模式、低時鐘速度、低引腳數以及小型片上棧,這些因素限制了軟體的規模和複雜度。對於8080的設計提案有很多,範圍從僅僅給8008添加棧指令到完全脫離所有之前英特爾的架構。[9]最終的設計是各種提案之間的一種妥協。
Federico Faggin是8080架構的發起人,他在1972年初向英特爾的管理層提出了這一晶片設計,並推動了它的實施。六個月後,他終於獲得了開發的許可。Faggin於1972年11月從日本聘請了與他一起設計4004的Masatoshi Shima。Shima在Faggin的指導下進行了詳細設計[10],使用了Faggin為4000系列創造的隨機邏輯矽門設計方法。
8080被明確設計為一個面向更廣泛客戶的通用微處理器。大量的開發工作致力於嘗試將8008的輔助晶片的功能整合到一個封裝中。開發初期就決定8080不與8008二進制相容,而是選擇源相容性,一旦通過轉譯器執行,就可以允許新軟體不受8008同樣的限制。出於同樣的原因,以及為了擴充基於棧的常式和中斷的能力,棧被移至外部主記憶體。
注意到程式設計師在大型電腦系統中對通用暫存器的專用使用,晶片架構師Stanley Mazor決定8080的暫存器將是專用的,暫存器對有不同的用途集。這也使得工程師能夠更有效地將電晶體用於其他目的。[11]
Shima在1973年8月完成了布局。在NMOS製造調整之後,一個8080的原型在1974年1月完成。它有一個缺陷,即使用標準TTL裝置驅動時,因為高電流流入狹窄的線路而增加了地線電壓。在Shima對原型進行特性分析之前,英特爾已經按照銷售部門的指示生產了40,000個8080單元。它被發布時要求使用低功耗肖特基TTL(LS TTL)裝置。8080A修正了這個缺陷。[12]
Remove ads
功能

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 可以被推入或從堆疊中彈出。
Remove ads
與許多其他 8 位處理器一樣,所有指令都編碼為一個位元組(包括暫存器編號,但不包括立即數資料),以簡化操作。有些可以跟隨一到兩個位元組的資料,這可以是立即數運算元、主記憶體位址或埠號。像更進階的處理器一樣,它有自動 CALL 和 RET 指令用於多級過程呼叫和返回(甚至可以像跳轉一樣有條件地執行),以及用於在機器堆疊上儲存和恢復任何 16 位暫存器對的指令。存在八個一位元組的呼叫指令(RST),用於在固定位址 00h、08h、10h、...、38h 處的子程式。這些旨在由外部硬體提供,以呼叫相應的中斷服務常式,但也經常用作快速系統呼叫。執行最慢的指令是 XTHL,用於將 HL 暫存器對與堆疊指標指示的位址處儲存的值交換。
所有具有兩個運算元的 8 位元運算只能在 8 位累加器(A 暫存器)上執行。另一個運算元可以是立即值、另一個 8 位暫存器或由 16 位暫存器對 HL 位址的主記憶體位元組。增量和減量操作可以在任何 8 位暫存器或 HL 位址的主記憶體位元組上執行。支援直接複製任意兩個 8 位暫存器之間以及任何 8 位暫存器和 HL 位址的主記憶體位元組之間。由於 MOV 指令的規則編碼(使用了可用操作碼空間的四分之一),存在將暫存器複製到其自身的冗餘代碼(MOV B,B
),除了用於延遲外幾乎無用。然而,系統性的 MOV M,M 操作碼被用來編碼停止(HLT)指令,直到外部重設或中斷發生時停止執行。
雖然 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
[14]指令交換 HL 和 DE 暫存器對的值。XTHL 與堆疊上最後推入的項和 HL 交換。
Remove ads
Remove ads
8080 支援多達 256[15] 個輸入/輸出(I/O)埠,通過使用埠位址作為運算元的專用 I/O 指令訪問。[16]這種 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 微處理器系列中。
Remove ads
處理器狀態字中的一個位(見下文)指示處理器正在從堆疊訪問資料。使用這個訊號,可以實現一個獨立的堆疊主記憶體空間。這個功能很少被使用。
對於更進階的系統,在每個機器周期的開始,處理器在資料匯流排上放置一個八位狀態字。這個位元組包含的標誌決定了是訪問主記憶體還是 I/O 埠,以及是否需要處理中斷。
中斷系統狀態(啟用或禁用)也在一個單獨的引腳上輸出。對於簡單系統,其中不使用中斷,在某些情況下可能會發現這個引腳被用作額外的單位元輸出埠(例如,在蘇聯製造的流行的 Radio-86RK 電腦)。
以下是8080/8085組譯器原始碼,用於一個名為memcpy的子程式,該子程式將給定大小的資料塊從一個位置複製到另一個位置。資料塊一次複製一個位元組,資料移動和迴圈邏輯使用16位元操作。
1000 1000 1000 78 1001 B1 1002 C8 1003 1A 1004 77 1005 13 1006 23 1007 0B 1008 78 1009 B1 100A C2 03 10 100D C9 |
; memcpy --
; 将内存块从一个位置复制到另一个位置。
;
; 输入寄存器
; BC - 要复制的字节数
; DE - 源数据块的地址
; HL - 目标数据块的地址
;
; 返回寄存器
; BC - 零
org 1000h ;起始地址为1000h
memcpy public
mov a,b ;将寄存器B的值复制到寄存器A
ora c ;寄存器A与寄存器C进行按位或操作,结果存入寄存器A
rz ;如果零标志被置位,则返回
loop: ldax d ;从DE指向的地址加载数据到A
mov m,a ;将寄存器A的内容存储到HL指向的地址
inx d ;增加 DE
inx h ;增加 HL
dcx b ;BC减一(不影响标志位)
mov a,b ;将B复制到A(以便将BC与零比较)
ora c ;A = A | C (B和C都是零吗?)
jnz loop ;如果零标志未被置位,则跳转到'loop:'
ret ;返回
|

位址匯流排擁有自己的16個針腳,而資料匯流排有8個可用的針腳,無需任何復用。使用另外兩個針腳(讀和寫訊號),可以非常容易地組裝簡單的微處理器裝置。僅需為獨立的IO空間、中斷和DMA添加解碼處理器針腳訊號的晶片。
然而,針腳的負載能力是有限的;即使是簡單的電腦通常也需要匯流排放大器。
處理器需要三個電源(-5V、+5V和+12V)和兩個非重疊的高幅度同步訊號。然而,至少在蘇聯後期的版本КР580ВМ80А能夠僅使用單一的+5V電源工作,將+12V針腳連接到+5V,將-5V針腳接地。
隨晶片提供的文件中的針腳布局表,如下描述針腳:
支援晶片
8080的成功關鍵因素之一是有廣泛的支援晶片可用,提供串行通訊、計數/定時、輸入/輸出、直接主記憶體訪問和可程式化中斷控制等多種功能:
實現
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads