• 实验五


    一、实验内容

    (1)将下面的程序编译、连接,用debug加载、跟踪,然后回答问题。

    ①CPU执行程序,程序返回前,data段中的数据 不变

    ②CPU执行程序,程序返回前,CS= 076C ,SS= 0769 ,DS= 075A 

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

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

    ①CPU执行程序,程序返回前,data段中的数据 不变

    ②CPU执行程序,程序返回前,CS= 076C ,SS= 0769 ,DS= 075A 

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

    ④对于如下定义的段:

    name segment

    ……

    name ends

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

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

    ①CPU执行程序,程序返回前,data段中的数据 不变

    ②CPU执行程序,程序返回前,CS= 076A ,SS= 0769 ,DS= 075A 

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

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

            第三条程序仍然可以正确执行,如果不指明入口位置,则程序从所分配的空间开始执行,前2个是数据段,只有从第3条开始是指令代码。

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

     编译、连接后,用debug调试如下:

    用d命令查看得到数据相加前,逻辑段c的8个字节,如上图;

    执行完实现加运算的代码后,用d命令查看逻辑段c的8个字节,如上图;

    由此可得出结论,以上运算代码实现了数据相加。

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

    代码如下:

    用debug调试,在push操作执行前,逻辑段b的8个字单元如下:

    执行push操作后,再次查看逻辑段b的信息如下:

    所以,可以得出a段中的8个字型数据逆序存储到了b段中。

     二、总结与体会

            这次实验前四题都完成的比较顺利,但是五六两题写得还是比较吃力的,期间出现了很多错误,导致得不到正确答案,好在通过看书、查资料也完成了这次实验。

  • 相关阅读:
    C++报错undefined reference to vtable处理
    emplace_back无法支持<braceenclosed initializer list>吗?
    使用proxychains代理应用
    EasyExcel快速读写Excel数据
    解决SpringBoot跨域的三种方式
    SQL Server 锁(LOCK)大全
    MySQL预处理语句PREPARE、EXECUTE、DEALLOCATE使用大全
    C# 自定义泛型二维数组
    C# 一维数组与二维数组相互转换
    C#枚举高级应用
  • 原文地址:https://www.cnblogs.com/xinqimisa/p/10018071.html
Copyright © 2020-2023  润新知