sp寄存器和bp寄存器_为什么早期x86处理器寄存器很少?
來自讀者的問題
有讀者在看我之前的關于16位系統上的調用約定的文章時,有這么一個問題:為什么在早期x86處理器上可用的寄存器為什么那么少?
8086是一款16位的微處理器,比它更早的是8080。它有6個8位寄存器,分別命名為:A, B, C, D, E, H和L。通過兩兩組合,我們可以用它們產生16位的虛擬寄存器,例如:BC, DE和HL。
另外,你甚至可以將一個16位的地址放入HL寄存器,并用另外一個虛擬寄存器”M”來解引用它。
所以,舉個例子,你可以這樣寫”MOV B, M”,表示:將HL寄存器指向的8位數值加載到B寄存器中。
8086處理器沿用了8080處理器的寄存器設計,并使用了如下的方式對它們進行了映射:
> A => AL
> H => BH, L => BL; HL => BX; M => [BX]
> B => CH, C => CL; BC => CX
> D => DH, E => DL; DE => DX
這就是為什么8086指令集只能通過[BX]而不是[CX]或[DX]來進行解引用操作,以實現將舊的8位代碼遷移到新的16位處理器。甚至連MS-DOS操作系統調用也以這種類似的方式進行設計,已實現代碼的機器級別轉換。
那SI和DI寄存器呢?
我猜想,它們的引入可能來自Z-80上IX和IY寄存器的靈感。Z-80是8080處理器的競品,它使用了8080的指令集并使用更多的寄存器對指令集進行了擴展。Z-80處理器上,可以通過[IX]和[IY]來解引用,同樣的在8086上,也可以通過[SI]和[DI]來解引用。
那BP寄存器呢?
我再次猜想,它的引入是為了能實現基于棧的參數傳遞。請注意,BP寄存器是8086處理器上唯一一個默認的SS段寄存器,它可以用來直接對內存進行訪問。
為什么不能像現代處理器動不動就上16個甚至128個寄存器那樣,添加更多的寄存器呢?
為什么在8086處理器上只保留了8個寄存器(AX, BX, CX, DX, SI, DI, BP, SP)呢?
簡單來說,是歷史原因吧。在8086那會兒,大部分處理器都沒有設計很多的寄存器。
另外一款處理器68000,設計了多達16個寄存器,但是如果你仔細看看它的設計文檔,這些寄存器中,只有一半能進行通用計算,而另外一半只能用來進行內存訪問。
總結
歷史(處理器的寄存器個數),由勝利者(Intel)書寫。
最后
Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關于Windows的小知識,對于廣大Windows平臺開發者來說,確實十分有幫助。
本文來自:《Why does the x86 have so few registers?》
總結
以上是生活随笔為你收集整理的sp寄存器和bp寄存器_为什么早期x86处理器寄存器很少?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python最短回文串_LeetCode
- 下一篇: 哆啦 A 梦正版授权,别克 ELECTR