1. 程式人生 > >第二章 暫存器

第二章 暫存器

  • 一.通用暫存器

  • 通用暫存器通常用來存放一般性的資料。

  • 二.字在暫存器中的儲存

    出於對相容性的考慮,8086CPU可以一次性處理兩種尺寸的資料:

  • 1.位元組:記為byte,一個位元組由8個位元(即二進位制位)組成,可以存在8位暫存器中。
  • 2.字:記為word,一個字由兩個位元組組成,這兩個位元組分別稱為這個字的高位位元組和低位位元組。
  • 三.實體地址

    CPU通過地址匯流排送入儲存器的必須是一個記憶體單元的實體地址。 在CPU向地址總線上發出實體地址之前,必須在內部先形成這個實體地址。 不同的CPU可以有不同的形成實體地址的方式。

    16位結構的CPU

    • 16位結構的CPU具有下面幾方面的結構特性:

    • 運算器一次最多可以處理16位的資料
    • 暫存器最大寬度為16位
    • 暫存器和運算器之間的通路為16位
  • 記憶體單元的地址在送上地址匯流排之前,必須在CPU中處理、傳輸、暫時存放,對於16位CPU,能一次性處理、傳輸、暫時儲存16位的地址。

     8086CPU給出實體地址的方法

    8086CPU有20位地址線,可以傳送20位地址,達到1MB的定址能力。8086CPU又是16位結構,在內部一次性處理、傳輸、暫時儲存的地址為16位。從8086CPU的內部結構來看,如果將地址從內部簡單地發出,那麼它只能送出16位的地址,表現出的定址能力只有64KB。事實上,8086CPU採用一種在內部用兩個16位地址合成的方法來形成一個20位的實體地址。

  • 8086CPU相關部件的邏輯結構如圖所示:  當8086CPU要讀寫記憶體時:(1).CPU中的相關部件提供兩個16位地址,一個稱為段地址,一個稱為偏移地址(2).段地址和偏移地址通過內部匯流排送入一個稱為地址加法器的部件(3).地址加法器將兩個16位地址合併成喲個20位實體地址(4).地址加法器通過內部匯流排將20位實體地址送入輸入輸出控制電路(5).輸入輸出控制電路將20位實體地址送上地址匯流排(6).20位實體地址被地址匯流排傳送到儲存器地址加法器採用實體地址=段地址X16+偏移地址的方法用段地址和偏移地址合成物理地址

    四.段的概念

    "段地址"中的“段”的概念,其實來自於CPU。記憶體並沒有分段,段的劃分來自於CPU。

    五.段段暫存器

    段地址在8086CPU的段暫存器中存放。8086有4個段暫存器:CS,DS,SS,ES。

    六.CS和IP

    當8086CPUCPU要訪問記憶體時由這4個段暫存器提供記憶體單元的段地址。

  • CS和IP是8086CPU中兩個最關鍵的暫存器,他們指示了CPU當前要讀取指令的地址。

    • CS為程式碼段暫存器
    • IP為指令指標暫存器
  • 在8086PC中,任意時刻,設CS中的內容為M,IP中的內容為N,8086CPU將從記憶體M×16+N單元開始,讀取一條指令並執行。也可以描述為:8086機中,任意時刻,CPU將CS:IP指向的內容當作指令執行。

  • 如圖顯示了8086CPU讀取、執行指令的工作原理:

    • 8086CPU當前狀態:CS中的內容為2000H,IP中的內容為1000H
    • 記憶體20000H~20009H單元中存放著可執行的機器碼
  • 七.修改CS、IP的指令

    在CPU中,程式設計師能夠用指令讀寫的部件只有暫存器,程式設計師可以通過改變暫存器的內容實現對CPU的控制。 CPU從何處執行指令是由CS、IP中的內容決定的,程式設計師可以通過改變CS、IP中的內容來控制CPU執行目標指令。8086CPU大部分暫存器的值,都可以通過mov指令來改變。mov指令被稱為傳送指令。mov指令不能用於設定CS、IP的值,原因是:8086沒有提供這樣的功能。能夠改變CS、IP的內容的指令被統稱為轉移指令。

    八.程式碼段

    對於8086PC機,在程式設計時,可以根據需要,將一組記憶體單元定義為一段。可以將長度為N(N<=64KB5)的一組程式碼,存在一組地址連續、起始地址為16的倍數的記憶體單元中。存在這段記憶體單元中的程式碼可以成為一個程式碼段。

    將一段記憶體當作程式碼段,僅僅是我們在程式設計時的一種安排,CPU並不會由於這種安排,就自動的將我們定義的程式碼段中的指令當作指令來執行。CPU只認被CS:IP指向的記憶體單元中的內容為指令。要讓CPU執行我們放在程式碼段中的指令,必須要將CS:iP指向所定義的程式碼段中的第一條指令的首地址。

  • 九.總結
  • 段地址在8086CPU的段暫存器中存放。當8086CPU要訪問記憶體時,由段暫存器提供記憶體單元的段地址。8086CPU有4個段暫存器,其中CS用來存放指令的段地址。
  • CS存放指令的段地址,IP存放指令的偏移地址。
  • 8086機中,任意時刻,CPU將CS:IP指向的內容當作指令執行
  • 8086CPU的工作過程:(1)從CS:IP指向記憶體單元讀取指令,讀取的指令進入指令緩衝器(2)IP指向下一條指令(3)執行指令(4)轉到步驟(1),重複這個過程
  • 8086CPU提供轉移指令修改CS、IP的內容。