實驗1 8086匯編指令編碼和調試
1. 實驗任務1
已完成
2. 實驗任務2
- 使用d命令查看生產時期:
![]()
- 使用e命令修改生產日期所在內存單元,修改后,再次使用d命令查看
![]()
- 結論:不能修改,因為是ROM只讀存儲器。
3. 實驗任務3


4. 實驗任務4
根據在debug環境中調試觀察結果,填空并回答問題。
- 填空
1 mov ax 2 mov ds, ax 3 mov ss, ax 4 mov sp, 30 5 push [0] ; 執行后,寄存器(sp) = 2e 6 push [2] ; 執行后,寄存器(sp) = 2c 7 push [4] ; 執行后,寄存器(sp) = 2a 8 push [6] ; 執行后,寄存器(sp) = 28 9 pop [6] ; 執行后,寄存器(sp) = 2a 10 pop [4] ; 執行后,寄存器(sp) = 2c 11 pop [2] ; 執行后,寄存器(sp) = 2e 12 pop [0] ; 執行后,寄存器(sp) = 30
- 回答問題
問題1:題目要求是把00220H ~ 0022fH用作棧空間。指令 mov ss, ax 和 mov sp, 30 執行后, 棧頂的邏輯地址和物理地 址分別是?
邏輯地址是20:30
物理地址是00230H
問題2:單步調試到匯編指令 push [6] 執行結束, pop [6] 執行之前,使用 d 20:20 2f 查看此 時棧空間數據,給出實驗截 圖。

問題3:匯編指令 pop [0] 執行結束后, pop [0] 指令執行結束后,使用d命令 d 20:0 7 查看此 時數據空間內的數據是否有 變化。給出實驗截圖

問題4:如果把最后四條指令改成截圖中的順序, pop [6] 指令執行結束后,使用d命令 d 20:0 7 查看此時數據空間內的 數據是否有變化。給出實驗截圖。

5. 實驗任務5
回答問題1和問題2。
問題1:使用t命令單步執行 mov ss, ax 時,是單步執行完這一條指令就暫停了嗎?后面的指令 mov sp, 30 是什么時候執行的?
不是,后面的指令隨即執行。
問題2:根據匯編指令,前三條指令執行后,00220H ~ 0022fH被設置為棧空間。并且,初始時,已通 過f命令將初始棧空間全部填充為0。觀察單步調試時,棧空間00220H ~ 0022fH內存單元值的變化,特 別是圖示中黃色下劃線表示出的數據值。根據實驗觀察,嘗試思考和分析原因。

黃色下劃線的數據是cs、ip寄存器中的數據。mov ss, ax指令執行之后,棧空間存放當前指令程序段地址(cs)和偏移地址(ip)。ip指針改變則棧中數據值也發生相應改變,隨著數據入棧,數據的位置發生移動。
6. 實驗任務6
1 assume cs:code 2 code segment 3 start: 4 mov cx, 10 5 mov dl, '0' 6 s: mov ah, 2 7 int 21h 8 add dl, 1 9 loop s 10 11 mov ah, 4ch 12 int 21h 13 code ends 14 end start

7. 實驗任務7
1 assume cs:code 2 code segment 3 mov ax, cs 4 mov ds, ax 5 mov ax, 0020h 6 mov es, ax 7 mov bx, 0 8 mov cx, 17h 9 s: mov al, [bx] 10 mov es:[bx], al 11 inc bx 12 loop s 13 mov ax, 4c00h 14 int 21h 15 code ends 16 end

實驗總結(選)
附: 8086CPU工作在實模式下,通過本次實驗,可以通過實踐體驗到,在實模式下,程序員可以通過程序直 接對內存進行操作,對內存使用沒有任何保護。請查閱資料,了解CPU工作模式,了解實模式、保護模 式、長模式等CPU工作模式的區別。




浙公網安備 33010602011771號