實驗任務一:
一、用R命令查看,改變CPU寄存器的內容
查看:
修改AX的內容:
二:用D命令查看內存中的內容
D命令預設地址處的內容
查看特定長度的內容
三、用E命令修改內存中的內容
四、用U命令將內存單元中的內容翻譯為匯編指令顯示
五、用T命令執行指向CS:IP的單條指令
六、用A命令以匯編的形式向內存中寫入機器指令
實驗任務二:
可以看出,日期存在於FFF0:00F6到FFF0:00FD中,占八個字節。
嘗試修改:
修改無效。原因是在8086中,C0000~FFFFF中內容用作ROM空間,受到保護無法修改。
實驗任務三:
在debug中使用E命令向內存單元填充數據
實驗任務四:
錄入如下內容:
單步執行,觀察結果。
填空:
002E 002C 002A 0028 002A 002C 002E 0030
回答問題:
問題1:邏輯地址:0020:0030、物理地址:00230h
問題2:
問題3:
問題4:
實驗任務五:
問題1:兩條指令一起執行。debug的T命令在執行修改寄存器SS的指令時,下一條指令也跟着執行。
問題2:根據題意進行跟蹤。
可以看到題目中划線部分為代碼偏移量,即IP與CS的值。隨着代碼的執行,代碼的偏移量在不斷地變化:0108->010B->010C->010F->0110
執行入棧操作后,棧頂指針向前移動2個字節,所以整體向前移動2個字節。
實驗任務五:
使用masm與link進行編譯連接
觀察程序段前綴,發現前兩個字節是CD 20。驗證完成。
實驗任務七:
補全代碼,完成代碼自身的自我復制:把mov ax, 4c00h之前的指令復制到內存0:200開始的
連續的內存單元。
第一空:cs
為了定位到代碼的開頭,使用了代碼段的開頭cs
第二空:23
可以使用debug的u命令得到。
匯編截圖: