1. 程式人生 > >實驗三 第一個匯編程序

實驗三 第一個匯編程序

com info 生成 spa .com image 當前 結果 9.png

一、練習一

1、編寫匯編源程序 t1.asm。

技術分享圖片

2、對源程序 t1.asm 進行匯編、連接、運行、調試。

匯編:

技術分享圖片

該過程忽略了中間結果列表文件和交叉引用文件,最終得到了目標文件t1.obj

匯編後在當前路徑下會出現一個新文件,t1.obj(下圖中的t1)

技術分享圖片

連接:

技術分享圖片

通過連接,t1.obj將變成t1.exe,如此便得到了可執行文件。

技術分享圖片

該過程忽略了中間結果映像文件和庫文件的連接(因為這個程序中沒有調用任何子程序)。

運行:

技術分享圖片

結果為36.

line4 line9 種寄存器 dl 的值分別修改為 0~9 中任何一個數字:

技術分享圖片

重新匯編→ 連接→運行後結果如下:

技術分享圖片

接下來,用 debug 對生成的可執行文件 t1.exe 進行調試。

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

技術分享圖片

cx=0016,ds=075A,cs=076A。滿足(cs)=(ds)+10H

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

技術分享圖片

結果卻是是程序段前綴為CD 20。

③使用 u 命令對 t1.exe 進行反匯編:

技術分享圖片

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

技術分享圖片

技術分享圖片

技術分享圖片

二、練習二

1、編寫匯編源程序 t2.asm

技術分享圖片

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

技術分享圖片

技術分享圖片

完成匯編和連接並清屏後運行仍無結果。為什麽呢???

重新打開 t2.asm,嘗試將源代碼中 line7 0433h→0432h, line10 0436h→0439h,

然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清屏後,再次觀察程序運行結果。

技術分享圖片

改完了,還是沒有結果。郁悶。

重新打開 t2.asm,嘗試將源代碼中 line7 的 0433h0333h, line10 0436h0336h,

然後重新匯編、連接,得到可執行文件 t2.exe。使用 cls 命令清屏後,再次觀察程序運行結果。

技術分享圖片

沒有結果+1

技術分享圖片

實驗三 第一個匯編程序