• 締切済み

CASL(CASL2)でこんな問題があります。ぜひ教えてください。

・以下のプログラムを実行したときに,ANS0番地からANS6番地までの各番地に格納される値を16桁の2進数で答えよ。本プログラムのNUM番地からの7語には,それぞれ数値として格納されているものとする。 LAD GR1,O LOOP CPA GR1,LEN    JZE FIN LD GR2,NUM,GR1 LD GR0,CHAR,GR2 ST GR0,ANS0,GR1 LAD GR1,1,GR1 JUMP LOOP FIN RET NUM DC 1,3,5,6,4,2,0 LEN DC 7 CHAR DC'ABCDEFGHIJ' ANS0 DS1 ANS1 DS1 ANS2 DS1 ANS3 DS1 ANS4 DS1 ANS5 DS1 ANS6 DS1 END ・以下のプログラムを実行したときに,ANS番地に格納される値を,4桁の16進数で答えよ。本プログラムはNUM番地からの3語には,222が文字列として格納されているものにする。 START LAD GR0,0 LAD GR1,0 LOOP CPA GR1,CNT JZE NEXT LD GR2,NUM,GR1 AND GR2,COOOF ADDA GR0,GR2 LAD GR1,1,GR1 JUMP LOOP NEXT LD GR3,GR0 SLA GR3,7 ST GR3,WK1 SRA GR3,3 ST GR3,WK2 SRA GR3,1 ST GR3,WK3 SRA GR3,1 ST GR3,WK4 LD GR3,WK1 SUBA GR3,WK2 SUBA GR3,WK3 SUBA GR3,WK4 ST GR3,ANS RET NUM DC '222' CNT DC 3 C000F DC #000F WK1 DS 1 WK2 DS 1 WK3 DS 1 WK4 DS 1 ANS DS 1 END ・以下のプログラムを実行すると,ANS番地からの5語に,以下のような ビットパターンが格納される。 ANS+0番地 1000000000000000 ANS+1番地 0000000010000000 ANS+2番地 0000000000001000 ANS+3番地 0000000000000010 ANS+4番地 0000000000000001 このとき,(1)~(6)の空欄に適切な命令コードやオペランドを入れて, プログラムを完成させよ。 START   LAD  GRO,1   LAD  GR1,1 ((1)) GR2,LEN LOOP SUBA  GR2,=1   ((2)) FIN    ST  ((3))    SLL  ((4))       SLA  GR1,1    JUMP LOOP FIN  RET ANS  ((5))5 LEN  ((6))5    END ・20文字以内の文字列Sを入力し,Sの末尾にある文字※の個数だけ 文字#をSの先頭に追加し,かつSの末尾にある文字※を削除した文字列 Rを出力する。 入力する文字S CASLII※※※※ 出力する文字R ####CASLII こんな質問で非常にもし分けないのですが… 自分なりに色々考えましたが,どうもうまく行きません。 ご指導よろしくお願いします。 わかる範囲で構いませんのでロジックと解説をお願いします。

みんなの回答

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>なんとかここまでは内容を理解できましたが, >((4))の答えがどうしても解りません。 >おしえて下さい。お願いします。 まず、((3))が間違っています。 これでは同じ場所に代入してしまいます。 代入先は5箇所あるわけですから、可変にしなくてはいけません。 この問題はわざとややこしく(まぁ、情報技術者試験の問題はみんなそうですが)してあるので、格納順番は次の順で値を格納します。 ANS+4番地 0000000000000001 ANS+3番地 0000000000000010 ANS+2番地 0000000000001000 ANS+1番地 0000000010000000 ANS+0番地 1000000000000000 よ~く考えてみてください。 ((4))は、レジスタを2つ使用します。 ANS+4~ANS+0までの変化の法則性が見えてきませんか? ANSに関係するレジスタは何でしょうか? そういえば、問い1、2の問題の答えが分かったといってましたが、ちゃんと1命令づつトレースしてレジスタの変化は理解しましたか? ここでちゃんとやらないと理解が進みませんよ。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

そのものの答えを聞くのは、勉強法として間違っています。 自分で考えないと身につきません。特に、試験用の言語ですから応用力がものを言います。 なので、まず考え方のヒントだけ。 (3問目) 1行ごとに、やっている事を書き出してみましょう。 LAD  GRO,1なら、代入。GR0←1 ((1))初期値の設定をしています。 ((2))ループに関係する命令です。 ((3))何かを保存しています。 ((4))ここの問題の最大のポイント。 ((5))ANS番地からの5語とります。 ((6))値を置きます。     (4問目) まず、流れ図(フローチャート)書けますか?知らなければ、処理手順を書き出してみてください。処理手順とは、何も知らない人のために作業手順をマニュアル化する様な感じで書きます。3問目も同じようにしたほうが良いかもしれません。 どうしても分からない場合に以下の練習問題あたりからやり直したほうが良いでしょう。基礎力を身につけてください。 http://www016.upp.so-net.ne.jp/masuda2/casl2/index.html http://sci-tech.ksc.kwansei.ac.jp/~hayafuji/Sci-TechTop/2006/assembler/ass_lec02.html

nagagai
質問者

お礼

回答ありがとうございます。 問3ですが, TEST START LAD GR0,1 LAD GR1,1 LD GR2,LEN LOOP SUBA GR2,=1 JZE FIN ST GR0,ANS SLL (4) SLA GR1,1 JUMP LOOP FIN RET ANS DS 5 LEN DC 5 END なんとかここまでは内容を理解できましたが, ((4))の答えがどうしても解りません。 おしえて下さい。お願いします。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

とりあえず答えているヒマがないので、シミュレータを使って動かしてみるべし! http://www.vector.co.jp/vpack/filearea/win/prog/casl/

nagagai
質問者

お礼

回答ありがとうございました。問題の上から見て1問目,2問目のプログラムが書いてあるやつはシミュレータを使い解読できました。 本当に助かりました。ありがとうございます。 しかし3問目,4問目が解りません。。答えから逆算して内容を理解 したいので,どうか教えてください。