微机原理与汇编语言前言本课程是一门实践性较强的课程。
教学采用以课堂教学为主,讲授微型计算机的各部分组成、工作过程、互相之间的连接,以及如何使用汇编语言编程,同时使用教学实验设备,通过一定数量的实验,让学生动手完成微型机各部件之间通过接口的联接、编程及简单应用,使学生对微型计算机的主要技术做到深入理解、牢固掌握、灵活应用。
并为一些对计算机硬件要求较高的专业提供了锻炼学生的动手能力以及发挥创造能力的实验平台。
本实验系统在windows窗口界面调试软件和实验演示软件的支持下,极大地激发了学生学习、实验的兴趣,有效地提高了教学质量。
本书的实验内容由汇编语言程序设计实验和硬件接口电路实验两个部分构成。
接口部分实验是针对DVCC-8086H通用微机原理与接口实验系统而设计的两个实验。
通过开设基础性、提高性、综合性实验以及相关的课程设计,来提高学生的动手能力。
汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1、硬件环境微型计算机一台2、软件环境✧Windows98/2000/XP操作系统✧任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)✧汇编程序(MASM.EXE或TASM.EXE)✧连接程序(LINK.EXE或TLINK.EXE)✧调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。
二、上机实验步骤1、确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。
如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。
把MASM.EXE、LINK.EXE、DENUG.EXE 和TD.EXE都拷贝到此目录中。
2、建立ASM源程序汇编语言原程序后缀为.asm。
建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口,窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
如果键入EDIT命令时已带上了源程序文件名(C:\ASM\HELLO.ASM),在编辑窗口上部就会显示该文件名。
如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。
编辑窗口用于输入源程序。
EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。
EDIT中的编辑键和功能键符合Windows的标准,这里不再赘述。
源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。
如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Save as”窗口,在这个窗口中输入你想要保存的源程序的路径和文件名(本例中为C:\ASM\HELLO.ASM)。
3、用MASM.EXE汇编源程序产生OBJ目标文件源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。
具体操作如下:方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。
方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:I:>C:<回车>C:>CD \ASM<回车>C:\ASM>MASM HELLO.ASM<回车〉不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Object filename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:C:\ASM\HELLO.OBJ〈回车〉。
后面的两个提示为可选项,直接按回车。
注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Source filename),此时输入源程序文件名HELLO.ASM并回车,然后进行的操作。
如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。
如果源文件有错误,MASM会指出错误的行号和错误的原因。
警告错误(Warning Errors)。
警告错误不影响程序的运行,但可能会得出错误的结果。
严重错误(Severe Errors)。
对于严重错误,MASM将无法生成OBJ文件。
在错误信息中,园括号里的数字为有错误的行号,后面给出了错误类型及具体错误原因。
如果出现了严重错误,你必须重新进入EDIT编辑器,根据错误的行号和错误原因来改正源程序中的错误,直到汇编没有错为止。
注意,汇编程序只能指出程序的语法错误,而无法指出程序逻辑的错误。
4、用LINK.EXE产生EXE可执行文件在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。
具体操作如下:方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。
方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:I:>C:<回车>C:>CD \ASM<回车>C:\ASM>LINK HELLO.OBJ<回车>不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Run file),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:C:\ASM\HELLO.EXE 〈回车〉。
后面的两个提示为可选项,直接按回车。
注意,若打开LINK程序时未给出OBJ文件名,则LINK 程序会首先提示让你输入OBJ 文件名(Object Modules ),此时输入OBJ 文件名HELLO.OBJ 并回车,然后进行的操作与上面完全相同。
如果没有错误,LINK 就会建立一个HELLO.EXE 文件。
如果OBJ 文件有错误,LINK 会指出错误的原因。
对于无堆栈警告(Warning :NO STACK segment )信息,可以不予理睬,它不影响程序的执行。
如链接时有其它错误。
须检查修改源程序,重新汇编、连接,直到正确。
5、执行程序建立了HELLO.EXE 文件后,就可以直接在DOS 下运行此程序,如下所示:C:>HELLO 〈回车〉程序运行结束后,返回DOS 。
如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。
如果程序不显示结果,我们如何知道程序是否正确呢?例如,这里的HELLO.EXE 程序并未显示出结果,所以我们不知道程序执行的结果是否正确。
这时,我们就要使用TD.EXE 调试工具来查看运行结果。
此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE 。
下图为汇编语言程序上机的整个流程:例:下面给出了一个完整的汇编语言程序hello.asm ,请按照上面所介绍的过程练习。
data SEGMENTHello DB ‘Hello, world!’,0DH,0AH,’$’ data ENDSYYY NN N 有错?有错?有错? 结束汇 编输入(修改)源程序连 接运 行查 错开始用EDIT ,NOTEPAD 等任何文本编辑器。
源程序存为.ASM 文件用TD 、DEBUG 等调试程序进行调试。
命令格式:TD <可执行文件名.EXE>用LINK 连接程序进行连接。
连接后生成.EXE 可执行文件。
命令格式:LINK <目标文件名.OBJ>;用MASM 宏汇编程序进行汇编。
汇编后生成.OBJ 目标文件。
命令格式:MASM <源文件名.ASM>;prog SEGMENTASSUME CS:prog,DS:datastart: MOV AX,dataMOV DS,AXLEA DX,helloMOV AH,9INT 21HMOV AH,4CHINT 21Hprog ENDSEND start1、用MASM程序对其进行汇编,产生SAMPLE.OBJ文件。
2、用LINK程序对其进行连接,产生SAMPLE.EXE文件。
3、执行SAMPLE.EXE文件,并观察运行结果是否相符。
4、用DEBUG调试程序。
问题汇编语言源程序、汇编程序及汇编之间的区别与联系?程序中MOV AH,4CH 与INT 21H 这两条语句的功能是什么?能否省略?实验一 DEBUG程序的使用预习内容预习DEBUG程序的各种命令功能及使用方法。
实验目的1、掌握DEBUG程序的各种命令,重点是R,D,E,U,T,G,Q等命令的使用。
2、掌握用DEBUG调试自编程序的方法,为以后实验打下基础。
实验内容1、程序的装入和退出C:>DEBUG[d:][path] name.exe退出DEBUG -Q2、程序的运行连续运行-G[=地址1][地址2]跟踪运行-T[=地址][值] 缺省时从CS:IP处执行3、内容查询D命令显示内存单元内容-D 地址R命令显示寄存器内容 -R 寄存器名4、修改存储单元和寄存器E命令可方便地修改任一RAM单元的内容-E地址内容表R命令修改寄存器内容 -R 寄存器名5、反汇编U命令反汇编用于把内存单元的内容作为机器指令,用助记符的形式显示出来。
-U地址或者-U 地址范围。
问题1、在指令MOV [BX],AX中,操作数[BX]的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果?2、可否随意在DEBUG提示符“-”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出程序的首地址?实验二 DOS系统功能调用预习内容1、预习DOS系统功能调用的方法。