实验内容
实验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.课堂上所学还是要巩固。