2013-05-16 54 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指令起始地址,然後編譯器用退出點返回這個地址。