實驗1 用匯編指令編碼和調試


  • 實驗任務二:

 

    1. 實驗結論——無法修改
    2. 原因分析——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指令的單步執行是會引起中斷的以保證每次執行一條便停止。
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM