1

次のコードがあります。

      ORG    100      
LOOP, Load   X
      Add    Z
      Store  X
      Load   Y
      Skipcond 400
      Jump   Q
      Subt   Z
      Store  Y
      Jump   LOOP
Q,    Output X
      Halt
X,    Dec    0
Y,    Dec    10
Z,    Dec    1

私がそれを正しく理解していれば、次の Python コードといくらか同等です。

x = 0
y = 10
z = 1
while True:
    x += z
    if y > 0:
        y -= 1
    else:
        exit(0)

だとすると、ループ処理の完了時に MARIE では X = 10 で、Python では X = 11 になる理由がわかりません。私が MARIE コードで理解していることから、skipcond 400 は y > 0 の場合と同等です。その場合、x = 10、y = 1 の場合でも、skipcond を渡して y から 1 を減算するため、ループして x に 1 を追加します。これは、ループが終了してデータが出力されるときに x = 11 を意味します。

これを理解する助けがあれば大歓迎です、ありがとう。

4

1 に答える 1

1

あなたSKIPCONDは「反転」しています。条件 400 は、 AC==0 の場合はスキップすることを意味します。したがって、このコード:

  Load   Y
  Skipcond 400
  Jump   Q

実際には次のことを行います。

IF (Y != 0) GOTO Q

これはあなたがやりたいことの反対のようです。おそらく必要なのはSKIPCOND 800(AC > 0の場合はスキップ)です。

于 2013-04-03T08:50:35.067 に答える