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

实验内容

实验1:

实验代码

对其进行编译,连接后,运行结果如下图

实验问题:

1)CPU执行程序,程序返回前,data段中的数据为多少?

       23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09

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

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

实验2:

实验代码

与实验一的操作一样,最后运行为

实验问题:

1)CPU执行程序,程序返回前,data段中的数据为多少?

       23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00

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

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

  (4)  对于如下定义的段:

         name segment

         ......

        name ends

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

 

实验3:

实验代码

结果为

1)CPU执行程序,程序返回前,data段中的数据为多少?

       23 01 56 04 00 00 00 00 00 00 00 00 00 00 00 00

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

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

实验4:

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

上图分别是实验1,实验2,实验3的结果,很明显的看出只有实验3的结果是和修改代码之前的结果一致。

题目说将伪代码修改后,就是不指明程序入口,即从IP=0运行,而实验1;2和实验3 的差别在于代码段的位置不同,实验1;2在前面,而实验3的则在后面。正是实验三的stack 在code后面IP为0所以不影响运行。

实验5:

实验代码

程序相加前为 01 02 03 04 05 06 07 08

相加后为02 04 06 08 0A 0C 0E 

 

实验6:

实验代码

 

 很清楚的看到通过栈的先进后出存储使b中的数据逆序存储了。

实验总结

 1.编译和连接的操作日益熟练,每个程序必不可少,但是在这次实验不是重点,所以说我并没有截图。

 2.操作要细心,每次实验在输代码时候总会因为一些小错误耽误很多时间。这不应该。

 3.课堂上所学还是要巩固。

 

posted @ 2018-11-25 19:40  单身狗吃全鱼宴  阅读(163)  评论(0编辑  收藏  举报