1. 程式人生 > >匯編實驗2 用機器指令和匯編指令編程

匯編實驗2 用機器指令和匯編指令編程

使用 缺少 發現 狀態 完全 內存空間 接下來 回車 意思

實驗任務

(1)使用debug,將下面的程序段寫入內存,逐條執行,根據指令執行後的實際運行情況填空。

a.使用 e 命令修改 0021:0~0021:f 數據為30H,31H,32H,33H,34H,35H,36H,37H,並查看。

截圖

技術分享圖片

b.將下面的程序段寫入內存

mov ax,0021

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,【0】; ax=3130H;

add ax,【2】; ax=6462H;

mov bx,【4】; bx=3534H;

add bx,【6】; bx=6C6AH;

push ax; sp=00FEH; 修改的內存單元的地址為2200:00FEH,內容為6462H;

push bx; sp=00FCH; 修改的內存單元的地址為2200:00FCH,內容為6C6AH;

pop ax; sp=00FEH; ax=6C6AH;

pop bx; sp=0100H; bx=6462H;

push 【4】 sp=00FEH; 修改的內存單元的地址為2200:00FEH,內容為3534H;

push 【6】 sp=00FCH; 修改的內存單元的地址為2200:00FCH,內容為3736H;

以上是我對這段代碼的理論分析結果,接下來我們具體操作看看。

技術分享圖片

輸入期間發生了點小差錯,不過沒關系,繼續補上(不知道對內存空間有沒有影響)

技術分享圖片

技術分享圖片

ax,bx的值都符合理論上的值。第一個SP也符合。

技術分享圖片

技術分享圖片

查看內存單元,符合預期值。

(2)仔細觀察圖3.19中的實驗過程,然後分析:為什麽2000:0~2000:f中的內容會發生改變?

技術分享圖片

輸入7行指令,又打錯了,匯編代碼還需要多打打,用e命令對2000:0之後的16個內存單元值進行修改,

然後通過d命令對內存單元進行查看,修改成功。

技術分享圖片

2000:0開始的值未發生變化

技術分享圖片

這一步2000:0 f 的值開始發生變化,缺少了mov ss,10的操作,ss段寄存器的值變為2000,數據段的地址發生了變化,

技術分享圖片

進棧,操作

技術分享圖片

技術分享圖片

3366H進棧,

技術分享圖片

第一行代碼的功能為將ax的值賦為2000,把ss段寄存器的賦為2000,此時的棧頂2000:0010,mov sp,10,的意思經過查閱資料發現是留10個內存空間給接下來的寄存器比如cs等等。

至於書上寫的中斷機制,即debug每用t執行命令,會停止繼續執行,顯示當前每個存儲器的狀態和下步操作,而上面mov ss,10肯定執行了,但是下一步棧不能完全還原上一步中個存儲器的狀態,所以導致2000:0之後的f‘個內存單元的數值發生了變化。

總結與反思

1.還需要註意push是sp-2,pop是sp+2,空棧的棧頂為0010H。

2.對於-d命令可以時刻觀察某一或某段內存單元的內容,有助於進行實驗。

3.通過查閱資料可以初步了解中斷機制的過程,這是在以後的匯編編程中要註意的。

4.匯編語言的書寫 還需要經常練,經常寫錯,多敲個回車......

匯編實驗2 用機器指令和匯編指令編程