組合語言程式設計實驗報告二
南京資訊工程大學實驗報告 實驗名稱 實驗 2 用機器指令和彙編指令程式設計 實驗日期 12.21
學院 計軟院
專業 電腦科學與技術
年級 2017級
班次 5
姓名 陳奕明
學號 20171308194
一、實驗目的
1. 熟練掌握使用debug工具編寫和除錯彙編命令的方法 2. 理解並掌握記憶體中多位元組資料的存放 3. 理解並掌握「棧」記憶體空間的特性和使用 4. 理解並掌握8086彙編指令mov, add, sub, push, pop的用法
二、實驗準備
1. 複習第 3 章「棧」的知識:棧的特性、暫存器 SS 和 SP、指令 push 和 pop
2. 完成教材 3.6~3.9 節內的問題 3.6~3.12,檢測點 3.1~3.2 3. 結合教材實驗1 (P35)及公郵檔案中心→實驗下的 “實驗1輔助文件.pdf”複習debug 工具用法。
三、實驗內容
1. 教材實驗2(P71)
(1)練習「1.預備知識:Debug 的使用」
(2)在練習基礎上,完成「2. 實驗任務」 補充: 為了便於驗證實驗結果,對「2. 實驗任務」中的(1)做如下兩點調整:
① 在使用 a 命令輸入指令除錯前,使用 e 命令將記憶體單元 0021:0 ~0021:7 連續 8 個位元組資料修改為 30H, 31H, 32H, 33H,34H,35H,36H,37H
② 將 P74 實驗任務(1)中第 1行的 mov ax, ffff → 改為 mov ax, 0021 實驗前,請理論上分析指令執行後各個填空處的值,並記錄下來。 實驗時,通過在 debug 中除錯,觀察實驗結果與理論分析是否一致,如不一致,嘗試 發現問題所在,並分析原因。
四、實驗結論
此部分書寫內容: 1. 教材實驗2中「2. 實驗任務」(P74)
實驗任務(1):
① 截圖記錄:使用 e 命令修改 0021:0~0021:f 資料,及修改後檢視是否正確寫入的操作
資料輸入完成,查詢結果正確。
② 截圖記錄:使用 a 命令輸入的 p74 指令
指令輸入完成。
③ 截圖記錄:每一行指令單步除錯(如單步除錯步驟多,可分屏截圖,但不要有遺漏)
STEP1
STEP2
STEP3
STEP4
④ P74 中指令執行後各個暫存器填空結果,以在文件中手工標註或手機拍照截圖方式 複製在文件中。
對於③單步除錯的觀察,與理論上分析的結果進行比較,檢驗是否一致。 如不一致,分析查詢原因。
結果一致:資料出棧和入棧的規則為入棧時 sp=sp-2,出棧時 sp=sp+2。
實驗任務(2):
① 截圖記錄圖 3.19 中使用 a命令輸入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改後檢視的部分
② 單步除錯每一行彙編指令的截圖。且每一條指令單步除錯後,都使用 d 命令檢視 2000:0~2000:f 的值。觀察每一條指令執行後相關暫存器值的變化,及 2000:0~2000:f 單 元值的變化,並思考原因。 以文字方式陳述: ① 前3行彙編指令的功能,特別是,mov sp, 10意味著什麼?初始時棧頂和棧底分別 是? ② 基於單步除錯觀察到的變化,給出你對此的思考及可能原因分析。
截圖如下:
1、從mov ax,3123 這條指令開始 2000:0 ~ 2000:f 中的值就發生了沒有意料到的變化,出現了不需要的數字;2、在棧頂所在位置的的記憶體單元中存放的始終是AX 中的值即3123;
五、總結與體會
棧,是一種計算機領域極其常見的一種資料結構,而通過這次實驗,我覺得算是瞭解到了棧這一種資料結構在系統記憶體中最基層的變化原理,感覺受益匪淺,尤其需要注意學習的是棧頂在有資料變動的SP的值的變化規則,即入棧時 sp=sp-2,出棧時 sp=sp+2。