汇编语言(王爽)——第二次上机

本文详述了一次汇编语言实验的过程,包括理解栈的特性和汇编语言程序的编写、汇编、链接及调试。通过单步调试,分析了PUSH和POP操作对内存单元的影响,特别是CS和IP寄存器值的变化,揭示了CPU如何利用栈保存下一条指令的地址。实验还验证了DS寄存器在程序加载后与PSP的关系。
一、实验名称

用机器指令和汇编指令编程以及汇编源程序编写-汇编-连接-调试

二、实验目的
  1. 理解栈的特性
  2. 掌握汇编语言源程序编写→汇编→链接→调试的方法
三、实验过程
  1. 教材实验二
    实验任务(1)

    1. 先用e命令按照要求将0020:0~0020:7连续八个内存单元进行修改,并用d命令查看。
      图一
    2. 用t命令单步调试。
      图二
      图三
      图四
      图五
      图六
    3. 在单步调试过程中,当有push和pop操作时,用d命令查看栈顶元素的值(SS:SP指向栈顶元素),并填写实验之后的所显示的结果(图中有错误)。在使用栈的时候,应时刻关注SS:SP的值。
      图七
      PS(修改上图错误):
      • 由上面的图可知,对比在执行PUSH AX之前2200:00f0 L15内存单元中的值,在执行PUSH AX之后,修改的内存单元的地址是2200:00FE 、2200:00FF,内容为6040H。
      • 同样由上面的图可知,对比在执行PUSH BX之前2200:00f0 L15内存单元中的值,在执行PUSH BX之后,修改的内存单元的地址是2200:00FC 、2200:00FD,内容为E0C0H。
      • 对比在执行PUSH [4]之前2200:00f0 L15内存单元中的值,在执行PUSH [4]之后,修改的内存单元的地址是2200:00FE 、2200:00FF,内容为6050H。在执行PUSH [6]之后,修改的内存单元的地址是2200:00FC 、2200:00FD,内容为8070H。

    实验任务(2)

    1. 先将指令输入,然后用t命令单步调试,并且每一次调试后,用d命令查看2000:0~2000:f的内容。
      图八
      图九
      图十
      图十一
      由上述单步调试结果可发现,在进行push操作之前,内存单元2000:0~2000:f的值已经被改变了。仔细观察发现push操作之前,被改变的内存单元2000:0~2000:f的值有一部分是CS和IP寄存器的值。并且在后来的调试过程中,发现在内存单元2000:0~2000:f中都还有CS和IP两个寄存器的值。CS是代码段段寄存器,IP是指令指针寄存器,CS:IP指向了下一条即将执行的指令。
      因此,推断,内存单元2000:0~2000:f的值的改变是因为CPU自动将CS和IP的值入栈了,以便记住下一条指令执行的地址。
  2. 教材实验三

    1. 首先在Masm for windows 集成实验环境软件中输入源码,并保存运行。
      图十二
    2. 在生成目标文件,以及可执行文件后,用t命令进行单步调试
      图十三
    3. 第一张截图运行了如下三个指令,在执行POP AX指令之前,用d命令查看了对应内存单元的值,发现已经做了相应的改变。同时根据上一个实验任务,发现同样栈中同样存放着CS和IP的值。在这里,更加确认我在任务二中的推测。
      图十四
    4. 第二张图中,执行了POP AX的指令,发现ax寄存器的值变成了0000,栈中仍然存在着CS和IP的值。
      图十五
    5. 第三张截图中运行了PUSH BX以及POP AX的指令。
      图十六
    6. 第四张图中,执行了POP BX等三条指令。最后程序运行结束。
      图十七
    7. 课本第四章讲到,程序加载后,DS中存放着程序所在内存区的段地址,这个内存区的偏移地址是0,则程序所在的内存区的地址为DS:0。并且内存区的前256个字节中存放的是PSP,所以,从DS中可以得到PSP的段地址SA,PSP的偏移地址为0,则PSP的物理地址为SA*16+0。在截图中,我们发现DS为0760,所以PSP的头两个字节应该就是0760:0~0760:0内存单元中存放的值。
      图十八
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值