梁 伟
(大连计算机职业中专 辽宁 大连 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] 陈文尧.未来汇编软件.