梁 偉
(大連計算機職業中專 遼寧 大連 116033)
《微機原理與匯編語言》是計算機專業的一門主要課程,本課程的教學目標是使學生掌握匯編語程序設計的基本知識,理解計算機編程原理。本課程教學內容分為基礎教學模塊和實踐教學模塊,基礎教學模塊包括微型計算機中的基本結構、指令系統、匯編語言程序等基本知識。實踐教學模塊包括匯編源程序的編譯,連接與調試運行。
匯編語言程序上機操作需要調用編輯程序,建立以.ASM為擴展名的源程序文件;調用匯編程序,生成以.OBJ為擴展名目標程序文件;調用連接程序,生成以.EXE為擴展名的執行文件,然后運行。
由于masm軟件的限制,在64位系統電腦上進行匯編實驗時會遇到問題,可以通過運行DOS模擬器軟件,模擬生成一個DOS窗口,使用模擬DOSBox工具來進行匯編實驗,在模擬DOS窗口中調試和執行匯編語言程序。
(1)安裝DOS模擬器DOSBOX,安裝時不需修改安裝路徑,單擊next按鈕,直到安裝完成,安裝DOSBOX后,在桌面上可以看到DOSBOX的快捷圖標。
(2)設置DOSBox的虛擬盤,安裝DOSBOX后,當打開DOSBOX快捷圖標時會發現兩個窗口,不要關閉其中任何一個窗口。然后執行Z:>mount D D:命令,將D盤設置為DOSBox的虛擬盤,執行Z:> D: 命令,進入D盤。
(3)存放匯編調試軟件,在D盤建立asmtest文件夾,將masm編譯、link連接和debug調試匯編程序的命令文件都存放在asmtest這個文件夾下。
(4)D盤文件夾路徑映射,可以在開始菜單里找到DOSBox 0.74 Options文件,打開文件之后,把mount D D:asmtest命令和D: 命令加在最后兩行,并保存文件。此時調試匯編程序的DOS環境設置完成。
[autoexec]
# You can put your MOUNT lines here.
mount D D:asmtest
D:
下面以計數控制循環例題ltloop.asm程序為例,介紹匯編語言程序上機運行過程。
【例題】試編制一程序,將SOURCE源數據區的10個字節數據傳送到DEST目的數據區。
(1)用編輯器編輯匯編語言源程序,把ltloop.asm文件存放在d:asmtest路徑下。
data segment
SOURCE DB 1,2,3,4,5,6,7,8,9,10
DEST DB 10 dup(?)
data ends
code segment
assume cs:code,ds:data
start: MOV AX, DATA
MOV DS, AX
MOV CX,10
MOV SI,-1
next: INC SI
MOV AL, SOURCE[SI]
MOV DEST[SI],AL
LOOP next
mov ah,4ch
int 21h
code ends
end start.
(2)打開DOS模擬器DOSBOX,進行MASM匯編操作,在DOSBOX平臺上使用匯編程序是MASM,在DOS提示符后鍵入MASM命令。
D: >masm ltloop.asm
Object filename [ltloop.OBJ]: (可直接按Enter) Source listing [NUL.LST]:
Cross-reference [NUL.CRF]: 48056 + 463299 Bytes symbol space free
0 Warning Errors 0 Severe Errors
若有錯誤,應再用文本編輯器進行編輯,然后再匯編,直至匯編通過。
(3)LINK連接目標程序并生成EXE執行文件,源程序ltloop.asm被匯編通過后,生成以.OBJ為擴展名目標程序文件,需要經過連接才能執行,在DOSBOX平臺上鍵入LINK命令。
D: >link ltloop.obj
Run File [LTLOOP.EXE]:(直接回車確認)List File[NUL.MAP]:(缺省不產生)
Libraries [.LIB]:(直接按回車鍵)
(1)運行與調試文件,DEBUG是一種匯編語言程序的調試工具,在DOS提示符后鍵入LINK DEBUG命令。
D:>debug ltloop.exe
- (連字符“-”是 DEBUG的提示符)
(2)用反匯編命令U顯示可執行代碼
-ucs:0
163A:0000 B83016 MOV AX,1630
(3)用R命令顯示寄存器值
-r
AX=0000 BX=0000 CX=0387 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
DS=1620 ES=1620 SS=1632 CS=163A IP=0000 NV UP EI PL NZ NA PO NC
163A:0000 B83016 MOV AX,1630
(4)用T命令跟蹤執行程序
-t
AX=1601 BX=0000 CX=000A DX=0000 SP=0080 BP=0000 SI=0000 DI=0000
DS=1630 ES=1620 SS=1632 CS=163A IP=0014 NV UP EI PL ZR AC PE NC
163A:0014 E2F5 LOOP 000B
(5)用D命令查看數據,將SOURCE源數據區的10個字節數據傳送到DEST目的數據區。
-dds:0
1630:0000 0102030405060708-090A 010203040506 ................
1630:0010 0708090A 00000000-00000000 00000000 ................
(6)用Q命令退出DEBUG返回到操作系統
(7)返回到Windows操作系統,在DOS提示符后鍵入exit返回Windows。
以上以計數控制循環程序為例,說明了匯編語言程序上機調試運行的基本過程。實踐教學模塊還有順序程序設計調試、分支程序設計調試方法與循環程序設計調試等。學生通過上機調試運行實踐,培養學生正確書寫匯編源程序,學會分析一般程序,熟悉掌握簡單程序的設計的能力,為學習本專業其它編程課程和進行與硬件有關的技術工作打好基礎。
[1] 沈美明,溫冬嬋.《IBM-PC匯編語言程序設計》清華大學.
[2] 肖金立.《微型計算機原理與應用》.
[3] 陳文堯.未來匯編軟件.