《微机原理与接口技术实验报告_7.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验报告_7.docx(23页珍藏版)》请在第一文库网上搜索。
1、目录实验一汇编语言程序设计开发环境2实验二BCD数运算与十进制调整6实验三键盘输入与回显10实验四字符串匹配13实验五用递归计算阶乘17实验六中断服务子程序设计20实验一汇编语言程序设计开发环境一、实验目的1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用TC编辑环境编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM的使用;4、熟练掌握连接程序11NK的使用;5、debug的使用;二、实验设备计算机三、实验原理上机过程:手工编写的源程序一一汇编语言源文件(.asm)机器语言目标文件(.obj)机器语言执行文件(.exe)(1)汇编语言汇编语言源程序的汇编过程是是利用汇编程序(MASM)
2、对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCn码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为.OBJ的目标文件、扩展名为.1ST的列表文件和扩展名为.CRF的交叉索引文件。在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,汇编程序的主要功能可以概括为以下三点:(1)检查源程序中的语法错误,并给出错误信息;(2)产生目标程
3、序文件(OBJ文件),并可给出列表文件(.1ST文件);(3)展开宏指令(2)DEBUG命令显示内存单元内容的命令D格式:-D地址D命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为1680H,段内偏移量为O1IOH。Debug中所显示的数据均为十六进制数,且省去了后面的H标志。格式(2):-D范围将显示指定地址范围内的内存单元的内容,起始地址可由段基址及段内偏移量两个部分组成,中间用冒号“:”隔开,也可以只指出段内偏移量,而此时的段基址在DS中。这里所说的范围包含起始地址和结束地址。比如-DDSiIOOO1020将显示数据段偏移地址
4、为IOOOH到I020H的内容。运行程序命令G格式:G=地址地址地址该命令可以在程序运行中设置断点。它是DebUg程序进行程序调试的主要命令之一。示例:-g001a则执行从当前cs:ip至OO1a的指令,注意:地址设置必须从指令的第一字节设起。第一个参数“二地址”规定了程序执行的起始地址,以CS内容作段地址,等号后面的地址只需给出地址偏移量。此时,命令G与地址之间的等号不能省去。如果在G命令执行前,已经设置了CS值和IP值,则也可以直接用G命令,从指定地址执行程序。格式中后面给出的地址是指断点地址,最多可设置10个断点。当程序执行到一个断点时,就停下来,显示CPU各寄存器的内容和标志位的状态,
5、以及下一条待执行的指令,被调试程序的所有断点全部被取消,并返回DebUg。地址参数所指的单元,必须包含有有效的8088指令的第一个字节,否则将产生不可预料的结果。堆栈必须至少包含有6个可用字节,否则也将产生不可预料的结果。若断点地址只包括地址偏移量,则认为段地址在CS寄存器中。四、实验内容要求:把40个字母a的字符串从源缓冲区传送到目的缓冲区。实验程序:datasegment;definedatasegmentsource.bufferdb40dup(a,)dataendsextrasegment;defineextrasegmentdest_bufferdb40dup(?)extraends
6、codesegment;definecodesegmentmainprocfar;mainpartofprogramassumecs:code,ds:data,es:extrastart:;startingexecutionaddress;setupstackforreturnpushds;saveo1ddatasegmentsubax,ax;putzeroinAXpushax;saveitonstack;setDSregistertocurrentdatasegmentmovax,data;datasegmentaddrmovds,ax;intoDOSregister;setESregist
7、ertocurrentextrasegmentmovax,extra;extrasegmentaddrmoves,ax;intoESregister;MAINPARTOFPROGRAMGOESHERE1easi,source_buffer;bufferinSI1eadi,dest-buffer;bufferinDIc1dmovex,40repmovsbretmainendpcodeendsendstart;putoffsetaddrofsource;putoffsetaddrofdest;setDFf1agtoforward;putcountinCX;moveentirestring;retu
8、rntoDOS;endofmainpartofprogram;endofcodesegment;endassemb1y上机调试及运行结果用masm程序产生OBJ文件曲C:WINDOWSsystem32cmd.exe.XU)Mas5.0HftSMnasn用UNK产生exe文件围C:WINDOWSsystem32cmd.exe-Microsoft(R)MacroAssemb1erUersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.A11rightsreserued.Sourcefi1ename1ASH】:ShiyanyiObjectfi1enaeI
9、shiyanyi.0曲:Source1istingINU1.1ST1:Cross-referenceINU1.CRF:50780+415492Bytessymbo1spacefree0WarningErrors0SeuereErrorsD:nasn5.0MfiSM1inkShiyanyiMicrosoft1程序的执行rnasn5.0MftSMdebugshijianjii.exefiX=13E?BX00CX=期00DXWSP=FFFCBP=0000SI4828DI=0028DS=13E4ES=13E?SS=13E4CS=13EfiIP=001CNUUPEIP1ZRNAPENC13Eft:001
10、CCBRETFT13e4:013E4:000013E4:001013E4:002013E4:003013E4:004013E4:005013E4:006013E4:00706161616161616161-61616161616161616161616161616161-61616161616161616161616161616161-00000000000000006161616161616161-61616161616161616161616161616161-61616161616161616161616161616161-0000WM0000NNIE2BC058B8E4138E-D8B
11、8E?138EC08D3600008D3E0000FCB9-28朋F3MCB83?F06aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.+.P用反汇编命令U来确定所要设定的断点地址Hu13EA:0000IEPUSHDS13EA:00012BC0SUBAX,AX13EA:000350PUSHAX13EA:0004B8E413MOUAX,13E413Ef1:000?8ED8MOUDSJX13Ef1:0009B8E713MOUAX,13E?13EA:000C8EC0MOUESJX13EA
12、:000E8D3600001EAS1080013EA:00128D3E00001EAD1000013Ef1:0016FCC1D13Ef1:001?B92800MOUCX,朋2813EA:0eiAF3REPZ13EABMMOUSB13Ef1:001CCBRETF13EA:001D837F0600CMPUORDPnMBX+06,硼由上图可知,断点地址为的偏移地址为:OO1C81c用G命令使程序运行,同时设定断点为OO1C用D命令查看数据段的有关区域,查看程序的运行结果。五、实验心得通过这次上机实验,第一次接触了TC环境,对汇编程序的编译、运行有了感性的认识。学会了如何在TC环境下编程,熟悉了根据提
13、示,修改错误,调试程序的过程,并学会了使用几个常用的DEBUG命令。实验二BCD数运算与十进制调整一、实验目的1、熟悉BCD码的基本知识2、熟悉汇编语言BCD码多字节加减法基本指令的使用方法;3、掌握BCD码调整指令的使用方法。二、实验设备计算机三、实验原理1、BCD码BCD码是一种用二进制编码的十进制数,又称二一十进制数。它是用4位二进制数表示一个十进制数码的,由于这4位二进制数的权为8421,所以BCD码又称8421码。在IBMPC机中,表示十进制的BCD码可以用压缩的BCD码和非压缩的BCD码两种格式表示。(1)压缩的BCD码压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数形式为一个顺序的以4位为一组的数串。(2)非压缩的BCD码非压缩的BCD码则以8位二进制数表示一个十进制数位,8位中的低4位表示8421的BCD码,而高4位则没有意义。2、BCD码的调整指令(1)压缩的BCD码调整指令1) DAA加法的十进制调整指令该指令把A1中的和调整到压缩的BCD格式,这条指令之前必须执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在A1寄存器中。功能:如果A1寄存器中低4位大于9或辅助进位(AF)