汇编实验五 编写调试具有多个段的程序

Posted jiangkeyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编实验五 编写调试具有多个段的程序相关的知识,希望对你有一定的参考价值。

南京信息工程大学实验报告

实验名称   实验 5 编写、调试具有多个段的程序  

实验日期  12.2                

得分          

学院   计软院  

专业   计科 

年级   2017级   

班次    6班

姓名    江轲禹     

学号    20171308227      

一、实验目的

1. 理解和掌握将数据、代码、栈放入不同段的程序的编写和调试 2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式

 

二、实验准备

1. 结合第6章教材和课件,复习第6章内容 2. 复习第3章「栈」的知识

 

三、实验内容

教材133实验 5 ps: 1. 实验5相关提示见本文档最后一部分「附:实验5提示&说明」 2. 为提高实验效率,我已将实验 5 的程序框架准备好,可以从课程公邮→文件中心→ 实验文件夹,下载实验5程序框架。

 

四、实验结论

实验任务(1)~(4),直接在教材上填写实验后通过运行、调试观察到的结果,以及由此得 到的结论,以拍照或直接在博客中录入方式,给出填写的结论。对结论得出的过程及调试过 程的检查,采用随机抽点现场操作演示并回答的方式检查。

 

实验任务(1)

代码如下:

技术分享图片

在程序编译、连接完成之后,依次使用R命令,U命令,G命令,D命令进行调试

技术分享图片

①CPU执行程序,程序返回前,data段中的数据为:0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987

②CPU执行程序,程序返回前,cs= 076C,ss= 076B,ds= 076A 

③设程序加载后,code段的段地址为:X ,则data段的段地址为:X-2,stack段的段地址为:X-1 

 

实验任务(2)

代码如下:

技术分享图片

在程序编译、连接完成之后,依次使用R命令,U命令,G命令,D命令进行调试,

技术分享图片

①CPU执行程序,程序返回前,data段中的数据为:0123h,0456h

②CPU执行程序,程序返回前,cs= 076C,ss= 076B,ds= 076A 

③设程序加载后,code段的段地址为:X ,则data段的段地址为:X-2,stack段的段地址为:X-1 

④程序加载后,该段实际占有的空间为:((N+15)/16)*16 

对于第四小问,程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。以上两种情况总结成一个通用的公式:((N+15)/16)*16

 

实验任务(3)

代码如下:

技术分享图片

在程序编译、连接完成之后,依次使用R命令,U命令,G命令,D命令进行调试

技术分享图片

①CPU执行程序,程序返回前,data段中的数据为:0123h,0456h

②CPU执行程序,程序返回前,cs= 076A,ss= 076E,ds= 076D 

③程序加载后,code段的段地址为:X,则data段的段地址为:X+3 ,stack段的段地址为:X+4

实验任务(4)

如果将最后一条伪指令“end start”改为“end”,相当于没有指明程序入口,此时程序就会从加载进内存的第一个单元起开始执行。程序(1)(2)都是数据先加载进内存,CPU会误把数据也当成指令执行,因而不能被正确执行;而程序(3),则是代码段先被加载进内存,不存在把数据误当成指令,因而可以被正确执行。

 

实验任务(5),要求在博客中给出如下内容:

(1) 汇编程序源代码

(2) 在debug中调试程序截图,截图中包括如下信息:

① 在实现数据相加前,逻辑段c的8个字节

② 执行完实现加运算的代码后,逻辑段c的8个字节

(3) 根据①和②的调试,验证是否正确的实现数据相加。

代码如下:

技术分享图片

依次使用g命令,d命令,在执行后查看a、b、c段中的存储数据

技术分享图片

技术分享图片

查看c段中最终存储的数据

技术分享图片

此程序的功能是实现数据的相加,查看c段的最终数据,验证结果。

 

实验任务(6), 要求在博客中给出如下内容:

(1) 汇编程序源代码

(2) 在debug中调试程序截图,截图中包括如下信息:

① 在push操作执行前,查看逻辑段b的8个字单元信息截图

② 执行 push操作,然后再次查看逻辑段b的8个子单元信息截图

(3) 根据①和②的调试,验证是否正确的实现数据相加。

代码如下:

 技术分享图片

在程序编译、连接完成之后,依次使用R命令,U命令,G命令,D命令进行调试

 技术分享图片

 使用G命令,D命令,执行并查看a段,b段中存储的数据,以及b中最终存储的数据

 技术分享图片

由上图可知,前8个字型数据已经逆序存储到b中

 

五、总结与体会

1.一个段的大小是16个字节,因此程序加载后分配空间是以16个字节为单位的,也就是说如果不足16个字节的也分配16个字节。

2.在不指明数据的入口的情况下,若程序是先进行数据加载的,将不能被正确执行;若先进行段的加载,则不受影响。

 

以上是关于汇编实验五 编写调试具有多个段的程序的主要内容,如果未能解决你的问题,请参考以下文章

[汇编语言]实验五:编写,调试具有多个段的程序

汇编实验五

实验5 编写调试具有多个段的程序

实验5 编写调试具有多个段的程序

实验2 多个逻辑段的汇编源程序编写与调试

实验3 多个段的汇编源程序编写与调试