【匯編語言】(第三版)王爽著——實驗二


現在是學習匯編語言的第八周,要完成實驗任務二和三,因為我的一時疏忽一開始沒有加入教學班,所以實驗任務一雖然寫了隨便但是並沒有提交記錄……

不過這也算給自己一個教訓,剛開始學習並沒有很重視,但是看到了同班同學寫的博客感覺觸動挺大,很多人已經不僅僅局限於課堂上的學習知識了,自己在學習上也應該更加主動了

實驗任務二

實驗任務(1)

按實驗結果填空:

mov ax,0021

mov ds,ax

mov ax,2000

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內容為3130

push bx     ;sp=00FC;修改的內存單元的地址是2200:00FC內容為6462

pop ax    ;sp=00FC;ax=6122

pop bx    ;sp=00FC;bx=5CCA

 

push [4]     ;sp=00FC;修改的內存單元的地址是:00FE內容為3130

push [6]          ;sp=00FC;修改的內存單元的地址是:00FC內容為6264

為了方便輸入先用R CS:IP指令將CS:IP指向修改為指向1000:0000,再用e命令輸入e 0021:0 30 31 32 33 34 35 36 37

用D命令查看內存中的內容,發現已經修改成功

再用A命令輸入要求的指令,用T命令單步執行並觀察每一步指令的執行情況:

可以看到,雖然有15條指令但是只執行了14步,可以看到再執行完 mov ss,ax后,寄存器SP的值也被更改成了 0100,而這一步本應該是下一步要執行的命令。T指令都是只執行一步的。

關於這點書上給的是:Debug的T命令在執行修改寄存器SS的指令時,下一條指令也緊接着被執行。日后的課程會進一步解釋“中斷機制”,今天先寫在這里。

實驗(2)

用Debug工具使用A命令寫入指令並如實驗要求執行:

然后使用 e 命令修改 0021:0~0021:f 數據,及修改后查看是否正確寫入的操 作  使用 a 命令輸入的 p74中的指令,用T命令單步執行並且每次執行后查看2000:f中的變化:

前三段指令的功能:

2000進入AX寄存器,

AX中的值賦值給SS,

SP的值改為0010。

變化的原因為:

因為T命令是單步中斷,而CPU執行中斷時會保留現場,即將標志寄存器CS,IP等入棧,而實驗中棧的地址正好是要查詢的內存地址,但是里面的值會因為保留現場而被更改。

2.總結體會

通過觀察T命令的單步執行過程,對出棧入棧有了更深入的理解,同時初步了解到了中斷機制。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM