实验1 用机器指令和汇编指令编程

四、实验结论

1. 教材实验1结论

  • 实验任务(1)
  1. 用e命令方式:

  2. 用a命令方式

  3. 结果

  4. 运行

  • 实验任务(2)
  1. 写入指令

  2. 调试开始

  3. 调试结果

  • 实验任务(3)
  1. 查找生产日期

    生产日期为:01/01/92

  2. 尝试改变生产日期为02/01/92

    可以看出没有改变

  3. 作出解释

    通过查看教材上的图可以清晰的看出生产日期所在的地址处于ROM地址空间中,因此不能改变

  • 实验任务(4)
  1. 尝试改变数据

  2. 改变的结果

  3. 作出解释
    在我的实际操作中,大部分没有修改,只有b8100H和b8104改变了值,但问题在于改变的结果不是我用e指令输入的那个值😂
    因此十分有理由相信这两个地方的值的变化压根和我通过e指令的操作无关
    仍由下图查出,b810:0000~b810:0007属于显存地址空间,因此可能无法通过e指令修改,或者可以修改但是马上又被其他的进程修改了(被改动是系统内部需要显示的内容发生变化了)

    (我看到有的人可以修改,还能显示出奇奇怪怪的东西,有点羡慕,但觉得有点奇怪,道理我懂,显存改变显卡输送到显示器,显示内容就改变了,但是他是如何保持的呢,我觉得应该刚被改变又被别的进程改了才对)

教材实验2结论

  • 实验任务(1)
  1. 使用 e 命令修改内存单元0022:0~0022:f 中的数据,及修改后查看是否正确写入的操作

    写入正确

  2. 使用 a 命令输入的 p74

  3. 每一行指令单步调试



  4. P74 中指令执行后各个寄存器填空结果。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。如不一致,分析原因。

    一致(虽然感觉答案是不一致的所以才有分析原因,但我这真的是一致的,难道因为看到答案然后思维带过去了?)

  • 实验任务(2)
  1. 图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分

  2. 单步调试每一行汇编指令。每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化,并思考原因。

  3. 前3行汇编指令的功能,特别是,mov sp, 10意味着什么?初始时栈顶和栈底分别是?

    • mov ax,2000:将ax寄存器赋值为2000H
    • mov ss,ax:堆栈段寄存器赋值为ax寄存器中的值
    • mov sp,10:堆栈指针寄存器赋值为10H
    • 初始时栈顶和栈底都为2000:10
  4. 基于单步调试观察到的变化,给出你对此的思考及可能原因分析。

    • 初始化栈阶段

      如图,仅仅为了确定堆栈位置的里两条指令却使内存单元的值发生了极大的改变,而且这种改变很奇怪
      经观察(其实是查的),原来其实一直都有一个栈,而且只能有一个,我的理解是这个栈可以移动但里面的内容不能丢,所以原本的栈里面的数据带过来了。
      里面的数据可以看出出处的有:
    • 元素入栈符合预期
      3123入栈

      3366入栈
posted @ 2020-10-13 18:17  Ranye123  阅读(80)  评论(3)    收藏  举报