實驗1 使用機器指令和彙編指令程式設計

2022-05-28 21:09:10 字數 2977 閱讀 2458

一.實驗目的

1.熟練掌握使用debug工具編寫和除錯x86彙編命令的方法

2.掌握8086cpu,暫存器,記憶體的基礎知識

3.理解並掌握記憶體中多位元組資料的存放:小端法

4.理解並掌握棧記憶體空間的特性和使用

5.掌握指令mov,add,sub,jmp,push,pop的基礎用法

二.實驗準備

1.複習教材1-2章內容,完成教材內相關檢測點

2.複習教材第3章「棧」的知識:棧的特性、暫存器 ss 和 sp、指令 push 和 pop ,完成教材 3.6~3.9 節內的問題 3.6~3.12,檢測點 3.1~3.2

3. 結合教材實驗1(p35)和課程qq群檔案中的文件,學習debug工具用法。

三.實驗內容

1.教材實驗1

練習教材p35-45「預備知識:debug的使用」,學習debug啟動、退出及常用指令用法; 在練習基礎上,完成「2. 實驗任務」

2.教材實驗2

練習「1.預備知識:debug 的使用」 在練習基礎上,完成「2. 實驗任務」

使用debug,將下面的程式寫入記憶體,逐條執行,觀察每條指令執行後cpu中相關暫存器中內容的變化。

機器碼資料較多,只用前4行實驗即可。

用t命令和a命令兩種方式,寫入記憶體。用t命令單步除錯。附上實驗截圖。

將下面3條指令寫入從2000:0開始的記憶體單元中,利用值3條指令計算2的8次方

mov x,1

addax,ax

jmp 2000:0003

附上a命令寫入和t命令單步除錯實驗截圖。對於單步除錯較多的部分,只截除錯開始,和除錯出正確結果的部分即可。 

繼續使用t命令執行下去,0003單元中的指令共執行8次,0005單元中的指令執行7或者8次。共需執行16/17次t命令。

找出記憶體中的生產日期,嘗試修改。

修改後好像資料並沒有發生變化,位址c0000~fffff是各類rom的位址空間,向位址c0000~fffff的記憶體單元中寫入資料相等於改寫唯讀儲存器中的內容所以操作是無效的。

向記憶體從位址b8100h開始的單元中填寫資料並觀察產生的現象。

向位址a0000~bffff的記憶體單元中寫入資料,就是向視訊記憶體中寫入資料,這些資料會被顯示卡輸出到顯示器上。

輸入內容前面的表示形狀,後面的表示顏色,乙個形狀對應乙個顏色,前面記憶體位址的數值對應輸出圖形的具體位置,後面執行的指令會覆蓋前面指令所進行的操作。

push ax ;sp=00fe;修改的記憶體單元的位址是220ff:220fe內容為a4a2

push bx ;sp=00fc;修改的記憶體單元的位址是220fd:220fc內容為acaa

pop ax ;sp=00fe;ax=acaa

pop bx ;sp=0100;bx=a4a2

push [4] ;sp=00fe;修改的記憶體單元的位址是220ff:220fe內容為5554

push [6] ;sp=00fc;修改的記憶體單元的位址是220fd:220fc內容為5756

前3行彙編指令的功能:

mov ax,2000            //將數值2000放入ax中

mov ss,ax //設定棧的段位址,通過ax中轉資料

mov sp,10 //設定棧頂的偏移位址

//棧底20000 棧頂20010

兩條指令執行後靠近棧頂的10個位元組中值立即有了變化,是對定義棧段時部分執行環境變數進行暫存,靠近棧頂的10個位元組中的暫存資料分別是ss、ip、 cs 等的值。

因為在用t指令在進行除錯時,會產生中斷。而為了保護現場,cpu先把標誌暫存器入棧,再把cs ip分別入棧。

彙編實驗1 用機器指令和彙編指令程式設計

1.實驗執行環境 win10系統下的dosbox 2.實驗所用偵錯程式為debug 一 基礎指令 此次實驗中所用到的7條debug命令 r,d,e,u t,a 1.r命令 檢視 改變cpu暫存器的內容 檢視暫存器的值 改變cs ip的值 可見cs,ip的值由上面的073f和0100變成了0000 2...

實驗1 用機器指令和彙編指令程式設計

1.熟練掌握使用debug工具編寫和除錯x86彙編命令的方法 2.掌握8086cpu 暫存器 記憶體的基礎知識 3.理解並掌握記憶體中多位元組資料的存放 小端法 4.理解並掌握 棧 記憶體空間的特性和使用 5.掌握指令mov,add,sub,jmp,push,pop的基礎用法 練習教材p35 45 ...

實驗1 用機器指令和彙編指令程式設計

1 使用e命令將指令輸入記憶體,並用t命令單步執行。使用a命令將指令寫入記憶體,並使用t命令單步執行。2 使用a命令輸入命令,並使用t命令進行單步執行。3 使用d命令查詢記憶體fff00h fffffh,查詢到日期。使用e命令修改後發現並未修改成功。分析原因 位址為c0000h fffffh的記憶體...