• ベストアンサー

アセンブラ大至急!!

「定数75と37を確保し、その和をGR1,その差をGR2に算出せよ」と言う問題なのですが、自分は    START     DC 75    DC 37    LAD GR1,75    LAD GR1,37,GR1    LAD GR2,-37,GR1    END としたところ、エラーでした。どこが誤っているのか、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

質問者さんの書き方でおかしいのは、命令語がどのようにして実行されるかを理解していないことです。このプログラムによれば、最初に実行される命令は「DC 75」です。これはCPUに対して、一体何を指示する命令語なのでしょう? CPU命令と、アセンブラ命令を明確に分けて考えましょう。 CPU命令は実際にCPUが解釈して演算や判断を行なうに耐える命令コードですが、質問者さんは「DC 75」を命令コードとして実行させようとしています。ここが根本的におかしい部分です。 AAA START←この行の次から命令語がはじまります。     命令語1     命令語2     命令語3     …     命令語n     EXIT←またはRETURN命令等を記述します。 BBB DC  データ1 CCC DC  データ2     … ZZZ DC  データn     END←ここでアセンブルが終了します。 という構造で記述しなくちゃいけません。 それから、「LAD GR1,75」の記述ですが、これは75番地にあるデータをレジスタGR1にセットする命令で、GR1に75を置数する命令ではありません。プログラミングでは、同じデータを重複して記述する無駄を省いてください。現状ではそうなってしまっています。 プログラミングを学習するときは教師の言うことをまじめに受け止め、決して自分勝手な判断をしないことです。上達するかしないかの分れ目は、ここにあると言っても間違いではありません。

その他の回答 (6)

回答No.7

再アドバイスです。 質問者さんは、出題文言の順を追うようにプログラムしているからいけないのです。 「気を利かせて」プログラム構造を考える。そのときに「これはアセンブラというソフトに指示する命令」「これはコンピュータに指示する命令」を区別するようにすれば、自然とプログラミング感覚を体得できると思います。 教師の教え方にも問題がある場合がありますから、わかるまで食い下がって質問しましょう。

delmostar
質問者

お礼

ありがとうございました☆私は,FORTRANしかしたことがなくて、これは、知り合いに今週までにやって、と、託されたものなんです。うちの学校の先生に質問したところ,勉強してないからわからない、とあっさり断られました。。。私自身、初めてなので一生懸命、独学でテキストを読んだり、いろいろなサイトへ行って調べてみましたが、質問をしても中傷されるばっかりで(._.)こんなに丁寧に教えていただけたのはとても嬉しく思います(^∇^)☆本当にありがとうございましたm(__)mまだ、いくつか課題があるようなので、全力を尽くして考えてわからなかったら、また質問に伺います^-^。では失礼します^-^☆いいテキストがあったら,教えてくださイ☆

回答No.6

No.5さんへ。 あっ、失礼しました! Load Addressをloadに読み違えていました。 そうですよね、質問者さんのプログラムは「DC 75」と「DC 37」の記述が無駄になっているのですね。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.5

No.3です。 > 「LAD GR1,75」の記述ですが、これは75番地にあるデータをレジスタGR1に >セットする命令で、GR1に75を置数する命令ではありません。 LADは以前のLEAの後継命令でGR1に75を入れます。75番地のデーターでは有りません。 問題なのは折角確保した定数を使わず、即値命令で処理していることです。 動くことは動くんですよ。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

色々おかしいです。 1.RETに付いてはNo.1さんの言われる通り 2.頭に定数を書くならこれをスキップしないといけません。  定数を実行しようとしてエラーになります。  例えば START A    ・・・・      A LAD GR1,75  とするか  RETとENDの間に定数を動かすか。 3.LAD GR1,75 では折角確保した定数を使っていません。  定数にラベルをつけて命令をLDに変えるべきです。 4.次の2行のLADも加算命令を使う必要があります。 とにかく大変更です。

回答No.2

基本情報に合格してから、全く触れていませんでしたからいろいろ見落としていました。 No1の修正に加え STARTの前にプログラム名を、DCの前にエリア名をそれぞれ入れてください。 例: KEISAN START KAZU1 DC 75 KAZU2 DC 35 ・・・・・ といった具合に それと少々おせっかいですが、上のように直した上で、全体を見直して見てください。

回答No.1

CASL IIでしょうか? でしたらおそらく ENDのすぐ上にRETを入れればエラーはなくなると思います。

関連するQ&A