微機實驗報告3 資料傳送實驗
桂 林 理 工 大 學
實 驗 報 告
班級 軟體工程16-1班 學號 3162052051116 姓名 張識虔 同組實驗者
實驗名稱 資料傳送實驗
一、實驗目的:
1. 掌握與資料有關的不同定址方式。
2. 繼續熟悉實驗操作軟體的環境及使用方法。
二、實驗環境:
實驗裝置 PC 微機一臺。
三、實驗內容:
本實驗要求將資料段中的一個字串傳送到附加段中,並輸出附加段中的目 標字串到螢幕上。
程式設計要點:獲取資料來源的段地址和偏移地址,將源地址的資料一個一個 的複製到目的地址上去,直到字串複製完成。傳送資料的程式流程圖如圖 2-2-1 所示。
圖 2-2-1 資料傳送流程圖 根據上述流程圖編寫實驗程式(例程檔名:A2.ASM)
DATA SEGMENT ;定義資料段 MSR DB "HELLO,WORLD!$" LEN EQU $- MSR DATA ENDS EXDA SEGMENT ;定義附加資料段 MSD DB LEN DUP(?) EXDA ENDS MYSTACK SEGMENT STACK ;定義堆疊段 DW 20 DUP(?) MYSTACK ENDS CODE SEGMENT ;定義程式碼段 ASSUME CS:CODE,DS:DATA,ES:EXDA START: MOV AX,DATA MOV DS,AX ;裝載資料到 DS 中 MOV AX,EXDA MOV ES,AX ;裝載附加資料到 ES 中 MOV SI,OFFSET MSR ;設定 SI MOV DI,OFFSET MSD ;設定 DI MOV CX,LEN NEXT: MOV AL,[SI] ;開始傳輸資料 MOV ES:[DI],AL INC SI INC DI DEC CX JNZ NEXT PUSH ES POP DS ;將附加段暫存器指向的段值賦給資料段暫存器 MOV DX,OFFSET MSD MOV AH,9 INT 21H KEY: MOV AH,1 ;判斷是否有按鍵按下? INT 16H ;(為觀察執行結果,使程式有控制的退出) JZ KEY MOV AX,4C00H ;結束程式退出 INT 21H CODE ENDS END START
2.2.4 實驗步驟
(1) 編輯原始碼 將程式原始碼編輯完成之後修改檔名為 A2.asm,並儲存在目錄 E:\MYCODE 下。
(2) 編譯 A2.asm 檔案 進入 DOS 系統開啟 E 盤 MYCODE 資料夾所在目錄,並編譯 A2.asm 檔案, 知道編譯無錯誤。如圖 2-2-2 所示。
圖 2-2-1 生成 A2.obj 檔案
(3) 連結 A2.obj 檔案 使用 LINK 命令連結 A2.obj 檔案,生成 A2.exe 檔案。執行 A2.exe 檔案,查 看執行結果。如圖 2-2-3 所示。
圖 2-2-3 生成 A2.exe 檔案
執行程式後,螢幕顯示“HELLO,WORLD!”。說明程式執行正確。下 面我們通過除錯檢視記憶體資料,來了解資料的傳輸過程。
(4) DEBUG 除錯
輸入命令 E:\masm5.0>debug a2.exe 回車可進入除錯系統,首先對 a2.exe 進行
反彙編,如圖 2-2-4 所示。
圖 2-2-4 a2.exe 反彙編
從反彙編的程式上可以看出,原字串存放的段地址為 0x076A,偏移地址 為 0x0000,複製字串的目的地址的段地址為 0x076A,偏移地址為 0x0000, 字串的長度為 0x0E。下面通過記憶體檢視命令檢視源地址和目的地址的資料情 況,如圖 2-2-5 所示。
圖 2-2-5 源地址與目的地址的資料
從圖 2-2-5 可直接看出原地址所存放的資料為“HELLO,WORLD!”,目的地 址存放的資料全部為 0。現將程式執行至 0CDA:001B 處,程式執行到此處時, 可完成一個位元組的資料傳輸,檢視目的地址的記憶體資料。如圖 2-2-6 所示。
圖 2-2-6 傳輸一個位元組後目的地址的資料
傳輸一個位元組後可在目的地址的第一個資料位 0x48,其 ASCII 碼為‘H’。 同時也可觀察 AX 寄存的低 8 位也為 0x48。將程式執行至 0CDA:001D 處,此時 程式已經跳出了資料傳送的迴圈,資料的傳送工作已將完成。檢視目的地址的內 存資料,如圖 2-2-7 所示。
圖 2-2-7 資料傳送完成後目的地址的資料
由圖 2-2-7 可直接看出資料傳送完成之後目的地址存放的資料與源地
四、心得體會: