1

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

常见问题 1 和 2。

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

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

一)1007

b) 1020

c) 1024

d) 1028

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

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

一)1007

b) 1004

c) 1005

d) 1016

4

4 回答 4

2

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

于 2015-06-20T12:57:26.310 回答
1

这取决于所问的问题,

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

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

于 2016-12-27T17:15:34.267 回答
0

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

于 2014-09-01T02:36:47.963 回答
0

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

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

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

So if the instruction is taking place, the CPU must either cancel the instruction and the address would be before it, or it would have to finish the instruction and and the address would be after it. Either way, you wouldn't know the exact timing and thus you don't know the adress.

A definite answer should be only possible if looking into the hardware reference manual of the given CPU.

于 2013-05-17T04:50:50.393 回答