0

10 未満の正の数を入力し、最初の数の合計を出力するプログラムを作成しようとしています。たとえば、5 は 5+4+3+2+1 になります。コマンドは、Stop、Load、Store、Add、Sum、Multiply、Divide、Input、Output、Branch、0 の場合は Branch、0 でない場合は Branch です。私はちょっと立ち往生しています。私が書いたものは次のとおりです。

      IN    n
      LD    n
      ADD   sum
      STO   sum
      LD    n
      SUB   one
      ADD   sum
      STO   sum
      BRGT  haw
      LD    n
      BR    done
haw:  OUT   sum
done: STOP
      DC    n   4
      DC    sum 0
      DC    one 1  

私が見た方法では、数値 n をロードし、合計 0 を追加してから、この合計を n+sum として保存します。次に、n を再度ロードして 1 を減算し、それを新しい合計として格納します。しかし、n が 0 になるまでこれを繰り返す必要があります。

わかりましたので、私がする必要があるのは、0 の場合はブランチを使用し、0 でない場合はブランチを使用することです。それで:

     IN    n
     LD    n
     ADD   sum
     STO   sum  
     BR    CAW
CAW: LD    n  
     SUB   ONE  
     STO   n
     BRGT  HAW
     BZ    TAW
HAW: ADD   SUM  
     STO   SUM  
     BR    CAW  
TAW: OUT   SUM
     DC    SUM 0
     DC    ONE 1

DC=指定定数ですが、nが0になるまで1を引いて足し算を繰り返す必要があります。何を繰り返す必要があるかはわかっていますが、アセンブリ言語でこれを行う方法がわかりません。

4

3 に答える 3

5

これは宿題のように聞こえるので、いくつかの曲から始めます。

  1. この問題のロジックはもう解決しましたか? 「行き詰まり」とは、これをどのように行う必要があるのか​​ わからないこと、または利用可能な指示でそれを実装する方法がわからないことを意味する可能性があります. ロジックを理解していない場合は、次のことを考慮してください。どのように用語を考え出し、どのようにそれらを足し合わせ、結果をどうするか?

  2. ロジックを理解したら、どのコマンドが各部分を実行するでしょうか?

より具体的な質問がある場合は、お気軽に更新してください。返信しますが、通常、SO のポリシーは、宿題の質問に対してコードを記述するだけでなく、ガイダンスを提供することです。

編集: わかりました。いくつかのコードがあり、正しい方向に進んでいるように見えますが、まだそこにはありません。最初にお聞きしたいのは、紙の上でコードを実行しようとしたかどうかです。任意の入力 (あなたの例のように 5 など) を選択し、一度に 1 命令ずつコードをステップ実行して、プログラムが実行するロジックがステップ 1 で思いついたロジックに従っているかどうかを確認します。書かれているとおりに機能しません。理由がわかるかどうかを確認してください。そうでない場合は、ヒントを差し上げます。

編集 2 : すばらしい、あなたはとても近いので、すでに答えがあり、それをコーディングする必要があります。n が 0 になるまで繰り返したいとおっしゃいましたが、n が 0 かそうでないかによって、2 つの分岐のいずれかを取ることができるコマンドはどれですか?

編集 3 : branch if 0 / branch not 0 を使用する必要があると仮定するのは正しいですが、最新のコードにはそれらのいずれも表示されません。私は何か見落としてますか?また、この場合の DC とは何ですか? キーを投稿すると役立つ場合がありますので、使用している手順を正確に把握できます。前に言ったように、プログラムを手動で実行してみてください。バグがどこにあるかがわかります。ここでのヒントは、繰り返し実行する必要があるコードの部分を特定し、実際に繰り返し実行されるかどうかを確認することです。

于 2010-01-08T03:50:56.860 に答える
2

まず、高レベルの疑似コードで問題を書き出してみてください。

次に、それをアセンブリ言語に翻訳します。

アセンブリ言語でのプログラミングに関するヘルプは、こちらで見つけることができます

http://www.laynetworks.com/assembly%20tutorials.htm

これは学校の課題のようなにおいがするので、それで十分だと思います。

于 2010-01-08T03:51:18.170 に答える
0

Cで考えてみてください(知っていると仮定して)

int sumnumbers(int input)
{
    int output = 0;

    input = max(input, 10);

    switch (input)
    {
        case 5:
            output += 5;
        case 4:
            output += 4;
        case 3:
            output += 3;
        case 2:
            output += 2;
        case 1:
            output += 1;
        case 0:
            output += 0;
            break;
    }

    return input;
}

break ステートメントがないことに注意してください (0 番目のケースを除く)。

これは役に立ちますか?

于 2010-01-10T20:51:19.787 に答える