匯編語言 實驗二
實驗:
1)使用debug,將下面的程序段寫入內存,逐條執行,根據指令執行後的實際情況來填空。
① 在使用 a 命令輸入指令調試前,使用 e 命令將內存單元 0021:0 ~0021:7 連續 8 個字節數據修改為 30H, 31H, 32H, 33H,34H,35H,36H,37H ② 將 P74 實驗任務(1)中第 1行的 mov ax, ffff → 改為 mov ax, 0021
mov ax,0021
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ; ax=3130
add ax,[2] ; ax=6462
mov bx,[4] ; bx=3534
add bx,[6] ; bx=6C6A
push ax ;sp= 00FE 修改的內存單元地址是: 2200:00FE 內容為:6462
push bx ;sp= 00FC 修改的內存單元地址是: 2200:00FC 內容為:6C6A
pop ax ;sp= 00FE ;ax=6C6A
pop bx ;sp= 0100 ;bx=6462
push [4] ;sp= 00FE 修改的內存單元地址是: 2200:00FE 內容為:3534
push [6] ;sp= 00FC 修改的內存單元地址是:2200:00FC 內容為:3736
下面是相關的實驗的過程截圖:
從上面的這些過程以及步驟中 我們可以將這些自己的推測以及實驗的結果進行驗證。
2) 仔細的觀察下面的圖的實驗過程,然後分析:為什麽2000:0至2000:f中的內容會發生改變?
我們發現原來寄存器裏cs和IP裏的值都被賦值給地址了,這個貌似是書上所說的叫中斷機制。所以我就查了一下:
中斷就是一種特殊的信號,CPU一旦檢查到了這種信號,他就會停止當前的指令,轉而去處理這個特殊的信號,中斷信號分為兩種,一種是內中斷,也叫程序中斷,另一種是外中斷,也叫硬件中斷,硬件中斷一般是某某某硬件準備好了,向CPU請求中斷,而程序中斷一般是出現了一些錯誤,如除數為0,或者人工進行中斷,如Debug。 貌似是在中斷若想在計算機中使用自定義的中斷函數,只需要將中斷函數的地址註冊到中斷向量表中就可以了,即將中斷向量表中空閑的位置寫入自定義中斷函數的CS與IP。 這種情況好像正是我們這裏的情況 所以猜測了一下 應該是這個原因。 實驗結論: 1)這次可以非常有趣的了解到很多不同的指令。 2)可以更好的了解到棧的使用。 3)查找到並且了解了有關中斷機制的相關事情。匯編語言 實驗二