1. 程式人生 > >用機器指令和匯編指令編程(修改版)

用機器指令和匯編指令編程(修改版)

們的 練習 改變 經歷 學院 暫時 ima 屏幕 alt+enter

  • 實驗名稱 用機器指令和匯編指令編程(1)
  • 實驗日期 2018.10.22
  • 學院:計軟院
  • 專業:計算機科學與技術
  • 年級:2017級
  • 班次:5班
  • 姓名:陳奕明
  • 學號 20171308194


一、實驗目的
1. 掌握使用debug工具編寫和調試匯編命令的方法

2. 掌握第1-2章所學的關於CPU、寄存器、內存的基礎知識

3. 掌握第1-2章涉及的幾條指令mov, add, sub, jmp的用法


二、實驗準備
1. 復習教材第1~2章內容,完成教材內相關檢測點

2. 結合教材實驗1 (P35)及公郵文件中心→實驗下的 “實驗1輔助文檔.pdf”學習debug 工具用法。


三、實驗內容


1. 教材實驗1(P35)

(1)練習教材 P35-45「預備知識:Debug 的使用」,學習 debug 啟動、退出及常用指 令用法;

(2)在練習基礎上,完成「2. 實驗任務」

Tips: 「2. 實驗任務」中每一項任務都可以在教材前序內容或練習中找到提示線索。建議先 完成「二、實驗準備」中要求的內容及實驗內容的第(1)項,這樣完成「2. 實驗任務」時會 很容易完成。比如: 實驗任務(1)可參照教材P41-43的(7)完成; 實驗任務(2)與教材 P20的檢測點(2)相似且相關;


四、實驗結論
任務一:

把如下的程序段寫入內存,逐條執行,觀察每條指令執行後CPU中相關寄存器中內容的變化。

技術分享圖片

首先使用e指令按題目要求的寫入機器碼指令(隨便找了個地址1000:0):

技術分享圖片

到達文本輸入限制後沒辦法,只能先執行了...執行完後,看一下已經寫入數據的內存單元的情況...嗯...數據是對的

繼續輸入並執行,執行完全部代碼後,使用u指令反匯編機器碼命令:

技術分享圖片

跟書上寫明的匯編命令相符。

然後輸入匯編命令:

技術分享圖片

中間又把1和字母l分不清了,出了個error。。。

命令輸入完畢,-t命令單步執行:

技術分享圖片

和上課聽講的一樣,對指定的寄存器進行數據的改寫操作。

後面的命令行有點多就用-t+數字=執行往後的幾條命令全部執行了:

最後的結果:

技術分享圖片

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

mov ax,1

add ax,ax

jmp 2000:0003

技術分享圖片

解題思路:2的三次方就是8,再看下題目給我們的三條命令。執行完第一條後ax的值為1,執行完第二條命令後ax的值為2,那麽就需要我們再執行這條語句7次了,所以就要使用jmp命令,通過改變CS和IP寄存器的值來使得CPU繼續反復執行這條命令,所以往下又寫了七句jmp 2000:0003使得CPU再反復執行其次該語句,從而使得AX中的值變為二的八次方。。。。這是最終結果。

最終實驗截圖

技術分享圖片

第三題

PC主板上的ROM中寫有一個生產日期,在內存FFF00H~FFFFFH的某幾個單元中,請找到這個生產日期並且試圖改變它。

實驗截圖如下:

技術分享圖片

試圖修改但是失敗了,看來是因為ROM的關系,無法修改。

第四題

向內存B8100H開始的單元中填寫數據,如:

-e B810:0000 01 01 02 02 03 03 04 04

這是進行了一系列實驗過後的結果:

技術分享圖片

有這麽些結果和感悟:

再向寄存器寫入數據時,每多兩個字節的數據就會產生一個新的顏色區域,而且寫入區域的CS碼每產生一次進位,就會使得產生的色塊區域產生換行,最終得到了這麽些結果。


五、實驗心得與感悟
這次實驗主要實驗了R命令(用於查看、修改寄存器中的內容)、D命令(查看內存中的內容)、E命令(修改內存中的內容)、U命令(反匯編命令)、T命令(執行代碼行命令)

第四題經過這麽多次的實驗測試,看來這一段內存空間是顯存。

我的電腦屏幕運行Dosbox窗口極小,最後查到按Alt+Enter可以進入全屏模式進行操作。

當初安裝Dosbox時經歷過,千萬別把程序裝在系統盤,否則會有權限問題。

暫時就這樣把,肯定還有許多要學的,要完善的,好好學習匯編!!

2018-10-27 21:28:25於宿

用機器指令和匯編指令編程(修改版)