實驗任務2
(1)在debug中,使用d命令查看生產日期

(2)使用e命令修改生產時期所在的內存單元,修改后,再次使用d命令查看

重啟debug,可見未發生變化

結論:ROM內存單元是只讀的,不可以修改。
實驗任務3
(1)在debug中使用e命令修改內存單元

(2)在debug中使用f命令批量填充內存單元

A0000~BFFFF的內存單元為顯存地址空間,寫入其中的數據會被顯示卡輸出到顯示器上
A0000h - AFFFFh是圖形模式(Graphic Mode)的顯存
B0000h - B7FFFh是黑白文字模式(Mono Text Mode)的顯存
B8000h - BFFFFh是彩色文字模式的顯存
B0000h - B7FFFh是黑白文字模式(Mono Text Mode)的顯存
B8000h - BFFFFh是彩色文字模式的顯存
實驗任務4
已知內存單元00201H~00207H中數據如下,用作棧空間:

輸入指令進行單步跟蹤
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 執行后,寄存器(sp) = 002E push [2] ; 執行后,寄存器(sp) = 002C push [4] ; 執行后,寄存器(sp) = 002A push [6] ; 執行后,寄存器(sp) = 0028 pop [6] ; 執行后,寄存器(sp) = 002A pop [4] ; 執行后,寄存器(sp) = 002C pop [2] ; 執行后,寄存器(sp) = 002E pop [0] ; 執行后,寄存器(sp) = 0030
問題:
1. 邏輯地址:0020:30H 物理地址:00230H
2. 執行到pop[6]前,SP應為執行到PUSH[6]后的值,為2A-2=28

3. pop[0]執行結束后,SP應為pop[0]執行前的2E-2=2C

4. 最后4條指令翻轉后,會變成70 80 50 60 30 40 10 20

實驗任務5
輸入如下內容
1. 程序沒有暫停,所有對ss寄存器進行值修改的指令執行后,都緊接着執行其下一行指令的修改,所以緊接着執行mov sp 30,顯示下一條為mov ax,2010,debug的單步調試就是一種中斷,而CPU在此期間不響應中斷

2. 0108是偏移地址IP,150F是程序段地址CS,因為中斷時需要保存原來程序的入口
實驗任務6
使用masm、link,匯編、鏈接,得到可執行文件task5.exe。運行程序。結合程序運行結果,理解程序功能。
在debug中,使用d命令,查看task6.exe的程序段前綴,觀察這256個字節的內容,驗證前兩個字節是否是CD 20
assume cs:code code segment start: mov cx, 10 mov dl, '0' s: mov ah, 2 int 21h add dl, 1 loop s mov ah, 4ch int 21h code ends end start
輸出 結果為0123456789

161F :0000處確實為CD 20,以及程序名在161F:0080

實驗任務7
下面程序的功能是,完成自身代碼的自我復制:把 mov ax, 4c00h 之前的指令復制到內存0:200開始的 連續的內存單元。 補全程序,並在debug中調試驗證,確認是否正確實現了復制要求
assume cs:code code segment mov ax, cs mov ds, ax ;數據段就是程序段 mov ax, 0020h mov es, ax mov bx, 0 mov cx, cx; cxw為程序長度 s: mov al, ds:[bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
復制成功
