王爽之《組合語言》學習重點四

2021-05-01 12:46:43 字數 3796 閱讀 3419

2.9  段暫存器

我們前面講到,8086cpu在訪問記憶體時要由相關部件提供記憶體單元的段位址和偏移位址,送入位址加法器合成實體地址。這裡,需要看一下,是什麼部件提供段位址。段位址在8086cpu的段暫存器中存放。8086cpu有4個段暫存器:cs、ds、ss、es。當8086cpu要訪問記憶體時由這4個段暫存器提供記憶體單元的段位址。本章中只看一下cs。

2.10  cs和ip

cs和ip是8086cpu中兩個最關鍵的暫存器,它們指示了cpu當前要讀取指令的位址。

cs為**段暫存器,ip為指令指標暫存器,從名稱上我們可以看出它們和指令的關係。

在8086pc機中,任意時刻,設cs中的內容為m,ip中的內容為n,8086cpu將從記憶體m*16+n單元開始,讀取一條指令並執行。

也可以這樣表述:8086機中,任意時刻,cpu將cs:ip指向的內容當作指令執行。

圖2.10展示了8086cpu讀取、執行指令的工作原理(圖中只包括了和所要說明的問題密切相關的部件,圖中數字都為十六進製制)。

圖2.10  8086pc讀取和執行指令的相關部件

圖2.10說明如下。

(1) 8086cpu當前狀態:cs中的內容為2000h,ip中的內容為0000h;

(2) 記憶體20000h~20009h單元存放著可執行的機器碼;

(3) 記憶體20000h~20009h單元中存放的機器碼對應的彙編指令如下。

下面的一**(圖2.11~圖2.19),以圖2.10描述的情況為初始狀態,展示了8086cpu讀取、執行一條指令的過程。注意每幅圖中發生的變化(下面對8086cpu的描述,是在邏輯結構、巨集觀過程的層面上進行的,目的是使讀者對cpu工作原理有乙個清晰、直觀的認識,為組合語言的學習打下基礎。其中隱蔽了cpu的物理結構以及具體的工作細節)。

圖2.11  初始狀態(cs:2000h,ip:0000h,cpu將從記憶體2000h×16+0000h處讀取指令執行)

圖2.13  位址加法器將實體地址送入輸入輸出控制電路

圖2.14  輸入輸出控制電路將實體地址20000h送上位址匯流排

圖2.15  從記憶體20000h單元開始存放的機器指令b8 23 01通過資料匯流排被送入cpu

圖2.16  輸入輸出控制電路將機器指令b8 23 01送入指令緩衝器

圖2.17  ip中的值自動增加

(讀取一條指令後,ip中的值自動增加,以使cpu可以讀取下一條指令。因當前讀入的指令b82301長度為3個位元組,所以ip中的值加3。此時,cs:ip指向記憶體單元2000:0003。)

圖2.18  執行控制器執行指令b8 23 01(即mov ax,0123h)

圖2.19  指令b8 23 01被執行後ax中的內容為0123h

(此時,cpu將從記憶體單元2000:0003處讀取指令。)

下面的一**(圖2.20~圖2.26),以圖2.19的情況為初始狀態,展示了8086cpu繼續讀取、執行3條指令的過程。注意ip的變化(下面的描述中,隱蔽了讀取每條指令的細節)。

圖2.20  cs:2000h,ip:0003h(cpu將從記憶體2000h×16+0003h處讀取指令bb 03 00)

圖2.21  cpu從記憶體20003h處讀取指令bb 03 00入指令緩衝器(ip中的值加3)

圖2.22  執行指令bb 03 00(即mov bx,0003h)

圖2.23  cpu從記憶體20006h處讀取指令89 d8入指令緩衝器(ip中的值加2)

圖2.24  執行指令89 d8(即mov ax,bx)後,ax中的內容為0003h

圖2.25  cpu從記憶體20008h處讀取指令01 d8入指令緩衝器(ip中的值加2)

圖2.26  執行指令01 d8(即add ax,bx)後,ax中的內容為0006h

通過上面的過程展示,8086cpu的工作過程可以簡要描述如下。

(1) 從cs:ip指向的記憶體單元讀取指令,讀取的指令進入指令緩衝器;

(2)ip=ip+所讀取指令的長度,從而指向下一條指令;

(3)執行指令。轉到步驟(1),重複這個過程。

在8086cpu加電啟動或復位後(即cpu剛開始工作時)cs和ip被設定為cs=ffffh,ip=0000h,即在8086pc機剛啟動時,cpu從記憶體ffff0h單元中讀取指令執行,ffff0h單元中的指令是8086pc機開機後執行的第一條指令。

現在,我們更清楚了cs和ip的重要性,它們的內容提供了cpu要執行指令的位址。

我們在第1章中講過,在記憶體中,指令和資料沒有任何區別,都是二進位制資訊,cpu在工作的時候把有的資訊看作指令,有的資訊看作資料。現在,如果提出乙個問題:cpu根據什麼將記憶體中的資訊看作指令?如何回答?我們可以說,cpu將cs:ip指向的記憶體單元中的內容看作指令,因為,在任何時候,cpu將cs、ip中的內容當作指令的段位址和偏移位址,

用它們合成指令的實體地址,到記憶體中讀取指令碼,執行。如果說,記憶體中的一段資訊曾被cpu執行過的話,那麼,它所在的記憶體單元必然被cs:ip指向過。

王爽之《組合語言》學習重點四

2.9 段暫存器 我們前面講到,8086cpu在訪問記憶體時要由相關部件提供記憶體單元的段位址和偏移位址,送入位址加法器合成實體地址。這裡,需要看一下,是什麼部件提供段位址。段位址在8086cpu的段暫存器中存放。8086cpu有4個段暫存器 cs ds ss es。當8086cpu要訪問記憶體時由...

王爽之《組合語言》學習重點十一

實驗五 編寫 除錯具有多個段的程式 1 將下面的程式編譯連線,用debug載入 跟蹤,然後回答問題 assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data...

組合語言學習筆記3(王爽)

乙個字 兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。ds暫存器通常用來存放cpu要訪問資料的段位址,eg 0 表示記憶體單元的偏移位址。mov...