1
int X = 0;
int Y = 1;
while(X <= 10 ){
    if(X%2 == 0)
        Y = Y * X;
    else 
        Y++;

    X++;
}
cout << "Y is: " << Y;

これは、私の Easy68k コード用のものです。

ORG    $1000
START:                  ; first instruction of program

MOVE.W  #0,D1           ;PUT 0 IN D1 (X)
MOVE.W  #1,D2           ;PUT 1 IN D2 (Y)

LOOP CLR.W   D3        ;Find the remainder
     MOVE.W  D1,D3
     DIVU    #2,D3
     SWAP    D3

     CMP     #0,D3      ;Compare remainder with 0
     BEQ     EQUAL      ;If equal, then go to equal

     ADD.W   #1,D2      ;Y++
     ADD.W   #1,D1      ;X++

     CMP     #11,D1     ;Compare D1 with 11
     BEQ     DONE       ;If D1 equals 11, break loop.      
     BRA     LOOP


EQUAL MULU.W  D1,D2     ;Multiply D1 and D2 and store it in D2
      ADD.W   #1,D1     ;X++
      CMP     #11,D1    ;Compare D1 with 11
      BEQ     DONE      ;If D1 equals 11, break loop. 
      BRA     LOOP


DONE LEA MESSAGE,A1
     MOVE.W #14,D0
     TRAP #15

     MOVE.W  D2,D1

     MOVE.W #3,D0
     TRAP #15


    SIMHALT             ; halt simulator

MESSAGE DC.W    'Y is: ',0


    END    START        ; last line of source

私のコードのどこが間違っているのか正確にはわかりませんが、ループ セクションの最初に問題があると感じています。私はコードに従っていますが、どこが間違っているのかまだわかりません。実行すると、Y is: 10 が出力されます。D1 と D2 も両方とも A または 10 です。

4

3 に答える 3

1

除算とスワップを行った後でも、除算の結果と残りの両方が にありd3ます。これは、ゼロになることはなく、比較は常に false であることを意味します。上部をゼロにするか、下部のみをand使用する form.ofを使用する必要があります。cmp

注意: 2 の累乗の剰余を計算する場合は、除算をスキップandして、値から 1 を引いた値を直接使用することもできます。andこの場合、2 で割った余りは値 1 の場合と同じです。

于 2016-04-05T05:11:36.913 に答える