日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实验 3 编程,编译,连接,跟踪

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验 3 编程,编译,连接,跟踪 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、實驗目的

1. ?掌握匯編語言源程序(8086 dos?匯編)編寫→匯編→鏈接→調試的方法

2. ?加深對 1-4?章基礎知識的理解

?

二、實驗準備

1. 結合第 4?章課件和教材,學習/復習完整匯編源程序編寫→匯編→連接→運行→調試?的方法

2. ?復習第 1-3?章以下基礎知識:

(1)寄存器用法

① ?通用寄存器 AX, BX,CX,?DX

② 段寄存器 CS, DS, SS 和兩個特殊寄存器 IP,?SP

(2)內存訪問,特別是多字節數據的存、取

(3)匯編指令用法,注意其合法使用形式

① ?數據傳送類指令:mov, push,?pop

② ?算術運算指令:add,?sub

③?轉移類指令:jmp

三、實驗內容

1. ?練習?1

(1)編寫匯編源程序 t1.asm

為了方便后續操作,選擇在masm.exe,link.exe同文件夾下用notepad編寫該匯編程序,將文件后綴名更改為.asm

(2)對源程序 t1.asm?進行匯編、連接、運行、調試?(1)?運行程序,觀察程序輸出結果是什么

(顯然我們需要使用DS Box來完成此次實驗,實驗前依然需要掛載,這個操作在第一次實驗時就有過,

此次步驟就省去不表示。)

為了避免在編譯,連接過程中產生一些中間文件的過程,這里在語句后面加一個分號

可以看出運行結果是輸出了36

(3)? line4? line9?種寄存器?dl?的值分別修改為?0~9?中任何一個數字,重新匯編→?連接→運行,觀察結果的變化。

?隨機的修改數字

盡管在語句后加分號省去了生成編譯,連接中間文件的過程,但這些相同的步驟依然很麻煩,可以省去

在notepad中寫入如下代碼,命名為process,后綴改為.bat

在這里發現編譯,連接,執行的過程都已經省去,只需要輸入process t1

在分別修改了數字后發現輸出結果改變了,盡管這段代碼還不太理解,但可以大致知道,這兩行

應該是決定了輸出的結果

(4) ? debug 對生成的可執行文件 ?t1.exe?進行調試。

① 使用 r 命令查看。觀察寄存器 cx 的值是 多少;觀察寄存器 ds cs?的值是多?少,它們之間是否滿足關系(cs)=(ds)+10H

寄存器CX的值是16,表明這段代碼的機器碼長度是16。

DS=075a,CS=076a。必然的兩者相差10h,即滿足(cs)=(ds)+10H,

也就是說PSP區:075a:0,程序區:076a:0

② PSP(程序段前綴)的頭兩個字節是 CD 20, debug 查看 PSP?的內容,驗證是否?如此。

使用d命令查看075a(即DS寄存器)開始的內存中的內容,顯然前十個長度的內存內容為PSP區內容,確實頭兩個字節為CD 20

③ 使用 u ?命令對 t1.exe ??進行反匯編,觀察反匯編得到的源代碼。

程序入口地址CS:IP=076a:0,而CX=16表示的是程序機器碼長度,所以在反匯編時可以準確反匯編出程序段內容

④ 使用 t ?命令和 p ?命令(遇到 int ?命令時,用 p ???命令)單步調試,觀察結果。

這里沒有什么異常,程序按順序步驟執行,遇到int用p指令,最終正常終止

這里除了CS:IP的值發生了改變,AX,BX寄存器的值也發生了改變。

2. ?練習?2

(1)編寫匯編源程序?t2.asm

為了方便后續操作,選擇在masm.exe,link.exe同文件夾下用notepad編寫該匯編程序,將文件后綴名更改為.asm

?

(2)對源程序 ?t2.asm?進行匯編、連接、運行、調試

(3)?對?t2.asm?進行匯編、連接后,得到可執行文件?t2.exe。運行?t2.exe,觀察程序運行?結果,驗證是否在屏幕左上方出現紅色的數值?36。

注*)經測試,有些平臺在?dosbox?下運行這個程序時有些問題,如果屏幕左上方沒有?輸出結果,請運行程序?t2.exe?前,先輸入?cls?命令清空一下屏幕,然后再執行?t2.exe。

在使用process.bat一次性編譯,連接,執行后發現并沒有出現預期的紅色36

在清屏終于出現了預期的結果,在屏幕左上方出現了紅色的36

?

(4) 如果(1)結果得到驗證,重新打開 t2.asm,嘗試將源代碼中 line7 的?0433h0432h,?line10 0436h0439h, 然后重新匯編、連接,得到可執行文件 t2.exe。使用 cls?命令清?屏后,再次觀察程序運行結果。

?

在修改后再次運行,發現在左上方仍然出現了紅色的36

(5) 如果(1)結果得到驗證,重新打開 t2.asm,嘗試將源代碼中 line7 的?0433h0333h,?line10 0436h0336h, 然后重新匯編、連接,得到可執行文件 t2.exe。使用 cls?命令清?屏后,再次觀察程序運行結果。

此次在左上方出現了藍色的36

?

四、總結與體會

1.在之前的實驗中由于只是在學習操作記憶Debug的各種命令,感覺很枯燥;

但在這次實驗后發現Debug調試在匯編程序的查錯過程中很有幫助

2.任何重復的機械的操作都可以化繁為簡,我們減少不必要無意義的操作。

3.一個簡單的匯編程序實現起來并不容易,匯編語言寫程序和高級語言有很大區別

,但也有相似的地方。

4.我們學習匯編語言是為了直接控制重重覆蓋的操作系統軟件下的硬件

轉載于:https://www.cnblogs.com/mr-gao1/p/9971898.html

總結

以上是生活随笔為你收集整理的实验 3 编程,编译,连接,跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。