- 實驗任務二:
-
- 實驗結論——無法修改
- 原因分析——ffff:0-f屬於ROM只讀存儲區,僅能進行寫入操作,無法修改其中內容。
- 實驗任務三:
修改內存地址:
當我輸入以下命令時:
遭到了愛心暴擊:
失去愛心:
原因:因為從A0000開始的一段地址范圍被用來尋址圖形模式的顯存,映射到了BIOS的ROM中,而從B8000開始的地址到BFFFF這段地址並不是映射到ROM中,而是顯存內,所以當修改B0000-B0FFF時不會在屏幕上出現愛心
- 實驗任務四:
填空題
問題一:
00220H ~ 0022fH用作棧空間。指令 mov ss, ax 和 mov sp, 30 執行后,
棧頂的邏輯地址和物理地址分別是
答:邏輯地址為20:0030;物理地址為2030.
問題二:
調試到匯編指令 push [6] 執行結束, pop [6] 執行之前,使用 d 20:20 2f 查看此時棧空間數據
問題三:
調試到匯編指令 pop [0] 執行結束后, pop [0] 指令執行結束后,使用d命令 d 20:0 7 查看此時數據空間內的數據有變化
問題四:
最后四條指令改變順序, pop [6] 指令執行結束后,使用d命令 d 20:0 7查看此時數據空間內的數據有變化
- 實驗任務五:
問題1:
使用t命令單步執行 mov ss, ax 時,是單步執行完這一條指令就暫停了嗎?后面的指令 mov sp, 30 是什么時候執行的?
答:有實驗結果可以看到執行完mov ss,ax時,不光是ss=0020,同時
sp也設為了0030,而能設置sp的只有指令mov sp,10,所以在使用t命令單步執行mov ss,ax的時候mov sp,10一定也執行了。通常t命令單步執行一個指令后會停止繼續執行,但當執行到mov ss,ax時並沒有停止執行,而是執行了mov sp,10才停止,可以猜測,當使用t命令執行修改寄存器SS的指令時,下一條指令會被直接執行。
問題2:
根據匯編指令,前三條指令執行后,00220H ~ 0022fH被設置為棧空間。並且,初始時,已通過f命令將初始棧空間全部填充為0。觀察單步調試時,棧空間00220H ~ 0022fH內存單元值的變化,特別是圖示中黃色下划線表示出的數據值。根據實驗觀察,嘗試思考和分析原因。
答:可以看到棧內多出了的內容剛好是當前執行指令的地址,由此可見,因為在使用 t 指令時單步執行指令從而引發了中斷,而在中斷過程中時會使用當前棧空間存放cpu關鍵數據,便於下次繼續執行。
- 實驗任務六:
程序源碼:
1 assume cs:code 2 3 code segment 4 start: 5 mov cx, 10 6 mov dl, '0' 7 s: mov ah, 2 8 int 21h 9 add dl, 1 10 loop s 11 12 mov ah, 4ch 13 int 21h 14 code ends 15 end start
匯編以及鏈接過程:
運行結果:
查看程序段前綴PSP:
- 實驗任務七:
補全空處后的源碼:
1 assume cs:code 2 code segment 3 start: 4 mov ax, cs 5 mov ds, ax 6 mov ax, 0020h 7 mov es, ax 8 mov bx, 0 9 mov cx, 17 10 s: mov al, [bx] 11 mov es:[bx], al 12 inc bx 13 loop s 14 15 mov ax, 4c00h 16 int 21h 17 code ends 18 end
原因:
1、將程序段的段地址傳遞給中間過渡寄存器ax,從而傳給代碼段寄存器ds。
2、cx中保存的是程序的長度,但有效程序不包括mov ax 4c00h 和int 21h 所以將17h傳遞給cx。
反匯編截圖:
- 實驗總結:
1、實模式、保護模式、長模式等CPU工作模式的區別
答:實模式指的是相當於cpu在裸機情況下的一種快速8086 ,但不能發揮80x86的功能;保護模式是指cpu在非裸機情況下 通過操作系統接管過去之后就會具備80x86的威力了;長模式相比於保護模式,增加了一些通用寄存器,並擴展通用寄存器的位寬,所有的通用寄存器都是 64 位,還可以單獨使用低 32 位。32 位可以拆分成一個低 16 位寄存器,低 16 位又可以拆分成兩個 8 位寄存器。
長模式依然具備保護模式絕大多數特性,如特權級和權限檢查。
2、通過這次實驗讓我知道了,在計算機內存中並不是所有的地址都可以被我們改變,有些系統專用的內存是不能操作的,否則可能會影響很多部件的工作情況;以及T指令的單步執行操作是會自動執行對棧寄存器SS操作的語句的下一條語句,同時T指令的單步執行是會引起中斷的以保證每次執行一條便停止。