大全程序调试实验报告
- 格式:docx
- 大小:20.29 KB
- 文档页数:7
目录微机原理与接口技术课程作业班级:、实验目的:汇编语言是一种用助记符表示的程序设计语言。
用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O 接口驱动等程序设计。
通过本次实验,熟练掌握汇编程序的调试,深入了解MAS汇编语言及其程序设计方法。
二、实验环境EDIT编辑器、MAS汇编程序、LINK连接程序、TD调试程序三、实验过程一)基础知识储备1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。
2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。
3.了解MAS汇编语言及其程序设计方法。
掌握MAS汇编语言的语句格式、语法规则、常用伪指令及DOS 功能的调用等。
了解顺序结构、分支结构、循环结构和子程序的设计方法。
二)汇编语言程序设计1.分析问题,明确要解决的问题和要求2.确定解决问题的思路和方法。
3.将解决问题的方案编制成程序流程图4.根据流程图,逐条编写程序。
5.上机调试,验证程序是否正确。
三)汇编程序调试MASM匚编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件; 在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。
汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤:1.编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM的汇编语言源文件*.ASM。
2.汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ。
3.连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE。
4.运行:运行可执行文件,验证程序是否正确。
5.调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤,直到运行正确为止。
四、调试实例(一)实例一要求:编写程序,将MBU为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。
实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。
源程序:DATA SEGMENT ; 数据段开始MBUF DB 0,1,2,3,4 ; 每个数据分配一个存储单元NBUF DB 5 DUP(0) ; 空5个存储单元备用DATA ENDS ; 数据段结束STACK SEGMENT PARA STACK ; 堆栈段开始,定位类型是PARADB 100 DUP(0)STACK ENDSCODE SEGMENT ; 代码段开始ASSUME CS:CODE, DS:DATA,SS:STACK ;段分配伪指令START:MOV AX,DATA ; 数据传送MOV DS,AX ; 存储器数据传送到段寄存器中MOV SI,OFFSET MBUF ; 取第一组操作数的偏移地址MOV DI,OFFSET NBUF ; 取第二组操作数的偏移地址MOV CX,5 ; 数据个数5传送到CX中LOP1:MOV AX,[SI]PUSH AXINC SILOOP LOP1LOP2:POP AXMOV [DI],AXINC DILOOP LOP2MOV AH,4CHINT 21H CODE ENDSEND START数据传送数据入栈指针加1 循环数据出栈数据传送终止进程二)实例二要求:编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。
实验思路:本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。
利用分支结构和循环结构解决问题。
源程序:DATA SEGMENT ; 数据段BUF DB 5,2,7,-4,-2,-3,4,9,-6COUNT EQU $-BUF ; 等值语句,COUN等于BUF数据长度ZS DBFS DBSTR1 EQU BUF+20 ; 正数首地址STR2 EQU BUF+30 ; 负数首地址DATA ENDSSTACK SEGMENT STACK ; 堆栈段DB 100 DUP(0)STACK ENDSCODE SEGMENT ; 代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ; 初始化MOV BX,OFFSET BUF ; 取BUF中操作数的偏移地址MOV CX,COUNTMOV ZS,0MOV FS,0MOV SI,OFFSET STR1MOV DI,OFFSET STR2LOP:MOV AL,[BX]CMP AL,0 ; 带符号数比较JG LOP1 ; 数据大于0 时跳转至LOP1JL LOP2 ; 数据小于0 时跳转至LOP2LOP1:INC ZS ; 正数计数加1MOV [SI],AL ; 正数数据存入SI 寄存器中INC BXINC SILOOP LOPJMP LASTLOP2:INC FSMOV [DI],AL ; 负数数据存入DI中INC BXINC DILOOP LOPLAST:MOV DL,ZSMOV AH,06H ; 显示字符INT 21HMOV DL,FSMOV AH,06HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START(三)实例三要求:编写程序,从内存BLOC!开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MA中。
源程序:DATA SEGMENTBLOCK DB 1,-1,2,-3,4,5,3,-1,2 ; 设置数据COUNT EQU $-BLOCK ; 置计数值MAX DB ; 存最大值DATA ENDSSTACK SEGMENT STACKDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BLOCK ; 数据首地址MOV MAX,0MOV CX,COUNT ;CX 为计数器AGAIN:MOV AL,[SI] CMP AL,0JS JDZ将第一个数据存在AL中判断正负小于0 转到JDZLOP:CMP AL,MAXJG BIG JMP LOP1 ;AL比较数据与最大值大转到BIGJDZ:NEG AL JMP LOP1 求补,即绝对值跳转至LOP1BIG:MOV MAX,ALJMP LOP1 LOP1:INC SI DEC CX MOV AH,MAX指针加1 ,指向下一个数计数值减1最大值存入AHLOP2:MOV AL,[BX] CMP AL,[BX+1] JAE LOP3XCHG AL,[BX+1] MOV [BX],AL MOV DI,0 第一个数据送到 AL 中 两数进行比较 大于等于转到 LOP3 小于交换两数位置, AL 存大数交换标志 DI=0LOP3: INC BX LOOP LOP2 CMP DI,0 JNZ OK MOV CX,SI LOOP LOP1 数据指针指向下一位 循环 LOP2交换标志为 0 继续,交换标志为 1 结束 不等于0转到0K 结束 等于 0 循环 LOP10K:M0V CX,C0UNTM0V BX,0FFSET BUF ;BX 为BUF 首地址的偏移地址 L0P4:M0V DL,[BX];BX中的数放在 DL 中JNZ AGAIN MOV AH,4CHINT 21H CODE ENDS END START(四)实例四要求:编写程序,将内存中N 个无符号数从大到小排序后输出显示。
源程序:DATA SEGMENTBUF DB 1H,9H,6H,15H,10H COUNT EQU $-BUF DATA ENDSSTACK SEGMENT STACK DB 100H DUP() STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX ; 初始化 MOV CX,COUNT ; 置计数器DEC CX ; 外层循环减 1跳转至 AGAINLOP1:MOV SI,CX MOV DI,1MOV BX,OFFSET BUF 交换标志 DI=1 取数组中第一个偏移地址LOOP LOP4 MOV AH,4CH INT 21H CODE ENDS END START五、实验总结本次实验,虽然花费时间较长,但通过实验的完成,我的收获也很多。
(一)实验收获无论是知识方面还是能力方面,本次实验都让我得到了很大提升。
知识方面,本次实验需要编写符合要求的程序。
首先要进行程序的设计, 明确实验目的和设计思路, 画出程序框图,然后进行程序的编写。
通过程序的设计与编写,使我能够更加深入的了解和掌握 80486了指令系统。
程序编写完成后,便需要进行调试,最初编写的程序中出现了很多错误,在编 译过程中发现错误后,不断进行修正,直到程序正确,可以实现所需功能。
在这一过程中,我逐渐 熟悉了汇编程序编辑、编译、 连接、调试的过程, 并能通过这些软件的功能找到自己的错误加以改 正,最终实现实验目的。
能力方面,由于系统原因,不能直接在电脑当前系统中进行汇编程序的调试, 因此我安装了虚拟机, 在虚拟机安装过程中遇到很多问题, 通过对搜索引擎的有效利用, 我解决了安装过程中的问题并成 功安装了 XP 系统,建立了实验所需环境,为实验的完成打下基础。
本次实验,提高了我分析问题 和解决问题的能力,能够通过查阅资料获得所需信息,解决实验过程中所遇到的各种问题。
(二)实验感悟本次实验对知识和能力的要求都比较高, 开始完成实验室, 遇到了很多阻碍, 但通过资料的查找和 优秀视频的参考,我逐渐找到问题的解决办法,最终实现了实现所需的功能,完成了这项任务。
在 这一过程中, 我更深刻地体会到, 任何知识的学习和掌握都是时间和汗水的积累。
只有真正认真思 考,坚定完成任务的信念,找到解决问题的办法,才能学会知识和技能。
MOV AH,06H INT 21H 输出显示INC BX 指针指向下一字符 循环 LOP4 结束进程 返回 DOS。