梁 偉
(大連計算機(jī)職業(yè)中專 遼寧 大連 116033)
《微機(jī)原理與匯編語言》是計算機(jī)專業(yè)的一門主要課程,本課程的教學(xué)目標(biāo)是使學(xué)生掌握匯編語程序設(shè)計的基本知識,理解計算機(jī)編程原理。本課程教學(xué)內(nèi)容分為基礎(chǔ)教學(xué)模塊和實(shí)踐教學(xué)模塊,基礎(chǔ)教學(xué)模塊包括微型計算機(jī)中的基本結(jié)構(gòu)、指令系統(tǒng)、匯編語言程序等基本知識。實(shí)踐教學(xué)模塊包括匯編源程序的編譯,連接與調(diào)試運(yùn)行。
匯編語言程序上機(jī)操作需要調(diào)用編輯程序,建立以.ASM為擴(kuò)展名的源程序文件;調(diào)用匯編程序,生成以.OBJ為擴(kuò)展名目標(biāo)程序文件;調(diào)用連接程序,生成以.EXE為擴(kuò)展名的執(zhí)行文件,然后運(yùn)行。
由于masm軟件的限制,在64位系統(tǒng)電腦上進(jìn)行匯編實(shí)驗(yàn)時會遇到問題,可以通過運(yùn)行DOS模擬器軟件,模擬生成一個DOS窗口,使用模擬DOSBox工具來進(jìn)行匯編實(shí)驗(yàn),在模擬DOS窗口中調(diào)試和執(zhí)行匯編語言程序。
(1)安裝DOS模擬器DOSBOX,安裝時不需修改安裝路徑,單擊next按鈕,直到安裝完成,安裝DOSBOX后,在桌面上可以看到DOSBOX的快捷圖標(biāo)。
(2)設(shè)置DOSBox的虛擬盤,安裝DOSBOX后,當(dāng)打開DOSBOX快捷圖標(biāo)時會發(fā)現(xiàn)兩個窗口,不要關(guān)閉其中任何一個窗口。然后執(zhí)行Z:>mount D D:命令,將D盤設(shè)置為DOSBox的虛擬盤,執(zhí)行Z:> D: 命令,進(jìn)入D盤。
(3)存放匯編調(diào)試軟件,在D盤建立asmtest文件夾,將masm編譯、link連接和debug調(diào)試匯編程序的命令文件都存放在asmtest這個文件夾下。
(4)D盤文件夾路徑映射,可以在開始菜單里找到DOSBox 0.74 Options文件,打開文件之后,把mount D D:asmtest命令和D: 命令加在最后兩行,并保存文件。此時調(diào)試匯編程序的DOS環(huán)境設(shè)置完成。
[autoexec]
# You can put your MOUNT lines here.
mount D D:asmtest
D:
下面以計數(shù)控制循環(huán)例題ltloop.asm程序?yàn)槔榻B匯編語言程序上機(jī)運(yùn)行過程。
【例題】試編制一程序,將SOURCE源數(shù)據(jù)區(qū)的10個字節(jié)數(shù)據(jù)傳送到DEST目的數(shù)據(jù)區(qū)。
(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,進(jìn)行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
若有錯誤,應(yīng)再用文本編輯器進(jìn)行編輯,然后再匯編,直至匯編通過。
(3)LINK連接目標(biāo)程序并生成EXE執(zhí)行文件,源程序ltloop.asm被匯編通過后,生成以.OBJ為擴(kuò)展名目標(biāo)程序文件,需要經(jīng)過連接才能執(zhí)行,在DOSBOX平臺上鍵入LINK命令。
D: >link ltloop.obj
Run File [LTLOOP.EXE]:(直接回車確認(rèn))List File[NUL.MAP]:(缺省不產(chǎn)生)
Libraries [.LIB]:(直接按回車鍵)
(1)運(yùn)行與調(diào)試文件,DEBUG是一種匯編語言程序的調(diào)試工具,在DOS提示符后鍵入LINK DEBUG命令。
D:>debug ltloop.exe
- (連字符“-”是 DEBUG的提示符)
(2)用反匯編命令U顯示可執(zhí)行代碼
-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命令跟蹤執(zhí)行程序
-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命令查看數(shù)據(jù),將SOURCE源數(shù)據(jù)區(qū)的10個字節(jié)數(shù)據(jù)傳送到DEST目的數(shù)據(jù)區(qū)。
-dds:0
1630:0000 0102030405060708-090A 010203040506 ................
1630:0010 0708090A 00000000-00000000 00000000 ................
(6)用Q命令退出DEBUG返回到操作系統(tǒng)
(7)返回到Windows操作系統(tǒng),在DOS提示符后鍵入exit返回Windows。
以上以計數(shù)控制循環(huán)程序?yàn)槔?,說明了匯編語言程序上機(jī)調(diào)試運(yùn)行的基本過程。實(shí)踐教學(xué)模塊還有順序程序設(shè)計調(diào)試、分支程序設(shè)計調(diào)試方法與循環(huán)程序設(shè)計調(diào)試等。學(xué)生通過上機(jī)調(diào)試運(yùn)行實(shí)踐,培養(yǎng)學(xué)生正確書寫匯編源程序,學(xué)會分析一般程序,熟悉掌握簡單程序的設(shè)計的能力,為學(xué)習(xí)本專業(yè)其它編程課程和進(jìn)行與硬件有關(guān)的技術(shù)工作打好基礎(chǔ)。
[1] 沈美明,溫冬嬋.《IBM-PC匯編語言程序設(shè)計》清華大學(xué).
[2] 肖金立.《微型計算機(jī)原理與應(yīng)用》.
[3] 陳文堯.未來匯編軟件.