大全程序调试实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术
课
程
作
业
班级:
目录
一、实验目的: (2)
二、实验环境 (2)
三、实验过程 (2)
(一)基础知识储备 (2)
(二)汇编语言程序设计 (2)
(三)汇编程序调试 (2)
四、调试实例 (3)
(一)实例一 (3)
(二)实例二 (4)
(三)实例三 (5)
(四)实例四 (6)
五、实验总结 (7)
(一)实验收获 (7)
(二)实验感悟 (7)
一、实验目的:
汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、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开始的存储单元中。实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。
源程序:
DATA SEGMENT ;数据段开始
MBUF DB 0,1,2,3,4 ;每个数据分配一个存储单元
NBUF DB 5 DUP(0) ;空5个存储单元备用
DATA ENDS ;数据段结束
STACK SEGMENT PARA STACK ;堆栈段开始,定位类型是PARA
DB 100 DUP(0)
STACK ENDS
CODE 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 AX ;数据入栈
INC SI ;指针加1
LOOP LOP1 ;循环
LOP2:
POP AX ;数据出栈
MOV [DI],AX ;数据传送
INC DI
LOOP LOP2
MOV AH,4CH ;终止进程
INT 21H
CODE ENDS
END START
(二)实例二
要求:编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。
实验思路:本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。利用分支结构和循环结构解决问题。源程序:
DATA SEGMENT ;数据段
BUF DB 5,2,7,-4,-2,-3,4,9,-6
COUNT EQU $-BUF ;等值语句,COUNT等于BUF数据长度
ZS DB ?
FS DB ?
STR1 EQU BUF+20 ;正数首地址
STR2 EQU BUF+30 ;负数首地址
DATA ENDS
STACK SEGMENT STACK ;堆栈段
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX ;初始化
MOV BX,OFFSET BUF ;取BUF中操作数的偏移地址
MOV CX,COUNT
MOV ZS,0
MOV FS,0
MOV SI,OFFSET STR1
MOV DI,OFFSET STR2
LOP:MOV AL,[BX]
CMP AL,0 ;带符号数比较
JG LOP1 ;数据大于0时跳转至LOP1
JL LOP2 ;数据小于0时跳转至LOP2
LOP1:INC ZS ;正数计数加1
MOV [SI],AL ;正数数据存入SI寄存器中
INC BX
INC SI
LOOP LOP
JMP LAST
LOP2:INC FS
MOV [DI],AL ;负数数据存入DI中
INC BX
INC DI
LOOP LOP
LAST:MOV DL,ZS