日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sp寄存器和bp寄存器_为什么早期x86处理器寄存器很少?

發布時間:2024/9/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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处理器寄存器很少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。