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

题目:将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

实验(1)截图如下:

自己调试如下:

结论:

①通过观察0770:0000结果可以发现,data段的数据在执行程序后,程序返回前并未改变。

②CPU执行程序,程序返回前,cs= 0772h 、ss=  0771h  、ds= 0770 h

③code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1。

实验(2)截图如下:

①与(1)的结果一样,data段的数据在执行程序后,程序返回前仍未改变,仍是原始数据。

②CPU执行程序,程序返回前,cs= 0772h 、ss=  0771h  、ds= 0770 h

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

④对于如下定义的段:

name  segment

.........

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为  (N/16+1)*16 

实验(3)调试截图如下:

①可以发现,data段的数据在执行程序后,程序返回前并未改变,仍是原始数据。

②从图中可以看出,CPU执行程序,程序返回前,cs=0770h、ss= 0774h、ds=0773h。

③进一步可以发现,若code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4。

实验(4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说,不指明程序的入口),则哪个程序仍然可以正确执行?说出原因。

答:(1)(2)改变前后SS发生变化,都是数据先加载进内存,所以不能正确运行。(3)是代码段先被加载进内存,所以能够运行且执行正确。

实验(5)程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存放到c段中。

实验(6)程序如下,编写code段中的代码,用push指令将a段中的前8个字符型数据,逆序存储到b段中。

添加程序:

mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,16
mov bx,0
mov cx,8
s:push ds:[bx]
  inc bx
  loop s
  mov ax,4c00h
  int 21h

如图可见正确

posted @ 2018-11-27 18:39  星空下的杰恋  阅读(282)  评论(3编辑  收藏  举报