四、實驗結論
任務一:
(1)使用e命令將記憶體單元0021:0~0021:7連續8個位元組資料改為30h, 31h, 32h, 33h,34h,35h,36h,37h。
(2)將從0021:0開始修改8個記憶體單元後利用d命令檢視修改後記憶體中的值,檢視記憶體中是否已經修改完成;
(3)利用debug,將以下程式段寫入記憶體;
(4)在還沒有執行程式之前,利用r命令檢視當前cs:ip的指向;
從當前cs:ip的值來看,指向的就是我們所需要執行命令的開始位置,所以不需要修改cs:ip的值或者利用t命令的有參形式進行單部除錯,可以直接利用t命令執行
(5)用t命令進行單部除錯
執行 mov ax,0021;
執行 mov ds,ax;
執行 mov ax,2000;
執行 mov ss,ax;
question:執行mov ax,[0]之前我們還有一條命令 mov sp,0100 但是在執行完mov ss,ax之後就顯示下一條命令是mov ax,[0],但與此同時mov sp,0100這條指令是執行了的且sp暫存器中改變到了相對應的值。
通過查閱相關資料得知:當我在用t命令執行mov ss,ax之後,它的下一條指令mov sp,10也緊接著執行了。這個和「中斷機制」有關,現在我們需要記住的是:debug的t命令在執行修改ss的指令時,下一條指令也緊接著指令。對於mov ss,bx pop ss等指令都會發生上述的類似情況!
執行 mov ax,[0];
此時從0位址字單元中讀取乙個字3130h,所以此時ax暫存器中的值為3130h;
執行 add ax,[2];
先讀取2位址單元中讀取乙個字3332h,然後將3332h與3130h相加的到6462h後送回暫存器ax;
執行 mov bx,[4];
此時從4位址字單元中讀取乙個字3534h,所以此時bx暫存器中的值為3534h;
執行 add bx,[6];
先讀取6位址單元中讀取乙個字3736h,然後將3736h與3534h相加的到6c6ah後送回暫存器bx;
執行 push ax;
sp的值為00fe,ss的值為2200,所以此時棧結構修改的記憶體單元為:2200:00fe,內容為6462h;
執行 push bx;
sp的值為00fc,ss的值為2200,所以此時棧結構修改的記憶體單元為:2200:00fc,內容為6c6ah;
執行 pop ax;
sp的值為00fe,ax的值為6c6a;
執行 pop bx;
sp的值為0100,bx的值為6462;
執行 push [4];
sp的值為00fe,ss的值為2200,所以此時棧結構修改的記憶體單元為:2200:00fe,內容為6c6ah;
執行 push [6];
sp的值為00fc,ss的值為2200,所以此時棧結構修改的記憶體單元為:2200:00fc,內容為3736h;
任務二:
仔細觀察圖3.19中的實驗過程,然後分析:為什麼2000:0~2000:f中的內容會發生改變?
(1)首先按照題目要求完成指令
(2)檢視未執行命令之前2000:0~2000:f中的內容,此時這段記憶體中的資料全都是0;
(3)檢視當前個暫存器的值;
(4)利用t命令單部執行;
注:同樣的在執行mov ss,ax之後就執行了mov sp,10這條命令;
通過查閱相關的資料得知:兩條指令執行後靠近棧頂的10個位元組中值立即有了變化,是對定義棧段時部分執行環境變數進行暫存,靠近棧頂的10個位元組中的暫存資料分別是ss、ip、 cs 等的值。
mov sp,10 必須跟在 mov ss,ax 之後,這樣的規定是便於控制棧段的大小,防止在有子程式呼叫時出錯。(不太確定)
初始棧頂為2000:0010 初始棧底為2000:0010
五、總結與體會
存在的問題:
如上述命令mov sp,10必須跟在mov ss,ax之後,查閱資料得知這樣的規定是便於控制棧段的大小,防止在有子程式呼叫時出錯。但是具體是如何控制棧段的大小,我認為的是棧段的大小是由我們所定義的,然後實際在棧中讀入資料的時候,需要我們自己注意是否超出了棧的範圍。
conclusion:
1、在進行單部除錯程式的時候,最好把中間過程全部都輸出,比如某一段的資料以及當前各個暫存器中儲存的值,這樣我們可以更加理解這些操作具體在做什麼,在完成什麼任務。
2、在除錯的時候根據自己的理解先猜測下一步哪些內容會發生改變,然後再將執行結果輸出,然後將兩個結果進行比對。
實驗2 用機器指令和彙編指令程式設計
1.預備知識 用t命令執行修改棧暫存器 ss的指令,如 mov ss,ax,mov ss,0 pop ss sp的指令也緊接著執行,一般情況下,用 t命令執行一條指令後,會停止繼續執行,顯示出當前 cpu2.實驗任務 1 使用 debug 將上面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運 ...
實驗2 用機器指令和彙編指令程式設計
實驗二 用機器指令和彙編指令程式設計 實驗任務 1 使用debug,將下面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運 況填空。mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,0 add ax,2 mov bx,4...
實驗 用機器指令和彙編指令程式設計
1 教材實驗一結論 1 通過以下兩種方式將以下程式段寫入記憶體 e命令和a命令。b8 20 4e mov ax,4e20h 0516 14add ax,1416h bb 00 20mov bx,2000h 01d8 add ax,bx 89c3 mov bx,ax 01d8 add ax,bx b8...