彙編語言學習筆記一:CS和IP寄存器

1、CS是代碼段寄存器,IP是指令指針寄存器(相當於偏移地址)。修改CS、IP的指令不同於修改通用的寄存器值的指令,修改通用寄存器的值可以用mov 指令(mav ax,123),mov指令被稱爲傳送指令。修改CS、IP的指令是jmp指令。jmp指令被稱爲轉移指令。

(1)同時修改代碼段寄存器和指令指針寄存器,形如jmp 段地址:偏移地址。

jmp2AE3:3,執行後:CS=2AE3H,IP=0003H,CPU將在2AE33H處讀取指令

(2)僅想修改IP的內容,形如“jmp 某一合法寄存器”,功能是用某一合法寄存器中的值修改IP的內容

jmpax,指令執行前:ax=1000H,CS=2000H,IP=0003H

        指令執行後:ax=1000H,CS=2000H,IP=1000H。

2、一般來說,CPU在訪問內存的時候要由相關部件提供內存單元的段地址和偏移地址,送入地址加法器合成物理地址。段寄存器提供段地址。8086CPU有4個段寄存器:CS、DS、ES、SS。典型的提供段地址和偏移地址的寄存器爲CS和IP寄存器。也就是說,CPU會將CS:IP合成的物理地址指向的內容當作指令執行。CPU執行指令的步驟一般是:

(1)將CS、IP中的內容送入地址加法器(段地址*16+偏移地址)合成物理地址。

(2)地址加法器將物理地址送入輸入輸出控制電路

(3)輸入輸出控制電路將物理地址送上地址總線

(4)然後CPU從物理地址指向的內存單元讀取機器指令,並將機器指令通過數據總線送入CPU的輸入輸出控制電路。

(5)輸入輸出控制電路將讀取的指令送入指令緩衝器,同時IP的內容更新爲原內容加指令長度。

(6)然後,執行控制器執行機器指令,並將執行後的內容送入相應的寄存器。


3、在編程時,可以根據需要將一組內存單元定義爲一個段。我們可以將長度爲N(N<=64KB,因爲偏移地址長度爲16位,最大爲64KB)的一組代碼存在一組連續、起始地址爲16的倍數的內存單元中。這樣,這段內存就可以看成是代碼段,用來存放代碼的。


4、查看CPU和內存,用機器指令和彙編指令編程,做實驗

(1)打開程序調試工具:運行”cmd”->輸入debug。

(2)Debug功能

   1)用R命令查看、改變CPU寄存器的內容

   2)用D命令查看內存中的內容

   3)用E命令改寫內存中的內容

   4)用U命令將內存中的機器指令翻譯成彙編指令

   5)用T命令執行一條機器指令

   6)用Debug的A命令以彙編指令的格式在內存中寫入一條機器指令

Normal>(3)輸入輸出控制電路將物理地址送上地址總線

(4)然後CPU從物理地址指向的內存單元讀取機器指令,並將機器指令通過數據總線送入CPU的輸入輸出控制電路。

(5)輸入輸出控制電路將讀取的指令送入指令緩衝器,同時IP的內容更新爲原內容加指令長度。

(6)然後,執行控制器執行機器指令,並將執行後的內容送入相應的寄存器。


r命令查看寄存器的內容


r命令修改寄存器的內容(修改了ax、cs、ip寄存器的內容)


d命令查看內存中的內容(d 起始地址),顯示分別爲地址、地址中的內容、內容的ascll字符形態。


d命令查看某範圍的內存內容(形如d1000:0 9)。


e命令改寫內存中的內容(e 起始地址數據 數據 數據..)


e命令向內存中寫入字符或字符串


e命令向內存中寫入機器碼,並使用u命令查看機器碼對應的彙編



t命令執行執行一條或多條指令(先改變cs、ip寄存器的值)


a命令以彙編指令的形式在內存中寫入機器指令,並用d指令查看對應的機器碼(之後也可以用t指令執行相應的指令)


發佈了35 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章