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

|實驗二 用機器指令和匯編指令編程

add 預測 deb 使用 例程 span 9.png 當前 地址

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

|實驗結論

(一、 預備知識

1.D命令也提供了一種符合CPU機理的格式:“D 段寄存器:偏移地址”,以段寄存器中的數據為段地址SA,列出從SA:偏移地址開始的內存區間中的數據。

查看從1000:0開始的內存區間中的內容

技術分享圖片

查看從1000:10~1000:18中的內容

技術分享圖片

查看當前代碼段中的指令代碼

技術分享圖片

查看當前棧段中的內容

技術分享圖片

2.在E、A、U命令中使用段寄存器。

在從1000:0開始的內存空間中寫入數據

技術分享圖片

以匯編指令的形式,顯示當前代碼段中的代碼,0代碼的偏移地址

技術分享圖片

以匯編指令的形式,向從1000:0開始的內存單元中寫入指令

技術分享圖片

3.debug的T命令在執行修改寄存器SS的指令時,下一條指令也緊接著被執行。

(二、p71實驗任務

1.使用debug,將下面的程序段寫入內存,逐條執行,根據指令執行後的實際運行情況填空。在使用 a 命令輸入指令調試前,使用 e 命令將內存單元 0021:0 ~0021:7 連續 8 個字節數據修改為 30H, 31H, 32H, 33H,34H,35H,36H,37H。

mov ax,0021

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]

add ax,[2]

mov bx,[4]

add bx,[6]

push ax

push bx

pop ax

pop bx

push [4]

push [6]

技術分享圖片

實驗前預測

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;修改的內存單元地址是00ff內容為6462

push bx ;sp=00fc;修改的內存單元地址是00fd內容為6C6A

pop ax ;sp=00fe;ax=6C6A

pop bx ;sp=0100;bx=6462

push [4] ;sp=00fe;修改的內存單元地址是00ff內容為3534

push [6] ;sp=00fc;修改的內存單元地址是00fd內容為3736

結果:

技術分享圖片

技術分享圖片

技術分享圖片

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;修改的內存單元地址是00ff內容為6462

push bx ;sp=00fc;修改的內存單元地址是00fd內容為6C6A

pop ax ;sp=00fe;ax=6C6A

pop bx ;sp=0100;bx=6462

push [4] ;sp=00fe;修改的內存單元地址是00ff內容為3534

push [6] ;sp=00fc;修改的內存單元地址是00fd內容為3736

分析:實驗時的確出現了t命令在執行修改寄存器ss的指令時,下一條指令也緊接著被執行。

2.分析為什麽2000:0~2000:f中的內容會發生改變。

技術分享圖片

按照題目要求輸入指令並執行

技術分享圖片

技術分享圖片

觀察發現這裏面有cs值(073f),ip值(0108),ax值(2000)

繼續執行指令並在push操作完成後用d命令查詢

技術分享圖片

發現寄存器ax中的值成功的被存入棧中

寫入pop指令將3366和3123出棧後,再次查詢棧中的數據

技術分享圖片

通過查詢資料,t命令實際是引發了單步中斷,執行中斷例程時,CPU會將一些中斷例程使用的的寄存器變量自動壓棧到棧中。

|總結與體會

通過對前三章的學習,我對匯編語言有了深入的了解,接觸並深入了解了一部分寄存器,從寄存器的角度理解了CPU的工作原理,以及內存訪問的一些方法,初次學習並掌握了mov,add,jmp,sub,push,pop指令。

最大的收獲就是,明白了匯編指令是不需要死記硬背的,可以根據自己的理解記憶。當我們對匯編指令的語法有新的想法時,可以直接用debug工具驗證,這樣也有助於我們加深理解。

|實驗二 用機器指令和匯編指令編程