您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 汇编程序调试实验报告
微机原理与接口技术课程作业班级:目录一、实验目的:...............................................................................................................................3二、实验环境...................................................................................................................................3三、实验过程...................................................................................................................................3(一)基础知识储备...............................................................................................................3(二)汇编语言程序设计.......................................................................................................3(三)汇编程序调试...............................................................................................................3四、调试实例...................................................................................................................................4(一)实例一...........................................................................................................................4(二)实例二...........................................................................................................................5(三)实例三...........................................................................................................................6(四)实例四...........................................................................................................................7五、实验总结...................................................................................................................................8(一)实验收获.......................................................................................................................8(二)实验感悟.......................................................................................................................9一、实验目的:汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MASM汇编语言及其程序设计方法。二、实验环境EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序三、实验过程(一)基础知识储备1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。3.了解MASM汇编语言及其程序设计方法。掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。了解顺序结构、分支结构、循环结构和子程序的设计方法。(二)汇编语言程序设计1.分析问题,明确要解决的问题和要求。2.确定解决问题的思路和方法。3.将解决问题的方案编制成程序流程图。4.根据流程图,逐条编写程序。5.上机调试,验证程序是否正确。(三)汇编程序调试MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:1.编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM的汇编语言源文件*.ASM。2.汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ。3.连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE。4.运行:运行可执行文件,验证程序是否正确。5.调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤,直到运行正确为止。四、调试实例(一)实例一要求:编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。源程序:DATASEGMENT;数据段开始MBUFDB0,1,2,3,4;每个数据分配一个存储单元NBUFDB5DUP(0);空5个存储单元备用DATAENDS;数据段结束STACKSEGMENTPARASTACK;堆栈段开始,定位类型是PARADB100DUP(0)STACKENDSCODESEGMENT;代码段开始ASSUMECS:CODE,DS:DATA,SS:STACK;段分配伪指令START:MOVAX,DATA;数据传送MOVDS,AX;存储器数据传送到段寄存器中MOVSI,OFFSETMBUF;取第一组操作数的偏移地址MOVDI,OFFSETNBUF;取第二组操作数的偏移地址MOVCX,5;数据个数5传送到CX中LOP1:MOVAX,[SI];数据传送PUSHAX;数据入栈INCSI;指针加1LOOPLOP1;循环LOP2:POPAX;数据出栈MOV[DI],AX;数据传送INCDILOOPLOP2MOVAH,4CH;终止进程INT21HCODEENDSENDSTART(二)实例二要求:编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。实验思路:本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。利用分支结构和循环结构解决问题。源程序:DATASEGMENT;数据段BUFDB5,2,7,-4,-2,-3,4,9,-6COUNTEQU$-BUF;等值语句,COUNT等于BUF数据长度ZSDB?FSDB?STR1EQUBUF+20;正数首地址STR2EQUBUF+30;负数首地址DATAENDSSTACKSEGMENTSTACK;堆栈段DB100DUP(0)STACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX;初始化MOVBX,OFFSETBUF;取BUF中操作数的偏移地址MOVCX,COUNTMOVZS,0MOVFS,0MOVSI,OFFSETSTR1MOVDI,OFFSETSTR2LOP:MOVAL,[BX]CMPAL,0;带符号数比较JGLOP1;数据大于0时跳转至LOP1JLLOP2;数据小于0时跳转至LOP2LOP1:INCZS;正数计数加1MOV[SI],AL;正数数据存入SI寄存器中INCBXINCSILOOPLOPJMPLASTLOP2:INCFSMOV[DI],AL;负数数据存入DI中INCBXINCDILOOPLOPLAST:MOVDL,ZSMOVAH,06H;显示字符INT21HMOVDL,FSMOVAH,06HINT21HMOVAH,4CHINT21HCODEENDSENDSTART(三)实例三要求:编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MAX中。源程序:DATASEGMENTBLOCKDB1,-1,2,-3,4,5,3,-1,2;设置数据COUNTEQU$-BLOCK;置计数值MAXDB?;存最大值DATAENDSSTACKSEGMENTSTACKDB100DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBLOCK;数据首地址MOVMAX,0MOVCX,COUNT;CX为计数器AGAIN:MOVAL,[SI];将第一个数据存在AL中CMPAL,0;判断正负JSJDZ;小于0转到JDZLOP:CMPAL,MAX;比较数据与最大值JGBIG;AL大转到BIGJMPLOP1JDZ:NEGAL;求补,即绝对值JMPLOP1;跳转至LOP1BIG:MOVMAX,ALJMPLOP1LOP1:INCSI;指针加1,指向下一个数DECCX;计数值减1MOVAH,MAX;最大值存入AHJNZAGAIN;跳转至AGAINMOVAH,4CHINT21HCODEENDSENDSTART(四)实例四要求:编写程序,将内存中N个无符号数从大到小排序后输出显示。源程序:DATASEGMENTBUFDB1H,9H,6H,15H,10HCOUNTEQU$-BUFDATAENDSSTACKSEGMENTSTACKDB100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX;初始化MOVCX,COUNT;置计数器DECCX;外层循环减1LOP1:MOVSI,CXMOVDI,1;交换标志DI=1MOVBX,OFFSETBUF;取数组中第一个偏移地址LOP2:MOVAL,[BX];第一个数据送到AL中CMPAL,[BX+1];两数进行比较JAELOP3;大于等于转到LOP3XCHGAL,[BX+1];小于交换两数位置,AL存大数MOV[BX],ALMOVDI,0;交换标志DI=0LOP3:INCBX;数据指针指向下一位LOOPLOP2;循环LOP2CMPDI,0;交换标志为0继续,交换标志为1结束JNZOK;不等于0转到OK,结束MOVCX,SILOOPLOP1;等于0循环LOP1OK:MOVCX,COUNTMOVBX,OFFSETBUF;BX为BUF首地址的偏移地址LO
本文标题:汇编程序调试实验报告
链接地址:https://www.777doc.com/doc-2279418 .html