2016-05-05 3 views
0

私はMALの拡張を作成する必要があります。 だから、最初のiはmic1sim.malIJVMでIUSHR4を作成する方法は?

MAR = SP = SP + 1; rd    // read top of the stack 
H = TOS       // H will be a SP 
MDR = H = H >> 1; wr    // SHIFT 1 and write on MDR 
MDR = H = H >> 1; wr     // SHIFT 1 + 1 = 2 
MDR = H = H >> 1; wr    // SHIFT 1 + 1 + 1 = 3 
MDR = H = H >> 1: wr    // 4th shift 
TOS = MDR; goto Main1    // TOS updated 

に追加しようとした。しかし動作しません!誰かが私がどこで間違っているか説明できますか?

答えて

0

SPはスタックの先頭を指します。 SP + 1はもはやスタックにないデータを指し示します。この値を読み取ると、ゴミが返されます。 3つ目の命令のMDRに2つの異なる値が書き込まれる条件があります。ALU演算の結果と、最初の命令の読み込みからのデータです。

各シフト後に書き込む必要はありません。結果をHで計算します。完了したら、Hの値をMDRに格納し、その値をスタックに書き込みます。

TOSには、命令の開始時にすでにスタックの先頭に値があります。それを読む必要はありません。

関連する問題