intel 8086 cpu 以16 bits 寄存器實現 1MB尋址能力過程的簡單分析

寫在前面

本篇文章旨在說明題目所述問題,所以並不會對微處理器內部結構做更加詳盡的闡述。只會對涉及的結構作簡單的描述,因爲是小白,所以如果哪裏組織的有問題,歡迎各位小夥伴指正。


我們首先來看一下微處理器內部結構 控制器的部件組成:
寄存器
從圖中我們可以大致瞭解到命令在cpu內部的執行過程:

  1. 16 bits 的程序計數器首先從存儲器中取得指令放入8 bits 的指令寄存器。
  2. 指令寄存器暫存放入的指令然後交給譯碼器取進行解析。
  3. 指令譯碼器將解析後的命令交給控制邏輯部件去執行操作。
    我們知道存儲器的內部結構是以字節形式組織的,所以cpu每次只能取得一條指令然後執行,接着重複上述操作,直至所有指令全部執行完畢。這就是早期的串行結構設計。

8086 cpu 有 20 根地址線,所以這個就決定了該cpu能訪問外部存儲器的空間大小就爲 2^20 = 1MB,但是cpu 內部的程序計數器只有16 bits,所以它的尋址能力就被限制在了2 ^ 16 = 64KB大小,那麼問題來了,CPU是如何以64k字節寄存器的尋址能力完成 1MB空間大小的查詢呢?


爲了解決這一瓶頸,intel 公司將外部存儲器劃分成一個個64k的邏輯段,通過這種方式加上段內地址偏移即可通過16位寄存器實現1MB地址空間的尋址。舉個例子:

  • 用戶輸入一個操作指令,該指令通過總線傳遞到CPU內部,cpu通過段寄存器(cs)找到相應的邏輯段,接着根據段內指針找到相應的存儲單元,將存儲單元中的指令通過程序計數器讀入指令寄存器,然後執行後續操作。
  • 對於堆棧操作:cpu通過段寄存器(ss)找到相應的邏輯段,然後根據堆棧指針(sp)找到相應的存儲單元,接着執行命令的後續流程。

當然了最後的運行結果要經過地址產生與總線控制邏輯運算得到一個20位地址,然後交給相應的接口電路,繼而交給程序進行數據的處理。