• 締切済み

CASL2の問題について

困っています。次の副プログラム、 ASUM  XOR GR1,GR1 ALO LD GR7,GR0,0 JNZ AL1 RET AL1 ADDA GR1,GR7 ADDA GR0,=0 JUMP ALO 上の副プログラムを呼び出す主プログラムの例を書け。ただし、この副プログラムの実行結果は主記憶格納すること。 という問題なんですが主プログラムに何を書いたらいいかわかりません。誰か教えてください。

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.4

この副プログラムに誤りがある,と書いてあるのに,それが何をするものなのか説明がない,なんて本当なのでしょうか。何をするものなのか正しい説明があるからそれに合わない箇所を誤りとして指摘できるのであって,何をするのか不明なのであれば「全面的に誤りだと思われるので,全面的にコードを改造しました」で通ってしまうじゃないですか。 とりあえず。提示された元のコードに近い修正例としてはこんなものが挙げられるでしょうか。 ASUM XOR GR1,GR1  #GR1のゼロクリア ALO LD GR7,0,GR2 #GR2番地の内容をGR7へロード    JNZ AL1    #ロードした内容がゼロでなければラベルAL1へ    RET      #        ゼロであれば主プログラムへ AL1 ADDA GR1,GR7  #GR7の内容をGR1へ加算    ADDL GR2,=1  #番地を指すGR2を1つ加算    JUMP ALO    #ラベルALOへ無条件ジャンプ 「LD GR7,0,GR0」と「ADDA GR0,=0」を間違いのある行として,次の3点を修正しました。 ・GR0は指標レジスタとして使えない ・番地の加算はADDAではない ・番地を加算していない

sigekikkus
質問者

お礼

回答ありがとうございます。でも問題文にはこの副プログラムが何をするものなのかが書いていないんです。ただ、この副プログラムには誤りがあり、このままではCASL2のプログラムとして動作しないということと、この副プログラムを呼び出す主プログラムの例を書け、としか書かれていません。。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

LD GR7,GR0,0 はCASLIIの文法として間違っています。 ADDA GR0,=0 して JUMP ALO というのも無意味なコードです。 この副プログラムが何をするものなのか分からない,ということですので, 提示されたコード自体の間違いに気づけないのもまあ当然なのでしょうが。

sigekikkus
質問者

お礼

回答ありがとうございます。はじめこの問題はLD GR7,0,GR0となっていましたが、問題でこの副プログラムに誤りがあると書いていたので、 LD GR7,GR0,0としてしまいました。しかしそのように変更するとAssemble Errorが消えたのでいいと思ってしまいました。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

簡単にあきらめないでください。副プログラムのどこの部分が理解できていないのでしょうか。 「JNZ AL1」が条件分岐命令であることは分かりますか? どんな場合にその次のRET命令に進み、どんな場合にAL1へ分岐するのかを確認してください。 ところで、「ADDA GR0,=0」の行ってこれで合ってますか?

sigekikkus
質問者

お礼

JNZ AL1が条件分岐であることはわかります。ADDA GR0,=0はあっていると思ったんですが自信はありません。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

この副プログラムが何をするものなのか、副プログラムへの入力として何が必要なのか、副プログラムの結果はどこに保持されているか、分かりますか? これらが説明できれば、主プログラム側で何をしなければいけないかも自ずと分かるはずです。

sigekikkus
質問者

お礼

回答ありがとうございます。でもこの副プログラムが何をするものなのかわかりません。