实验五
(1)
1.CPU执行程序,程序返回前,data段的数据为
23 01 56 04 89 07 BC 0A EF 0D ED 0F BA 0C 87 09
2.CPU执行程序,程序返回前,cs=0772h, ss=0771h,ds=0770h
3.设程序加载后,code段地址为X, 则data段地址为X-2h,stack段地址为X-1h
(2)
1.CPU执行程序,程序返回前,data段的数据为23 01 56 04
2.CPU执行程序,程序返回前,cs=0772h, ss=0771h,ds=0770h
3.设程序加载后,code段地址为x, 则data段地址为x-2h,stack段地址为x-1h
4.如果段中数据占N个字节,该段实际占有的空间为[(N+15)/16].([x]是取整函数)
(3)
1.CPU执行程序,程序返回前,data段的数据为23 01 56 04
2.CPU执行程序,程序返回前,cs=0770h, ss=0774h,ds=0773h
3.设程序加载后,code段地址为X, 则data段地址为X+3h,stack段地址为X+4h
(4)
第一和第二个程序不能运行,因为把end start 改为end,程序就不会从start开始执行了,所以IP的初值为0,所以会从第一个段开始执行。而只有第三个程序的机器码在前面,所以仅第三个仍然可以执行。
(5)
编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中
代码如下:
数据相加前,逻辑段c中的8个字节:
数据相加后,逻辑段c中的8歌字节:
(6)
编写代码,用push指令将a段中的前8个字型数据,逆序存储到b段中
代码如下:
push操作执行前,查看逻辑段b的前8个字单元
push操作执行后,查看逻辑段b的前8个字单元
总结与体会
实验3中我是用u命令查看代码段一共有34个字节,即22h个字节。可知即使它没有达到30h个字节,内存也会给它分配30h字节的空间。所以第二空是X+3。因为第二部分数据段有4个字节,可知即使它没有达到10h个字节,内存也会给它分配10h字节的空间。所以第三空是X+4。
所以我想在实验1,2,3中不运行程序是否可以判断出是X+1,X+2或是X+3,X+4。