2013-05-16 43 views
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(十进制)开始加载。执行HALT指令之后CPU已经停止,保存到堆栈中的返回地址将是

一)1007

b)中1020

C)1024

d)1028

//我知道在任何指令执行期间,程序计数(PC寄存器)递增。所以当停止指令执行时,PC值应该是1028,但是正确的答案是c),我不确定。请帮助找到正确的答案。 Q2302。如果CPU是32位,可寻址字,则从起始地址1000开始载入程序。如果在ADD指令期间发生中断,则将返回地址推入堆栈。

一)1007

b)中1004

C)1005

d)1016

+0

那你有没有提供什么样的答案?你的推理是什么? –

+0

的问题1)两个可能的答案,暂停指令时,如果增加PC值,那么,答案将被D)1028如果PC值不增加,然后回答将是C)1024 – siddstuff

+0

(公平地说他们没有指定本机非常好。一些机器离开递增中断的PC,而发生中断时别人备份。)在问题1 –

回答

0

作为对问题1我woould说,它不能被应答而不知道哪个CPU它是。

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

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

因此,如果指令发生,CPU必须取消指令,并且地址将在它之前,或者它必须完成指令并且地址将在它之后。无论哪种方式,你都不知道确切的时间,因此你不知道地址。

仅当查看给定CPU的硬件参考手册时才应该有明确的答案。

0

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

0

它取决于有关什么问,

  • 如果有问题的HALT指令则PC值时问是因为PC值的下一条指令的地址总是下一个指令。 但

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