實驗結論:
實驗任務二:
1、查看生產日期
由上圖可看出生產日期為92年1月1日。
2、修改生產日期
觀察結果可知我們並未成功修改生產日期,原因在於生產日期位於ROM存儲器,即只讀存儲器中,其數據只能被讀取而無法被修改。
實驗任務三:
1、e命令修改內存單元
2、f命令批量填充內存單元
3、修改內存的數據
4、修改內存地址
綜上,我們可以得出以下結論:
(1)b8000~b8f9f 為顯存地址空間。
(2)顯示時為字型數據,一個字符占兩個內存單元,低地址內存單元存放字符的ASCII碼,高地址內存單元存放的數據對應字符的顏色。
(3)字符在顯示器上顯示的位置與偏移地址對應。
為驗證結論(3),進行測試
經測試,可以認為結論(3)正確。由此可以發現,在當前環境下,顯示內存地址的大小與顯示器的尺寸相匹配。
實驗任務四:
問題1:邏輯地址:0020H:0030H 物理地址:00230H
問題2:
問題3:
問題4:
實驗任務五:
問題1:單步執行完mov ss, ax后,程序並不暫停,而是緊接着執行mov sp, 30。究其原因,在mov ss, ax指令執行后,CPU不響應任何中斷,包括單步中斷,所以Debug設置好的用來顯示寄存器狀態和等待輸入命令的中斷處理程序根本沒有得到執行,所以我們看不到預期的結果。CPU接着向下執行后面的指令mov sp, 30,然后響應單步中斷,我們才看到正常的結果。
問題2:觀察結果可知,CS和IP的值被壓入棧中。查詢資料得知,t命令是單步中斷,CPU會保護現場,即順序地標志寄存器、CS,IP入棧。
實驗任務六:
源碼:
1 assume cs:code 2 code segment 3 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 15 code ends 16 end start
編譯、連接、運行:
查看程序段前綴PSP:
實驗任務七:
完整源碼:
1 assume cs:code 2 code segment 3 4 start: 5 mov ax, cs 6 mov ds, ax 7 mov ax, 0020h 8 mov es, ax 9 mov bx, 0 10 mov cx, 0017h 11 s: mov al, [bx] 12 mov es:[bx], al 13 inc bx 14 loop s 15 16 mov ax, 4c00h 17 int 21h 18 19 code ends 20 end start
填寫過程:已知程序的功能是自身代碼的自我復制,結合已有代碼可知,寄存器ds中應存儲源始單元的地址,即程序的第一條指令的地址,亦即cx寄存器中的數據,所以第一空填cx。第二空需要填寫循環次數,由於程序功能為復制mov ax, 4cooh之前的指令,故循環次數應與相應的代碼長度一致。此時有兩種方法,第一種是直接人工計算代碼長度,第二種是先任意填一循環次數,隨后調試時記錄代碼總長度(cx寄存器中的內容),由此計算出正確的循環次數並重新填寫。第一種方法涉及的匯編語言指令長度相關知識可見於總結,在此我選擇第二種方法:先令循環長度為0020H,調試發現代碼長度為001C,減去mov ax, 4cooh和int 21h兩條指令的長度共5個字節,得出正確的循環次數為23次,即0017H,將其填回第二空,源代碼正式補充完整。
補充完源代碼后調試:
實驗總結:
1、存於ROM中的數據只能被讀取而無法被使用。
2、當前環境下:
(1)b8000~b8f9f 為顯存地址空間。
(2)顯示時為字型數據,一個字符占兩個內存單元,低地址內存單元存放字符的ASCII碼,高地址內存單元存放的數據對應字符的顏色。
(3)字符在顯示器上顯示的位置與偏移地址對應。
3、Debug的t命令在執行修改寄存器ss的指令時,下一條指令也緊跟着被執行。
4、匯編語言指令長度參考:http://t.zoukankan.com/Java-Starter-p-10981728.html
5、實模式:運行真實的指令;發往內存的地址是真實地址;實模式下的寄存器都是16位的。
保護模式:相比於實模式,將所有通用寄存器擴展到32位;通過映射表、特權級等方式實現了不同任務之間和同一任務內的保護。
長模式:基本與保護模式相同。
參考文章:https://blog.csdn.net/qq_48322523/article/details/119935422?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.highlightwordscore&spm=1001.2101.3001.4242.1