匯編語言實驗一


實驗任務一

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工具,文件的編譯、連接,匯編中棧的知識有了更加深入的理解。


免責聲明!

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



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