汇编程序调试实验报告Word格式.docx

上传人:b****4 文档编号:17071027 上传时间:2022-11-28 格式:DOCX 页数:9 大小:18.58KB
下载 相关 举报
汇编程序调试实验报告Word格式.docx_第1页
第1页 / 共9页
汇编程序调试实验报告Word格式.docx_第2页
第2页 / 共9页
汇编程序调试实验报告Word格式.docx_第3页
第3页 / 共9页
汇编程序调试实验报告Word格式.docx_第4页
第4页 / 共9页
汇编程序调试实验报告Word格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

汇编程序调试实验报告Word格式.docx

《汇编程序调试实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《汇编程序调试实验报告Word格式.docx(9页珍藏版)》请在冰豆网上搜索。

汇编程序调试实验报告Word格式.docx

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;

堆栈段开始,定位类型是PARA

DB100DUP(0)

STACKENDS

CODESEGMENT;

代码段开始

ASSUMECS:

CODE,DS:

DATA,SS:

STACK;

段分配伪指令

START:

MOVAX,DATA;

数据传送

MOVDS,AX;

存储器数据传送到段寄存器中

MOVSI,OFFSETMBUF;

取第一组操作数的偏移地址

MOVDI,OFFSETNBUF;

取第二组操作数的偏移地址

MOVCX,5;

数据个数5传送到CX中

LOP1:

MOVAX,[SI];

PUSHAX;

数据入栈

INCSI;

指针加1

LOOPLOP1;

循环

LOP2:

POPAX;

数据出栈

MOV[DI],AX;

INCDI

LOOPLOP2

MOVAH,4CH;

终止进程

INT21H

CODEENDS

ENDSTART

(二)实例二

编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。

本例中要求将正数和负数分开,因此应先判断数据块中数据的正负,然后将不同符号的数分别传送到两个缓冲区中,同时分别计数。

利用分支结构和循环结构解决问题。

数据段

BUFDB5,2,7,-4,-2,-3,4,9,-6

COUNTEQU$-BUF;

等值语句,COUNT等于BUF数据长度

ZSDB

FSDB

STR1EQUBUF+20;

正数首地址

STR2EQUBUF+30;

负数首地址

DATAENDS

STACKSEGMENTSTACK;

堆栈段

代码段

ASSUMECS:

CODE,DS:

STACK

MOVAX,DATA

初始化

MOVBX,OFFSETBUF;

取BUF中操作数的偏移地址

MOVCX,COUNT

MOVZS,0

MOVFS,0

MOVSI,OFFSETSTR1

MOVDI,OFFSETSTR2

LOP:

MOVAL,[BX]

CMPAL,0;

带符号数比较

JGLOP1;

数据大于0时跳转至LOP1

JLLOP2;

数据小于0时跳转至LOP2

INCZS;

正数计数加1

MOV[SI],AL;

正数数据存入SI寄存器中

INCBX

INCSI

LOOPLOP

JMPLAST

INCFS

MOV[DI],AL;

负数数据存入DI中

LAST:

MOVDL,ZS

MOVAH,06H;

显示字符

MOVDL,FS

MOVAH,06H

MOVAH,4CH

(三)实例三

编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数中找出绝对值最大的那个最大的数,将其存入MAX中。

DATASEGMENT

BLOCKDB1,-1,2,-3,4,5,3,-1,2;

设置数据

COUNTEQU$-BLOCK;

置计数值

MAXDB;

存最大值

STACKSEGMENTSTACK

CODESEGMENT

MOVDS,AX

MOVSI,OFFSETBLOCK;

数据首地址

MOVMAX,0

MOVCX,COUNT;

CX为计数器

AGAIN:

MOVAL,[SI];

将第一个数据存在AL中

判断正负

JSJDZ;

小于0转到JDZ

CMPAL,MAX;

比较数据与最大值

JGBIG;

AL大转到BIG

JMPLOP1

JDZ:

NEGAL;

求补,即绝对值

JMPLOP1;

跳转至LOP1

BIG:

MOVMAX,AL

指针加1,指向下一个数

DECCX;

计数值减1

MOVAH,MAX;

最大值存入AH

JNZAGAIN;

跳转至AGAIN

(四)实例四

编写程序,将内存中N个无符号数从大到小排序后输出显示。

BUFDB1H,9H,6H,15H,10H

COUNTEQU$-BUF

DB100HDUP()

置计数器

外层循环减1

MOVSI,CX

MOVDI,1;

交换标志DI=1

取数组中第一个偏移地址

MOVAL,[BX];

第一个数据送到AL中

CMPAL,[BX+1];

两数进行比较

JAELOP3;

大于等于转到LOP3

XCHGAL,[BX+1];

小于交换两数位置,AL存大数

MOV[BX],AL

MOVDI,0;

交换标志DI=0

LOP3:

INCBX;

数据指针指向下一位

LOOPLOP2;

循环LOP2

CMPDI,0;

交换标志为0继续,交换标志为1结束

JNZOK;

不等于0转到OK,结束

MOVCX,SI

等于0循环LOP1

OK:

BX为BUF首地址的偏移地址

LOP4:

MOVDL,[BX];

BX中的数放在DL中

输出显示

指针指向下一字符

LOOPLOP4;

循环LOP4

结束进程

INT21H;

返回DOS

五、实验总结

本次实验,虽然花费时间较长,但通过实验的完成,我的收获也很多。

(一)实验收获

无论是知识方面还是能力方面,本次实验都让我得到了很大提升。

知识方面,本次实验需要编写符合要求的程序。

首先要进行程序的设计,明确实验目的和设计思路,画出程序框图,然后进行程序的编写。

通过程序的设计与编写,使我能够更加深入的了解和掌握80486了指令系统。

程序编写完成后,便需要进行调试,最初编写的程序中出现了很多错误,在编译过程中发现错误后,不断进行修正,直到程序正确,可以实现所需功能。

在这一过程中,我逐渐熟悉了汇编程序编辑、编译、连接、调试的过程,并能通过这些软件的功能找到自己的错误加以改正,最终实现实验目的。

能力方面,由于系统原因,不能直接在电脑当前系统中进行汇编程序的调试,因此我安装了虚拟机,在虚拟机安装过程中遇到很多问题,通过对搜索引擎的有效利用,我解决了安装过程中的问题并成功安装了XP系统,建立了实验所需环境,为实验的完成打下基础。

本次实验,提高了我分析问题和解决问题的能力,能够通过查阅资料获得所需信息,解决实验过程中所遇到的各种问题。

(二)实验感悟

本次实验对知识和能力的要求都比较高,开始完成实验室,遇到了很多阻碍,但通过资料的查找和优秀视频的参考,我逐渐找到问题的解决办法,最终实现了实现所需的功能,完成了这项任务。

在这一过程中,我更深刻地体会到,任何知识的学习和掌握都是时间和汗水的积累。

只有真正认真思考,坚定完成任务的信念,找到解决问题的办法,才能学会知识和技能。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1