1. 程式人生 > >實驗1 查看CPU和內存,用機器指令和匯編指令編程

實驗1 查看CPU和內存,用機器指令和匯編指令編程

中一 debug 輸入數據 存儲器 存儲 機器 src 分享圖片 一個

四、實驗結論

任務一:使用debug,將下面程序段寫入內存,逐條執行,觀察每條程序執行後CPU中相關寄存器的內容的變化

方法一:

(1)使用e命令在1000:0的起始位置將程序的機器碼讀取到內存單元中,利用d命令查看內存中的信息,並且利用u命令進行反匯編,將讀取的機器碼轉化為匯編指令;

技術分享圖片

(2)先改寫cs:ip的指向,使cs:ip的值指向寫入程序段的位置,然後用t命令分步調試,執行匯編指令

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

可以看到,當每次執行完一條匯編指令之後,不只是相應的寄存器的值由於匯編指令發生變化,cs:ip的值也會發生變化,這是為了保證匯編指令能夠持續進行,每執行一次匯編指令,cs:ip的值就會加上這條匯編指令的長度。

方法二:

(1)利用a命令寫入匯編指令

技術分享圖片

(2)用t命令對相應匯編指令分步調試,觀察相應寄存器的變化

結果與方法一的(2)相同

任務二:

將下面指令寫入從2000:0開始的內存單元中,利用這三條指令計算2的8次方。

(1)利用a命令從2000:0開始的內存單元寫入相應匯編指令

技術分享圖片

(2)更改cs:ip的指向,使其指向2000:0,用t命令分條執行匯編指令

技術分享圖片

可以看到,由於匯編指令“jmp 2000:0003”的存在,匯編指令的執行構成了一個循環。因此,我們可以用這段指令來計算2的8次方的具體值。

(3)多次用t命令執行循環後,得到結果

技術分享圖片

ax=100H

任務三:查看內存中的內容

(1)用r指令查看內存FFF00-FFFFF之間的內存信息

技術分享圖片

我們可以清楚的看到,該內存段中,右側只有“01/01/92”這一個日期,所以,不難猜測,該日期就是我們要找的主板生產日期

(2)嘗試改寫生產日期

技術分享圖片

可以看到,該日期對應的ASCII碼值為:30 31 2F 30 31 2F 39 32

我們將日期改寫為“02/02/92”,對應的ASCII碼為:30 32 2F 30 32 2F 39 32

用e命令對其進行改寫

技術分享圖片

改寫完之後,再次用d命令顯示內存信息

技術分享圖片

可以看到,內存信息並沒有發生改變,這是為什麽呢?

因為該生產日期寫在了主辦的ROM(只讀存儲器)上,因此我們無法對其進行改動。

任務四:

向內存從B8100H開始的單元處填寫數據

(1)用e命令向該內存單元處寫入數據

技術分享圖片

技術分享圖片

上面的兩張圖我們可以看出,當輸入一個數據時,會在屏幕右上角生成一個符合,輸入兩個相同的數據時,對應符號的顏色會發生改變。

(2)出現這種情況的原因

這是因為在8086CPU之中,內存地址空間分配情況導致的,8086CPU中,A0000-BFFFF是顯存地址空間,我們向顯存地址空間輸入數據,就是向顯存中寫入數據,這些數據當然會被顯示卡輸出到顯示器上,就出現了我們看到的結果。

五、總結與體會

匯編知識方面:

通過這次實驗,加深了我對匯編語言中各個指令使用的熟練程度,具體的實驗操作也使得我對於8086CPU的實際工作狀態有了認識。例如:cs:ip的地址代表著指令的執行指向,要執行相應指令之前先改變場cs:ip的指向;8086CPU機內存地址空間分配的情況;如何利用匯編指令進行數據的處理,計算;等等。通過此次實驗,我發現培養對於一門學科的興趣的最好方法就是讓自己參與進去,親自動手操作,這樣才能發現自己對於知識的掌握情況,才能發現自己的不足

紙上得來終覺淺,絕知此事要躬行

博客園操作方面:

隨筆的寫作過程中一定要按時保存,不要寄希望於系統的自動保存,做完一個部分及時保存到草稿箱才是最重要的,否則就會和我一樣,做到最後不小心按到退檔鍵,只能重新寫一遍了/(ㄒoㄒ)/~~。

實驗1 查看CPU和內存,用機器指令和匯編指令編程