【问题标题】:Machine instructions and memory address机器指令和内存地址
【发布时间】:2013-05-11 22:58:26
【问题描述】:

这其实是一道考试题,我有疑问,我需要知道正确答案和解释。

常见问题 1 和 2。

     INSTRUCTION                         INSTRUCTION SIZE (word)
    MOV R1 LOC1                            2
    MOV R2 #01                             1
    ADD R1 R2                              1
    MOV LOC2,R1                            2
    Halt                                   1

第一季度。考虑内存是字节可寻址的,大小为 32 位,并且程序已从内存位置 1000(十进制)开始加载。 CPU在执行完Halt指令后已经停止,栈中保存的返回地址为

a) 1007

b) 1020

c) 1024

d) 1028

// 我知道在执行任何指令期间,程序计数(PC 寄存器)都会递增。所以当执行暂停指令时,PC 值应该是 1028 但正确的答案是 c),我不确定。请帮助找到正确的答案。

第二季度。如果 CPU 是 32 位,字可寻址,程序从起始地址 1000 加载。如果在 ADD 指令期间发生中断,压入堆栈的返回地址是什么。

a) 1007

b) 1004

c) 1005

d) 1016

【问题讨论】:

  • 那么您提供了什么答案?你的理由是什么?
  • 对于 Q.1) 可能有两个答案,在暂停指令期间,如果 PC 值增加,则答案将为 d) 1028,如果 PC 值不增加,则答案将为 c) 1024。
  • (公平地说,他们没有很好地指定这台机器。有些机器在中断时让 PC 递增,而另一些在发生中断时备份它。)
  • in q.1) cpu 是字节可寻址的,程序的起始地址为 1000,即本程序 PC 寄存器的初始值。第一条 MOV 指令将在地址 1000 处填充,然后在指令执行期间 PC 值将递增到 1000+8=1008(指令为 2 个字长)。同样,当 PC 的值为 1016 时,将填充第三条 MOV 指令,在执行此指令之间,PC 值将递增到 1016+8=1024 ,在此地址处我们有下一条要填充的指令是停止指令。

标签: memory assembly cpu cpu-registers


【解决方案1】:

这取决于所问的问题,

  • 如果在 HALT 指令期间询问有问题,则 PC 值是下一条指令地址,因为 PC 值始终是下一条指令。 但是

  • 如果在执行 HALT 指令后询问问题,则 PC 值为 HALT 指令起始地址,因为在成功执行 HALT 指令后我们知道没有下一条指令,因此 PC 值用 HALT 指令起始地址覆盖,然后编译器返回这个地址和退出点。

【讨论】:

    【解决方案2】:

    Q1的正确答案应该是D。1028。1024,中断控制再次HALT后,将没有逃生路线。我不知道是否有任何处理器这样做。当然不是 x86 架构,如下所示: http://x86.renejeschke.de/html/file_module_x86_id_134.html

    【讨论】:

      【解决方案3】:

      HALT 指令是一个无条件分支指令,其目标地址与 HALT 指令本身相同。因此,当提取 HALT inst 时,PC 将更新为包含 1028,但在执行 HALT inst 期间,PC 将再次更新(因为 HALT 是无条件分支 inst)到 1024。当执行完成时,PC 的当前值即 1024被推入堆栈。 因此(C)是正确的选择。

      【讨论】:

        【解决方案4】:

        至于问题1,我想说不知道是哪个CPU就无法回答。

        对于第二季度,我会说没关系。 CPU 必须注意它保持一致的状态,因此每条指令都必须是原子的且不可中断。

        让我们假设 CPU 几乎完成了指令并且已经分配了值。如果中断发生并且地址在指令之前,它将被执行两次,这不应该发生,因为在这种情况下会导致错误的代码。

        因此,如果指令正在执行,CPU 必须要么取消指令,地址在它之前,要么它必须完成指令,地址在它之后。无论哪种方式,您都不知道确切的时间,因此您不知道地址。

        只有查看给定 CPU 的硬件参考手册才能得到明确的答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          • 2015-10-27
          • 1970-01-01
          • 1970-01-01
          • 2018-07-04
          • 2011-05-25
          相关资源
          最近更新 更多