實驗任務一
1.教材實驗一
(1)
通過A命令將匯編語言輸入內存
用R cs和R ip將cs:ip指針指向第一條程序的位置073F:0100,接着用T命令逐條執行命令
(2)
將指令輸入內存並且調整cs:ip指針
重復執行若干次后得到0100即256
(3)
用D命令查看內存
發現日期為92年1月1日;
嘗試改變FFFF:0到FFFF:F的內容失敗,因為c0000到FFFFF為只讀存儲器,無法寫入數據
(4)
輸入后結果如圖
因為A0000到BFFFF為顯存空間
實驗任務二
見上試驗任務一(三)
試驗任務三
在debug中,使用e命令,向內存單元填寫數據。
-e b800:0 03 04 03 04 03 04 03 04 03 04
從b800:0開始的內存單元開始,依次寫入十六進制數據04 03,重復寫5次。
結果如下
在debug中,使用f命令,向內存單元批量填寫數據。
-f b800:0f00 0f9f 03 04
把內存單元區間b800:0f00 ~ b800:0f9f連續160個字節,依次重復填充十六進制數據03 04。
結果如下
嘗試改變內存數據
試驗任務四
(1)
初始,(sp)=0030
執行完push [0] 后 (sp)=002E
執行完push [2] 后 (sp)=002C
執行完push [4] 后 (sp)=002A
執行完push [6] 后 (sp)=0028
執行完pop [6] 后 (sp)=002A
執行完pop [4] 后 (sp)=002C
執行完pop [2] 后 (sp)=002E
執行完pop [0] 后 (sp)=0030
(2)棧空間數據如下圖
可見20:2e處為push[0]所壓入的字2010H
(3)
數據空間結果如下
數據沒有變化
(4)
結果如下
可以發現數據順序顛倒了
試驗任務五
結果如下
實驗任務六
過程如下
試驗任務七
補全代碼如下
assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,23 s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
(1)第一空填寫 cs,因為這是程序開始的地址;
第二空填寫 21;
查看代碼發現最后line3-line12所占空間為 0000H~0017H 17H=2
實驗結論
實驗二
嘗試改變FFFF:0到FFFF:F的內容失敗,因為c0000到FFFFF為只讀存儲器,無法寫入數據;
實驗三
截圖見上
實驗四
問題一:SS:SP 20:30 02300H
問題二:截圖見上
問題三:截圖見上
問題四:截圖見上
實驗五
問題一:debug的t命令在執行修改寄存器SS的指令時,下一條指令也緊接着被執行
問題二:查閱資料知,與中斷機制有關。
實驗六
見上
實驗七
見上
實驗總結
通過本次實驗,對dosbox下的debug工具及其命令,edit工具,文件的編譯、連接,匯編中棧的知識有了更加深入的理解。