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

目录


 

  • 实验结论
  • 实验总结

一、实验结论


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编辑文本内容。

posted on 2020-11-27 10:08  FreedYool  阅读(142)  评论(2)    收藏  举报