首页 > 其他 > 详细

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

时间:2020-11-27 11:51:13      阅读:48      评论:0      收藏:0      [点我收藏+]

目录


 

  • 实验结论
  • 实验总结

一、实验结论


1. 实验任务1:使用8086汇编程序编写、汇编、链接、运行、调试方法,对task1.asm进行汇编、链接、运行,使用debug工具调试可执行文件。

1)编写task1.asm文件

技术分享图片

 

2)汇编、链接得到可执行文件,并执行

 

 

技术分享图片

 

 

3) 使用debug工具对程序进行调试

  使用r命令+u命令精准反汇编

技术分享图片

 

 

   使用d命令查看数据段

技术分享图片

4)修改task1.asm并运行

技术分享图片

 

 

   运行结果

技术分享图片

 

 

5)基于观察、分析,猜测这里的数值指示了显示字符的颜色

 

2.实验任务二:编写程序,在屏幕上以十进制整数形式打印输出5个两位数字(23, 50, 66, 71, 35)。

1)编写task2.asm

技术分享图片

 

 

2)task2.asm运行结果

技术分享图片

 

 

 

3.实验任务三:将task3.asm程序编译、连接,用debug加载、跟踪,然后回答问题

1)编写task3.asm

技术分享图片2)debug过程

技术分享图片

 

 

   运行到程序退出以前

技术分享图片3)回答问题:

  CPU执行程序,程序返回前,data段中的数据为:23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09

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

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

 

4.实验任务四:将task4.asm程序编译、连接,用debug加载、跟踪,然后回答问题

1)编写task4.asm

技术分享图片

 

 

2)debug过程

技术分享图片

  运行到程序退出以前

技术分享图片

 

 

3)回答问题:

  CPU执行程序,程序返回前,data段中的数据为:23 01 56 04

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

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

  对于如下定义的段:
    name segment
    ...
    name ends
  如果段中数据占N个字节,则程序加载之后,该段实际占有的空间为 ?N/16?*16 字节

 

5.实验任务五:将task5.asm程序编译、连接,用debug加载、跟踪,然后回答问题

1)编写task5.asm

技术分享图片

2)debug过程

技术分享图片

  运行到程序退出以前

技术分享图片

3)回答问题:

  CPU执行程序,程序返回前,data段中的数据为:23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09

  CPU执行程序,程序返回前,cs=076A, ss=0769, ds=075AA

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

  代码中data段和stack段位置的不同会影响这两个段的数据存储的相对位置。

    如果data段和stack段在code段前面,那么实际存储的过程中段地址stack=code-1,data=code-2;

    如果data段和stack段在code段后面,那么实际存储的过程中段地址stack=code+代码长度+1,data=code+代码长度+2;

 

6.实验任务六:如果将(1)、(2)、(3)题中的最后一条伪指令”end start“改为”end“也就是说不知名程序的入口),则哪个程序任然可以正确执行?请说明理由。

(3)题中的程序可以正确执行,因为end start是指定程序的入口,如果删掉start,那么机器会将代码一开始作为程序的入口,但是(1)(2)中代码开始定义的是data段和stack段,只有(3)
将code段放在了开头,所以能够正确执行。

 

7.实验任务七:编写程序使程序实现将a段和b段中的数据依次相加,并将结果保存在c段中。

1)编写task7.asm

技术分享图片

 

 2)debug调试验证结果

技术分享图片

 

 

8.实验任务八:编写程序使程序实现将a段中的前8个字型数据,逆序存储在b段中,要求使用push指令。

1)编写task8.asm

技术分享图片

2)debug调试验证结果

技术分享图片

 

 

二、实验总结


1. 操作系统为在程序运行之初,为程序开辟的内存空间分为两部分,第一部分是数据段,第二部分是程序段,debug中cx寄存器指示两者总和,可以通过减去mov ah,4c00h占用的两个字节进行精确的反汇编,即仅提取程序段。 

2. 数据段开辟的顺序与在代码中声明的顺序有关,先声明的先开辟,后声明的后开辟。

3. “end start”语句的作用是确定程序运行的入口,如果省略start会导致程序入口被机器确定在开头,这样会导致程序运行出错。

4. DOSBox可以将系统中指定目录映射到DOSBox中的D盘符,因此可以在DOSBox外使用文本编辑器直接编辑asm文件,而不必在DOSBox中使用命令行edit编辑文本内容。

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

原文:https://www.cnblogs.com/freedyool/p/14046455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!