實驗4實驗報告
實驗結論
實驗內容1
原始碼,這裡注意第三行的0b800h,在彙編源程式中,資料不能以字母開頭,所以在實際的資料b800前加了個0
編譯,連結,執行後的結果
將原始碼程式中字資料0403h改為0441h,再次編譯,連結,執行
可以得知,被我們存入字資料的這段記憶體單元為視訊記憶體,而螢幕上具體的輸出內容和存入的字資料的值有關
實驗內容2
原始碼
編譯,連結,生成可執行檔案,然後用debug開始進行除錯
先使用u命令反彙編進行檢視
由於該程式單步執行較為繁瑣,故使用g命令一次性將該程式執行完畢,可以看到“程式正常終止”說明程式已執行完畢,然後我們再使用d命令檢視0:200~0:23f記憶體單元的內容,可以發現成功的將0~63送到了這段記憶體區域(右邊顯示的為相應ASCII碼的轉碼符號)
實驗內容3
初始原始碼,這個程式的功能是將mov ax,4c00h之前的指令複製到記憶體0:200處,但是由於不能肉眼觀察出要複製的指令的長度(也就是要複製的位元組數),這裡的mov cx,__先暫且填了1,待使用debug除錯後可得到要複製的位元組數,然後再修改這裡的值,使程式達到目的;第一條指令和第二條指令可以看做把cs的值送入ds,後面的[bx]可以看作cs:bx,cs為程式碼段暫存器,也就是指向第一條指令,所以可以實現從第一條指令開始複製的操作
進行編譯,連結,然後用debug除錯
使用u命令反彙編,我們發現mov ax,4c00h之前的指令是從076a:0000~076a:0016,也就是說其機器碼佔用17h個位元組,故要完成前面的指令的複製,單位元組複製需要進行17h次,所以初始原始碼中的mov cx,0需要修改為mov cx,17h
修改後的源程式
重新編譯,連結,然後用debug開始除錯
由於該程式單步除錯起來較為繁瑣,且這個實驗內容的主要目的是做一個結果性的觀察,故使用g命令一次性執行完該程式
然後我們使用d命令檢視自0:200起的17h個記憶體單元的內容(精確到17h個記憶體單元是由於我們已經知道了mov ax,4c00h之前的指令的機器碼佔用17h個記憶體單元),發現其內容與mov ax,4c00h之前的機器碼一致,說明指定的指令被成功複製到了我們所指定的位置
總結與體會
通過本次實驗,我熟悉了[bx]和loop的具體實踐操作,有了一些更深的理解,和高階語言中的迴圈進行比較,使二者融會貫通。
在使用loop指令時,確定迴圈次數尤為重要。
段字首很好用,方便操作。
PS:私以為在完成實驗內容並且進行相應的文字說明時已經考慮的較為周到了,所寫的內容也較為豐富,故總結寫的就比較少了=。=