在裝完DosBox環境之后,就可以用debug模式進行匯編指令的編程了。
- 實驗內容:
首先用a指令進行數據的儲存,然后用t命令進行調試。
可以發現ax,bx在不同的命令下發生了改變,cs的地址和指令是相同的,ip的值也是根據輸入指令的長度而不斷的增加。
(2)將下面3條指令寫入從2000:0開始的內存單元中,利用這3條指令計算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
先觀察一下實驗要求,執行完第一步后ax= 1,第二步后ax = 2,執行add 1次 2*2,執行2次,就是2*2*2就是2的3次方,那么2的8次方 就 add 執行 7次。
執行之前先將指令指向add語句 這樣就會重復執行 add語句,用jmp 指令更改CS、IP寄存器的值,從而控制CPU執行目標指令。之后,就可執行我們寫的匯編指令了,我們要先使用r指令改變 cs 和ip的指向,cs為代碼段寄存器,ip為指針寄存器。在任意時刻,CPU將cs:ip指向的內容當做指令執行。
關於執行命令t的執行次數:執行第一二步執行需 2個t,那么執行第三步的t的時候實際上只是改變cs:ip的指向,並沒執行cs:ip指向內容的機器指令,后面的7個jmp 每個需要執行2個t才能執行add方法。所以共需要執行t 16次才能計算出2的8次方。
第一次t命令:
最后一次t命令:(最后短線位置的t手抖了)
(3)查看內存中的內容。
PC機主板上的ROM中有一個生產日期,在內存FFF00H-FFFFFH的某幾個單元中,請找到這個生產日期並試圖改變它。
、
嘗試修改:
發現無法修改。
(4)向內存從B8100H開始的單元中填寫數據,如:
-e B8100:0000 01 01 02 02 03 03 04 04
請讀者先填寫不同的數據,觀察產生的現象;再改變填寫的地址,觀察產生的現象。
可以看到,向B8100H單元中輸入這些數據后,可以觀察到界面上出現了一些彩色的圖案,黃方框標識。
接着在相同的地址內填寫不同的數據,可以看到出現了完全不同的圖案。
下面改變輸入數據的地址,可以看到顯示的內容不變,位置改變了。
說實話,我也不知道這是怎么回事。我就去查了查,度娘告訴我:這一段內存為顯存,是RAM,可以改變其值在屏幕上的顯示,其中這一個字符占兩個字節,前一個(低)為字符的ASCII碼,后一個(高)為要顯示的顏色。
實驗總結:
(1)首先得理解並且熟練操作的一些指令。
在debug模式下常用的命令:
R命令:查看、改變CPU寄存器的內容;
D命令:查看內存中的內容;
E命令:改寫內存中的內容;
U命令:將內存中的機器指令翻譯成匯編指令;
T命令:執行一條機器指令;
A命令:以匯編指針的格式在內存中寫入一條機器指令。
(2)通過這次實驗,對debug的一些基本操作有了基本了解,如何寫入機器代碼和匯編代碼,查看所需要的內容,並且知道了某些內存中存儲的內容,以及它們中的內容是否可變等知識。
如果有什么錯誤的話,還希望各位大佬指出。謝謝!