【匯編語言】實驗2 用機器指令和匯編指令編程(2)
阿新 • • 發佈:2018-10-27
http 會同 display 出棧 ima ext lock ble body
四、實驗結論
任務一:使用debug,將下面程序段寫入內存,逐條執行,根據指令執行後的實際運行情況填空。
1.使用r命令查看各寄存器初始值。
2.使用a命令編寫匯編指令。
3.使用t命令單步執行。
4.分析
此實驗使用棧實現了寄存器值的交換
指令 | ax | bx | ss | sp |
mov ax,ffff | FFFF | 0000 | 073F | 00FD |
mov ds,ax | FFFF | 0000 | 073F | 00FD |
mov ax,2200 | 2200 | 0000 | 073F | 00FD |
mov ss,ax | 2200 | 0000 | 2200 | 0100 |
mov sp,0100 | ||||
mov ax,[0] | C0EA | 0000 | 2200 | 0100 |
add ax,[2] | C0FC | 0000 | 2200 | 0100 |
mov bx,[4] | C0FC | 30F0 | 2200 | 0100 |
add bx,[6] | C0FC | 6021 | 2200 | 0100 |
push ax | C0FC | 6021 | 2200 | 00FC |
push bx | C0FC | 6021 | 2200 | 00FC |
pop ax | 6021 | 6021 | 2200 | 00FE |
pop bx | 6021 | C0FC | 2200 | 0100 |
push [4] | 6021 | C0FC | 2200 | 00FE |
push [6] | 6021 | C0FC | 2200 | 00FC |
註:背景塗色的兩行代碼,在使用t命令單步執行時,同時進行。
6.書後習題
內存單元地址:DS:[ ]
棧地址:SS:SP
任務二:仔細觀察圖3.19中的實驗過程,然後分析,為什麽2000:0~2000~f中的內容會發生改變?
1.使用a命令輸入匯編指令;
使用e命令修改2000:0段內存單元的值,使之為0;
使用d命令查看修改後的內存單元的值。
2.使用t命令單步執行;
使用d命令查看2000:0段內存單元的值。
3.分析
ss:sp,意味著棧頂指針,匯編指令mov修改了ss:sp,使之變為2000:0。
當對棧進行操作時,ss:sp隨著入棧出棧的操作變化,會改變這一段內存單元的值。
五、總結與體會
通過任務一,我了解到,匯編指令對ss和sp是同時進行操作的,當兩條語句在相鄰的上下行時,使用t命令單步執行,這兩個指令會同時進行;我還進一步理解了,當使用到內存單元的地址[ ]時,默認以DS寄存器裏的值作為段地址,去訪問DS:[ ];我還知道了,pop ax是把棧頂元素的值,彈到ax裏,不是之前的錯誤理解(以為把ax彈出,其實一點都講不通)。
通過實驗二,我加深了對棧頂指針SS:SP的理解,明白了在編寫匯編指令時,要註意棧內存單元的選取,不能影響其他正常的操作。
【匯編語言】實驗2 用機器指令和匯編指令編程(2)