《微机原理及应用》实验指导书王建霞主编河北科技大学信息科学与工程学院2005.32前言本指导书结合教材《微型计算机原理及应用》的内容以及本、专科生实验大纲的要求编制。软件实验中给出了程序框图和主要程序清单。硬件实验中给出了硬件结构图及连线图。其中程序清单仅仅是为了学生编程序时作为参考用的,学生在做实验前,必须充分预习,自己编制程序,才能准予上机做实验。本指导书中除了大纲中规定必做的实验外,还给大家提供了一些有实用性的选做实验。以满足课外自由实验上机学生的要求。本实验指导书内容较丰富、系统,除可以作为计算机专业大学本科实验指导书外,也可以作为非计算机专业的研究生学习微型计算机的实验指导书,也可作为各类型的微型计算机培训班的实验指导书。本实验指导书由王建霞、、陈义峰老师编写,因水平有限,难免有不足之处,请老师同学多提宝贵意见。编者于2005.33目录实验一Debug练习及汇编语言程序的建立和运行……………………(4)实验二两个多位十进制数加减运算编程………………………………(11)实验三十进制数乘除运算编程…………………………………………(15)实验四排序实验…………………………………………………………(22)4实验一Debug练习及汇编语言程序的建立和运行一、实验目的1、学习debug状态下,汇编语言程序的编程和运行方法2、掌握汇编语言程序的建立和运行3、掌握debug状态下调试和运行汇编语言程序的方法二、实验原理debug是调试汇编语言程序的工具,它不仅能跟踪程序的运行,还可显示修改内存与寄存器内容,以便在调试程序中检查程序,找错,改错;它还支持小汇编,直接对小段程序进行汇编;也可对盘进行读写操作。但debug不宜汇编较长的程序,不便于分块程序的设计,不能使用绝大多数ASM和MASM提供的伪指令。debug命令以单个字母的命令符开头,然后是命令操作参数,操作参数与操作参数之间,用空格或逗号分开,操作参数与命令符之间用空格隔开,命令的结束符是回车键↙。命令及参数的输入可以是大小写的结合,CtrL+break键中止命令的执行。debug下所用的数均为十六进制数,且不必写H。三、预习要求1、用debug汇编语言程序建立过程和调试方法2、写出预习报告debug的常用命令有:1.汇编命令A格式:(1)A段寄存器名:位移(2)A段地址:位移(3)A位移(4)A功能:键入该命令后显示段地址和位移并等待用户从键盘逐条键入汇编命令,逐条汇编成代码指令,直到显示下一地址时用户直接键入回车键返回到提示符“—”。其中(1)用指定寄存器内容作段地址,(3)用CS内容作段地址,(4)用CS:0100作地址。以后其它命令中提及的各种“地址”形式,均为(1)、(2)、(3)中A后的地址形式。2.反汇编命令U格式1:U地址格式2:U地址范围5功能:将指定范围内的代码以汇编语句形式显示,同时显示地址及代码。注意,反汇编时一定确认指令的起始地址后再作,否则将得不到正确结果。地址及范围的缺省值是上次U指令后下一地址的值。这样可以连续反汇编。3.显示内存命令格式:(1)D地址;以CS为段寄存器(2)D地址范围(3)D;显示CS:0100起始的一片内容。功能:以两种形式显示指定内存范围内容。一种形式为十六进制内容,一种形式为相应字节的ASCII码字符,对不可见字符以“·”代替。4.修改内存命令E格式:(1)E地址单元内容(2)E地址单元内容表功能:(1)将指定内容写入指定单元后显示下一地址,可连续键入修改内容,直到新地址出现后键入↙为止。(2)将单元内容表逐一写入由地址开始的一片单元。5.填充内存命令F格式:F地址范围单元内容表功能:将单元内容表中的值逐个填入指定范围,单元内容表中内容用完后重复使用。例如:—F12FF:00000100A↙—D12FF:00000100↙6.显示并修改寄存器命令R格式1:R格式2:R寄存器名功能:格式1显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址,代码及汇编语句格式。其中对状态标志FLAG以每位的形式显示。格式2显示指定寄存器内容。例如:RIP↙7.单步执行并显示系统环境T格式:T[=地址][条数]功能:地址的缺省值是当前IP值,条数的缺省值是一条。执行由指定地址起始的条数指定的若干条指令。6例如:—T;执行当前指令并显示状态—T10;从当前指令始执行10H条指令。8.连续执行命令G格式:(1)G=起始地址断点地址(2)G结束地址;从IP指向的地址开始执行程序到结束地址。9.退出debug命令Q—Q↙(二)、启动操作系统例如:利用串操作传送指令将0FFH送入附加段的0180H开始的128个字节存储单元中,编写一段程序。1.进入DEBUG状态,用鼠标直接点击debug文件—2.用A命令编辑源程序一A↙××××:0100MOVDI,0180↙0103MOVCX,80↙0106MOVAL,FF↙0108REPSTOSB↙010AHLT↙010B↙3.用U命令反汇编以上源程序—UCS:0100↙××××:0100BF8001MOVDI,0180××××:0103B98000MOVCX,0080××××:0106BOFFMOVAL,FF××××:0108F3REPE××××:0109AASTOSB××××:010AF4HLT4.若源程序有错可返回第2步用A命令进行修改,再进行第3步。若无错误,可运行程序。5.用R命令观察程序未执行前,程序中各有关寄存器内容,并填入括号内。7一R↙AL=()DI=()CX=()DS=()CS=()IP=()6.用D命令观察程序未执行前,存放结果的存储区的内容。—DES:0180↙7.用T命令执行一条指令,观察DI寄存器内容的变化,并填入此值:—T↙DI=()IP=()CS=()8.用T命令一条条执行程序,并观察相应寄存器内容或存储单元内容,一直执行到最后一条指令为止。9.用D命令观察最终结果—DES:0180↙此时可观察到ES:0180~ES:01FF单元中的内容已全部改为FF。10.用R命令改变IP值,使它返回到程序的第一条指令处。—RIP↙IP××××:0100↙11.用R命令以观察IP值;已改为0100—R↙12.用A命令对存储数据的缓冲区改变位置—A0100↙××××:0100MOVDI,0200↙××××:0103↙13.用D命令观察程序执行前,存储区的内容—DES:0200↙14.用G命令设置断点为HLT指令处—G010A↙15.再用D命令观察执行结果—DES:0200↙将会观察到ES:0200~ES:027F的内容改变为FF。8(三)、可执行文件的生成1、在桌面状态下,点击我的电脑,含有文件夹ASM的驱动器。例如:进入全屏幕编辑状态,点击EDIT↙CODESEGMENTASSUMECS:CODE,DS:CODESTART:MOVAX,CODEMOVDS,AXMOVDX,OFFSETAAMOVAH,09INT21HMOVAH,4CHINT21HAADB′HOWAREYOU$′CODEENDSENDSTART2.汇编源程序用汇编程序对源程序进行汇编生成机器能够识别的机器语言,即生成了目标文件(*.obj)。汇编的结果给出了程序的错误语句,可以根据错误提示修改源程序。其操作步骤如下:点击MASM↙Microsoft(R)MacroAssemblerVersion5.0Copyright(c)MicrosoftCorp1981—1985,1987ALLrightsreservedSourcefilename[.ASM]test↙Objectfilename[test.obj]:↙SourceListing[NUL.LST]:↙Cross—reference[NUL.CRF]:↙51736+405848bytesSymbolSpacefree0warningerrors0severeerrors9汇编的对象是用户编写的汇编语言源程序,它必须是以ASM为扩展名。汇编程序的输出文件有三个,第一个目标文件,它以OBJ为扩展名,产生OBJ文件是我们进行汇编操作的主要目的;第二个是列表文件,它以LST为扩展名,列表文件同时给出源程序和机器语言程序,从而可以使调试变得方便,列表文件是可有可无的,如不要,直接键入回车键即可,如需要,则打入文件名和回车;第三是交叉符号表,此表给出了用户定义的所有符号,对每个符号都列出了将其定义的所在行号和引用的符号,并在定义行号上加“#”号,同列表文件一样,交叉符号表为调试工作带来很大的方便。交叉符号表也是可有可无的,如不需要,那么在屏幕上出现提示信息[NUL.CRF]:时,打入回车即可。汇编过程结束时,会给出源程序中的警告性错误[warningErrors]和严重错误[severeErrors],前者指一般性错误,后者指语法性错误,当存在这两类错误时,屏幕上除指出错误个数表外,还给出错误信息代号和错误所在的行号。如果汇编过程中有错误,则程序员应该重新用编辑命令进行修改,再进行汇编,最终直到汇编正确通过。要指出的是汇编过程只能指出源程序中的语法错误,并不能指出算法错误和其它错误。3.用Link命令产生可执行文件(*.EXE文件)汇编过程根据源程序产生二进制的目标文件(OBJ文件),但OBJ文件用的是浮动地址,它不能直接上机执行。所以还必须使用链接程序(LINK)将OBJ文件转换成可执行的EXE文件。Link命令还可以将一个目标文件和其它多个模块(这些模块是由用户编写的,也可以是某个程序库中存在的)链接起来。具体操作如下:点击Link↙此时屏幕上见到如下回答信息:IBMPersonalcomputerLinkerVersion2.00(C)copyrightIBMCorpl981,1982,1983RUNFile[test.EXE]:↙ListFile[NUL.MAP]:test↙Libraries[.LiB]:↙Waming:1NOStacksegmenttherewas1errordetectedLink命令有一个输入文件,即OBJ文件,有时,用户程序用到库函数,此时,对于提示信息Libraries[.LiB]要输入库名。Link过程产生两个输出文件,一个是扩展名为EXE的执行文件,产生此文件是Link过程的主要目的,另一个是扩展名MAP的列表分配文件,有人也称它为映像文件,它10给出每个段在内存中的分配情况MAP文件也是可有可无的。4.程序执行点击文件名↙如果运行结果不正确可把exe文件装入debug进行调试,发现错误并改正。方法是点击debug_N文件名.exe_L_U四、实验设备硬件环境IBM/PC及其兼容机软件环境操作系统WINDOWS95以上版本调试程序DEBUG.COM编辑程序EDIT.EXE汇编程序MASM.EXE连接程序LINK.EXE五、实验内容(1)1.将数据段中0200H字节存储单元中的二位BCD码转换为二个ASCII码送0201H开始的二个字节单元中,编写一段程序。2.编写一段程序,在内存中自0200H地址开始的连续七个单元中存入0~9的平方值。要求利用计算法查表求0210H单元中指定数0~9中的任意一数的平方值,并将所求平方值存入0211H单元中。实验内容(2)1.显示一个字符‘A’2.从键盘上读取一个字符并显示3.间隔0.5秒显示8个A六、思考题自编一个汇编语言程序并调试。七、实验报告的要求1、填写实验课程及实验名称2、画出流程图或方框图3、编写程序4、总结实验结果和体会11实验二两个多位十进制数加减运算编程一、实验目的学习数据传送和算术运算指令的用法。二、实验原理将两个多位十进制数相加。要求被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处。三、预习要求1、汇编语言程序建立过程和调试方法2、写出预习报告四、实验设备PC机一台五、实验内容及步骤1、参考程序框图Y显