實驗2 用機器指令和彙編指令程式設計

2022-06-05 02:27:08 字數 2935 閱讀 6402

四、實驗結論

任務一:

(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...