您好,欢迎访问三七文档
1实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。DATASEGMENTBUFDB23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCNEQU$-BUFDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVBX,OFFSETBUFMOVCX,CNDECCXMOVAL,[BX]INCBXLP:CMPAL,[BX]JBENEXTMOVAL,[BX]NEXT:INCBXDECCXJNZLPMOVAH,4CHINT21HCODEENDSENDSTART键入以下命令:C:\EDITABC.ASM此时屏幕的显示状态如图1所示。2图1用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。(3)若程序中使用了宏指令,则汇编程序将展开宏指令。源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。图2MASM宏汇编程序工作窗口汇编过程的错误分警告错误(WarningErrors)和严重错误(SevereErrors)两种。其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。3.用连接程序生成可执行程序文件经汇编以后产生的目标程序文件(.OBJ文件)并不是可执行程序文件,必须经过连接以后,才能成为可执行文件(即扩展名为.EXE)。3连接过程如图3所示。图3LINK连接程序工作窗口上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。连接以后,便可以产生可执行程序文件(.EXE文件)。4.程序的执行当我们建立了正确的可执行文件以后,就可以直接在DOS状态下执行该程序。如:C:\ABC本程序当中没有用到DOS中断调用指令,所以在屏幕上看不到程序执行的结果。实验二(2)分支及循环程序设计一、实验目的及要求熟练掌握转移指令,掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成条件和判断条件的方法和技巧。掌握循环程序设计的方法(单重循环结构和两重循环结构),正确分配与使用寄存器,根据实际问题选择控制循环的方法(循环次数已知和循环次数未知)。二、实验内容编写下列程序并调试通过。1.通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。2.编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:1)如果三个数都不相等,显示0;2)如果三个数都两个相等,显示1;3)如果三个数都相当,显示2。43.编写一个程序,要求通过键盘接收一个个位数N,然后显示N个字母‘$’。4.从键盘上输入一个8位二进制数,在显示器上显示其相应的十六进制数。(教材P170习题5)5.要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。6.用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。三、实验设计方案说明实验1流程图:实验完整代码:DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START:MOVAX,DATASMOVDS,AX;初始化数据段的段地址MOVCL,3L:MOVAH,01H;输入一个小写字母,常用DOS功能调用,入口参数为AHINT21HCMPAL,61H;对输入进行判断,确保输入的字符为a~zJBLCMPAL,7AHJALMOVBL,ALMOVDL,0DH;回车MOVAH,02H;常用DOS功能调用,入口参数为AH5INT21HMOVDL,0AH;换行MOVAH,02HINT21HSUBBL,01H;按顺序输出三个字母CMPBL,61H;判断前导字母是否合法JNBL1ADDBL,1AHMOVDL,BLMOVAH,02HINT21HSUBBL,19HJMPL2L1:MOVDL,BL;输出录入字母的前导字母MOVAH,02HINT21HINCBLL2:MOVDL,BL;输出录入字母本身MOVAH,02HINT21HINCBLCMPBL,7AH;判断后续字母是否合法JNAL3SUBBL,1AHL3:MOVDL,BL;输出录入字母的后续字母MOVAH,02H;常用DOS功能调用,入口参数为AHINT21HMOVAH,4CHINT21HCODESENDSENDSTART6实验2实验流程图:实验完整代码:DATASEGMENTARRAYDW1,2,3;为数组中的三个元素各分配一个字的存储空间并初始化DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START:MOVAX,DATAMOVDS,AX;初始化数据段的段地址MOVAX,ARRAYMOVBX,ARRAY+2MOVCX,ARRAY+4CMPAX,BX;JELCMPBX,CXJEL1CMPAX,CXJEL1MOVDL,30HJMPEXITL:CMPBX,CXJNEL1MOVDL,32H7JMPEXITL1:MOVDL,31HEXIT:MOVAH,02HINT21HMOVAH,4CHINT21HCODEENDSENDSTART实验3流程图:实验完整代码:DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段START:MOVAX,DATASMOVDS,AX;初始化数据段的段地址L:MOVAH,01H;输入一位数字INT21HCMPAL,30H;对输入进行判断JBLCMPAL,39HJALMOVCL,ALMOVDL,0DH;回车MOVAH,02HINT21H8MOVDL,0AH;换行MOVAH,02HINT21HSUBCL,30HJZL2L1:MOVDL,24H;输出相应个数的$MOVAH,02HINT21HSUBCL,01HJNZL1L2:MOVAH,4CHINT21HCODESENDSENDSTART实验4流程图:实验完整代码:DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX9MOVBL,0MOVCL,8L:SHLBL,1;输入8位二进制数,并保存在BL中MOVAH,01HINT21HCMPAL,30HJZL1ORBL,1L1:DECCLJNZLMOVDL,0DH;回车MOVAH,02HINT21HMOVDL,0AH;换行MOVAH,02HINT21HMOVDH,0MOVCX,0204HL2:SHLBL,1;输出2位十六进制数JCL3SHLDH,1JMPL4L3:SHLDH,1ADDDH,1L4:DECCLJNZL2ADDDH,30HCMPDH,39HJBEL5ADDDH,07HL5:MOVDL,DHMOVAH,02HINT21HMOVDH,0MOVCL,4DECCHJNZL2MOVAH,4CHINT21HCODESENDSENDSTART10实验5实验完整代码:DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVBX,0MOVCX,0404HL1:MOVAH,01H;输入4位十六进制数INT21HSUBAL,30HCMPAL,0AHJBL2SUBAL,07HL2:SHLBX,CLORBL,ALDECCHJNZL1MOVDL,0DH;回车MOVAH,02HINT21HMOVDL,0AH;换行MOVAH,02HINT21HMOVCX,16L3:SHLBX,1;输出16位二进制数JCL4MOVDL,30HMOVAH,02HINT21HDECCXJNZL3JMPEXITL4:MOVDL,31HMOVAH,02H11INT21HDECCXJNZL3EXIT:MOVAH,4CHINT21HCODESENDSENDSTART实验6实验完整代码:DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVDL,10HMOVCX,0FHL1:MOVBX,10HL2:MOVAH,02HINT21HINCDLPUSHDXMOVDL,''MOVAH,02HINT21HPOPDXDECBXCMPBX,00HJNZL2PUSHDXMOVDL,0DHMOVAH,02HINT21H12MOVDL,0AHMOVAH,02HINT21HPOPDXDECCXCMPCX,00HJNZL1MOVAH,4CHINT21HCODESENDSENDSTART四、测试及评估实验1运行结果实验2运行结果13实验3运行结果实验4运行结果实验5运行结果实验6运行结果五、设计心得这次试验过程中出现的问题很多,最开始是对过程的不熟悉以及第一次使用这个asm14软件导致编译运行老是出错,最后是代码上的错误。所以通过这次试验不仅让我懂得对汇编操作的基本过程熟悉了,更多的是对整个编写代码的流程熟悉了。中间总是出现错误时感觉不知道该怎么办了,但是觉得这种代码也并不是很难,应该可以实现,所以通过请教同学、翻阅资料、经过不断地改动之后最终让正确的实验结果出现。所以这次试验还让我对做实验增加了耐心,因而这次收获很多。实验二子程序设计一、实验目的及要求理解CALL和RET指令,以及子程序的调用与返回过程;掌握子程序的结构,及相关的设计方法;能合理地分解程序功能,有效地支持功能的重用。二、实验内容编写下列程序并调试通过。从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示这三类字符的计数结果(采用子程序BINIDEC)(子程序BINIDEC输入:16位二进制数输出:十进制数,功能:将16位二进制数转换成十进制数)三、实验设计方案说明实验完整代码:DATASSEGMENTALPHADB'Thetotalofalphais:','$'N
本文标题:汇编实验报告
链接地址:https://www.777doc.com/doc-2646015 .html