1. 程式人生 > 其它 >實驗一 8066彙編指令編碼和除錯

實驗一 8066彙編指令編碼和除錯

2.實驗任務二

(1)debug中,使用d命令檢視生產日期

日期為01/01/92

(2)使用e命令修改生產時期所在的記憶體單元,修改後,再次使用d命令檢視

可以看出日期無法修改,在8086CPU中,C0000~FFFFF用於各類ROM空間,寫入資料操作是無效的,這相當於改寫只讀儲存器的內容。

3.實驗任務三

1debug中,使用e命令,向記憶體單元填寫資料。

-e b800:0 03 04 03 04 03 04 03 04 03 04 b800:0開始的記憶體單元開始,依次寫入十六進位制資料04 03,重複寫5次。

2debug中,使用f命令,向記憶體單元批量填寫資料。

-f b800:0f00 0f9f 03 04

把記憶體單元區間b800:0f00 ~ b800:0f9f

連續160個位元組,依次重複填充十六進位制資料03 04

地址改變,觀察結果

左上角的圖案因為地址的改變而發生了變化,不同的資料控制著不同的顏色和樣式,不同的地址控制著不同的位置。

4.實驗任務四

根據在debug環境中除錯觀察結果,填空並回答問題。

填空

002EH002CH002AH0028H002AH002CH002EH0030H

問題1:題目要求是把00220H ~ 0022fH用作棧空間。指令 mov ss, ax mov sp, 30 執行後,

棧頂的邏輯地址和實體地址分別是?

邏輯地址00200030實體地址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問題1:使用t命令單步執行 mov ss, ax 時,是單步執行完這一條指令就暫停了嗎?後面的指令 mov sp, 30 是什麼時候執行的?

是暫停了,使用t命令只會執行一條命令。再次使用t命令,mov sp 30將會執行

2問題2:根據彙編指令,前三條指令執行後,

00220H ~ 0022fH被設定為棧空間。並且,初始時,已通過f命令將初始棧空間全部填充為0。觀察單步除錯時,棧空間00220H ~ 0022fH記憶體單元值的變化,特別是圖示中黃色下劃線表示出的資料值。根據實驗觀察,嘗試思考和分析原因。

程式碼執行,程式碼的偏移地址發生變化0108->010B->010C->010F->0110

資料入棧,棧頂指標不斷向下移,棧偏移地址不斷變化;30->2E->2C

6. 實驗任務6

1給出程式原始碼

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

(2)給出使用masmlink對程式彙編連結過程截圖,以及,執行可執行程式task6.exe的執行結果截圖

(3)給出在debug中檢視task6.exe的程式段字首PSP的截圖。

7. 實驗任務7

1給出補全後的完整原始碼。說明程式中兩個空填寫的依據。

assume cs:code 
code segment 
mov ax, _cx____ 
mov ds, ax 
mov ax, 0020h 
mov es, ax 
mov bx, 0 
mov cx, _17h__ 
s: mov al, [bx] 
mov es:[bx], al 
inc bx 
loop s 
mov ax, 4c00h 
int 21h 
code ends
end

第一個空:ds的值就是程式段的段地址cs

第二個空:cx的含義是迴圈次數,程式的執行方式是每次複製一個位元組,因此迴圈的次數即為程式的長度cx,17

2debug中除錯,使用g命令將程式執行到 loop s 之後、 mov ax, 4c00h 之前,然後,使用u命令對0:200開始的記憶體單元反彙編,確認是否把task7.asmline3-line12的程式碼複製到了目標記憶體空間。

3給出使用g命令執行到指定點和使用u命令反彙編0:200到複製程式碼長度這一段記憶體空間的截圖。