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

一、实验目的
  1. 理解和掌握将数据、代码、栈放入不同逻辑段的程序的编写和调试
  2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式
  3. 掌握大小写字符的转换方法、数字字符和数值之间的转换方法  
  4. 理解并掌握各种寻址方式的灵活应用
  5. 掌握汇编指令loop, and, or,div, mul的用法
 
二、实验准备
  复习教材chapter 6-8章。
  chapter 6 包含多个段的程序
  chapter 7 更灵活的定位内存地址的方法
  chapter 8 数据处理的两个基本问题
 
三、实验内容
1. 实验任务1
源代码

运行结果

调试运行

 

 

修改后的源代码

 

 运行结果

dataline4字节数据的用途是存放字母的颜色信息

 2. 实验任务2

源代码

调试结果

 

3. 实验任务3

源代码

 

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

 

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

 

 

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

4. 实验任务4

源代码

 

 data段中的数据为:0123h, 0456h

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

 

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

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:(N/16)*16    (N/16)向上取整。

5. 实验任务5

源代码

 

 data段中的数据为:0123h, 0456h

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

 

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

6. 实验任务6

只有实验任务五的代码可以正常执行。如果不指名程序的入口,实验任务三和四代码的前几行数据段将被当做代码来执行,

而实验任务五的代码把数据段和栈段的内容放在代码段的后面,所以不会影响程序的正常执行。

7. 实验任务7

源代码

 

 调试运行查看逻辑段c段的数据

 

 8. 实验任务8

源代码

调试查看栈段b中的数据

 

 三.实验总结

这次实验让我对数据段、栈段、代码段有了更多的了解。在没有end start即不指名程序入口的情况下

很容易因为位置问题导致数据段或者栈段当成代码段来执行。对数据段、栈段的段地址也能通过计算

得出。对于div也有了充分的体会,16位除8位商存在al中余数存在ah中。

 

 

 

 

 

 

 

posted @ 2020-11-24 22:47  无糖碳酸饮料  阅读(120)  评论(2编辑  收藏  举报