CASLIIの穴埋め問題について

このQ&Aのポイント
  • CASLIIの穴埋め問題について質問があります。
  • CASLIIの勉強をしているのですが、穴埋めの問題が解けません。
  • 参考書やサイトの例題と比較し、自分なりに考えても解答が間違っているため困っています。解答と解説を教えてください。
回答を見る
  • ベストアンサー

CASLIIの穴埋め問題について。

CASLIIの勉強をしているのですが穴埋めの問題がどうしても解けません。 参考書の例題やサイトで公開されてるサンプルなどと比較して考えて 自分なりに答えは出してみたのですがシュミレータを試してみた所間違ってました。 この問題を考え始めてからもう一週間になりますが 解答がないので未だに解けず時間ばかりが過ぎて困っています。 解答と解説を教えて頂けないでしょうか? 問題 図1のプログラムは、3種の文字「a」、「b」、「c」を組み合わせた、 長さが3の全ての文字列を、図2の順に出力する。 図1の(1)~(10)の空欄に適切なオペランドを入れてください。 図1 REP2 START LD (1) LAD GR1,0 LP1 CPA GR1,GR7 JZE (2) LD GR0,CHAR,GR1 ST (3) LAD GR2,0 LP2 CPA GR2,GR7 JZE (4) LD GR0,CHAR,GR2 ST (5) LAD GR3,0 LP3 CPA GR3,GR7 JZE (6) LD GR0,CHAR,GR3 ST (7) OUT (8) LAD GR3,1,GR3 JUMP LP3 BRK3 LAD GR2,1,GR2 JUMP LP2 BRK2 LAD GR1,1,GR1 JUMP LP1 BRK RET FIRST DS 1 SECOND DS 1 THIRD DS 1 CHAR DC (9) LEN DC (10) END 図2 aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc

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

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

*CASL2はかなり前に多少いじった程度で殆どマニュアルを読み直すはめになった *一応IPAが公開しているCASL2のシミュレータで期待通りの結果を得た。 *http://www.officedaytime.com/dcaslj/index.htmlだと出力行数が多いせいで最初の数行が切られる *GR7が離れて使われていたこともあって、GR4、GR5、GR6が隣接していると思い込んで、OUT命令に指定して嵌る。DS命令が「連続した領域」を確保するのか自信がなかったことも拍車を掛けた。動いたからいいや(おぃ。えーえー、私が悪いんですよぉorz REP2 START LD GR7,LEN LAD GR1,0 LP1 CPA GR1,GR7 JZE BRK LD GR0,CHAR,GR1 ST GR0,FIRST LAD GR2,0 LP2 CPA GR2,GR7 JZE BRK2 LD GR0,CHAR,GR2 ST GR0,SECOND LAD GR3,0 LP3 CPA GR3,GR7 JZE BRK3 LD GR0,CHAR,GR3 ST GR0,THIRD OUT FIRST,LEN LAD GR3,1,GR3 JUMP LP3 BRK3 LAD GR2,1,GR2 JUMP LP2 BRK2 LAD GR1,1,GR1 JUMP LP1 BRK RET FIRST DS 1 SECOND DS 1 THIRD DS 1 CHAR DC 'abc' LEN DC 3 END

cocazero
質問者

お礼

ありがとうございました。 自分なりに出した答えはJZE命令とOUT命令が間違ってたみたいです。

関連するQ&A

  • CASLII(以前の問題について)

    次のプログラムに、 指定された整数値配列の平均値(整数値)を調べるサブルーチンAVEを作成する、 という問題で、手も足もでないということで以前に質問させていただきました。 丁寧な回答をいただいたのですが、それとは別に、AVEを作ってみました。 ところが、どこかが間違っているらしく、うまく動きません。 それどころか、だらだらと長くなってしまい、自分自身でも途中からわからなくなってしまいました。。 このたどたどしいプログラムの修正と、解説をどなたか回答していただけませんでしょうか?? あと、上記のSUMがコールされたあとのGR0の役割、 SUM内おけるGR0、GR7の役割、 SUM内においてGR1、GR7をPUSH、POPする理由、 サブルーチンSUMの機能を教えてください。 お願いいたします!! 元からあるプログラム PGM START LAD GR1, DATA LD GR2, =10 CALL SUM ST GR0, RESULT RET DATA DC 1,9,3,7,5,10,2,8,4,6 RESULT DS 1 END SUM START PUSH 0, GR1 PUSH 0, GR7 LD GR0, =0 LD GR7, =0 MAIN CPA GR7, GR2 JZE QUIT ADDA GR0, 0, GR1 LAD GR1, 1, GR1 LAD GR7, 1, GR7 JUMP MAIN QUIT POP GR7 POP GR1 RET END 自分が作成したAVEのプログラム PGM START LAD GR1,DATA LD GR2,=10 LD GR0,=100 LD GR6,=6 LD GR5,GR6 CALL AVE ST GR0,RESULT RET DATA DC 1,9,3,7,5,10,2,8,4,6 RESULT DS 1 END SUM START PUSH 0,GR1 PUSH 0,GR7 LD GR0,=0 LD GR7,=0 MAIN CPA GR7,GR2 JZE QUIT ADDA GR0,0,GR1 LAD GR1,1,GR1 LAD GR7,7,GR7 LAD GR6,6,GR6 JUMP MAIN QUIT POP GR7 POP GR1 CALL AVE RET END AVE START PUSH 0,GR6 LD GR3,=0 CPA GR0,GR6 JMI AQUIT SHIFT CPA GR0,GR6 JMI STEP SLA GR6,1 JUMP SHIFT STEP SRA GR6,1 STEP1 CPA GR0,GR6 JMI STEP2 SLA GR3,1 SUBA GR0,GR6 ADDA GR3,=1 JUMP STEP3 STEP2 SLA GR3,1 STEP3 SRA GR6,1 CPA GR6,GR5 JMI AQUIT CPA GR0,=0 JZE AQUIT JUMP STEP1 AQUIT POP GR6 RET END

  • CASLIIのFINについて教えて下さい

    CASLIIの『FIN』とはどんなときに使うのか、どんな意味があるのか教えて下さい。下の2個の例のように、JUMPでFINに飛んだり、単なるラベルであったりしています。 ;100を初めて超える7の倍数 LAD GR1,0 LOOP CPA GR1,C1000 JPL FIN LAD GR1,7,GR1 JUMP LOOP FIN ST GR1,ANS RET C100 DC 100 ANS DS 1 END ;1000を16ビットの2進数で表した時1が立っている数 LAD GR1,0 LAD GR2,1 LOOP LD GR3,C1000 AND GR3,GR2 JZE ZEXT LAD GR1,1,GR1 NEXT SLL GR2,1 JNZ LOOP FIN ST GR1,ANS RET C1000 DC 1000 ANS DS 1 END

  • CASLの問題なんですが…。

    このプログラム、動きはするのに終了してくれません。どうすれば良いでしょうか。 電話番号テーブル(名前18文字、電話番号12文字を対にして格納。全て半角)から指定された名前を検索し、名前と電話番号を表示するプログラムです。 SEARCH START BEGIN LD GR0,SPACE LAD GR1,0 LOOP1 ST GR0,INBUF,GR1 LAD GR1,1,GR1 CPA GR1,C18 JNZ LOOP1 INPUT IN INBUF,LENG LAD GR0,47 CPL GR0,INBUF JZE FIN LAD GR0,0 ST GR0,FLAG LAD GR2,TABLE LOOP2 ST GR2,POINT LAD GR0,47 CPL GR0,0,GR2 JZE LAST LAD GR1,0 LOOP3 LAD GR0,42 CPL GR0,INBUF,GR1 JZE FOUND LD GR0,INBUF,GR1 CPL GR0,0,GR2 JNZ TNXT LAD GR1,1,GR1 LAD GR2,1,GR2 CPA GR1,C18 JNZ LOOP3 FOUND LAD GR0,1 ST GR0,FLAG CALL DIS TNXT LD GR2,POINT LAD GR2,30,GR2 JUMP LOOP2 LAST LAD GR0,1 CPA GR0,FLAG JZE BEGIN OUT NFIND,C10 JUMP BEGIN FIN RET DIS LAD GR3,0 LD GR0,POINT LOOP4 LD GR0,0,GR1 ST GR0,OBUF,GR3 LAD GR3,1,GR3 CPA GR3,C30 JZE EXIT1 LAD GR1,1,GR1 JUMP LOOP4 EXIT1 OUT OBUF,C30 RET POINT DS 1 TABLE DC 'ヤマダ タロウ 0123-456-789' DC '/' INBUF DS 80 LENG DS 1 OBUF DS 80 SPACE DC #0020 C10 DC 10 C18 DC 18 C30 DC 30 NFIND DC '該当者なし' FLAG DS 1 END

  • CASLII

    CASLII勉強中です。 ビットマップ図形の縮小の例題を解いているのですが、 07~09行目で第15ビット目が1であるか調べという意味がわかりません。 07.08.09行目の意味を教えてください。 07行目は何をしているのでしょうか?08.09行目は1行ではなく、なぜ 1ビットの判定となるのでしょうか? 01 ZUKEI01 START 02      LD   GR1,=0 03      LD   GR3,=0 04 LP1   LD   GR2,=0 05      LD   GR4,BIGZU,GR1 06      LD   GR5,=8 07 LP2   LD   GR4,GR4 08      JPL   SKIP 09      JZE   SKIP 10      LAD   GR2,1,GR2 11 SKIP   SLL   GR2,1 12      SLL   GR4,2 13      SUBA   GR5,=1 14      JPL   LP2 15      SLL   GR2,7 16      ST    GR2,SMLZU,GR3 17      LAD   GR3,1,GR3 18      LAD   GR1,2,GR1 19      CPA   GR1,N16 20      JNZ   LP1 21      RET 22 N16    DC   16 23 BIGZU   DC   #F00F,#F00F 24       DC   #781E,#781E 25       DC   #3C3C,#3C3C 26       DC   #1E78,#1E78 27       DC   #0FF0,#0FF0 28       DC   #0FF0,#0FF0 29       DC   #07FF,#03FF 30       DC   #01FF,#00FF 31 SMLZU   DS    8 32       END 33

  • CASLIIの問題で、わからないものがあるので解き方と回答を教えていた

    CASLIIの問題で、わからないものがあるので解き方と回答を教えていただきたいです。 入力された整数を辺の長さ(文字数)とする正方形を、文字*で出力する。 例) **** * * * * **** ↑辺の長さが4のときの正方形です。 REP3 START IN REC,LEN LD GR1,REC (a) GR1,MSK ST (b) LAD GR1,-1,GR1 ST GR1,POS OUT LN1,LEN LOOP LAD (c) CPA GR1,=0 (d) FIN CPA GR1,=1 JMI SKIP LD GR0,LN2 LD GR2,POS ST (e) OUT LN2,LEN JUMP LOOP SKIP OUT LN1,LEN FIN RET REC DS 256 LEN DS 1 POS DS 1 MSK DC #000F LN1 DC (f) LN2 DC '* ' END (a)~(f)が答えの入る場所です。 答だけでもいいので、ご教示願います。

  • CASLIIの解説

    以下のような問題があり、解答がありますが理解できません。 すみませんが、どなたか解説をお願いします。 ---------------------------------------------------------- ■問題  10進数の「5×20」の結果を求め、その結果をメモリに格納するプログラムを作成せよ。ただし、「5×20」の数を他の数に置き換えた時も掛け算が行えるプログラムにすること。 ■解答  SAMPLE START LAD GR1,0 LAD GR2,1 LD GR3,=5 LOOP LD GR4,C20 AND GR4,GR2 JZE NEXT ADDA GR1,GR3 NEXT SLA GR3,1 SLL GR2,1 JNZ LOOP ST GR1,ANS RET C20 DC 20 ANS DS 1 END

  • CASLIIの問題

    次のプログラムに、 指定された整数値配列の中から最大値を調べるサブルーチンMAXを作成する、 指定された整数値配列の中から最小値を調べるサブルーチンMAXを作成する、 指定された整数値配列を昇順にソートするサブルーチンSORTを作成する、 指定された整数値配列の平均値(整数値)を調べるサブルーチンAVEを作成する、 これらについて教えてください。 PGM START LAD GR1, DATA LD GR2, =10 CALL SUM ST GR0, RESULT RET DATA DC 1,9,3,7,5,10,2,8,4,6 RESULT DS 1 END SUM START PUSH 0, GR1 PUSH 0, GR7 LD GR0, =0 LD GR7, =0 MAIN CPA GR7, GR2 JZE QUIT ADDA GR0, 0, GR1 LAD GR1, 1, GR1 LAD GR7, 1, GR7 JUMP MAIN QUIT POP GR7 POP GR1 RET END GR1はデータの先頭番地、SUMをコールするとGR1が1ずつ加算されてデータが参照できる。 GR2はデータの個数、ラベルMAINで個数を比較している。 などのことはわかるのですが、 プログラムを作るとなるとまったくわかりません。 どなたか教えていただけませんか?? お願いします!!

  • CASLIIで…

    START IN N,LEN LD GR0,N SUBA GR0,='0' LAD GR1,1 TOP CPA GR1,GR0 JPL FIN ST GR1,LEN OUT STR,LEN ADDA GR1,=1 JUMP TOP FIN RET LEN DS 1 STR DC '**********' N DS 256 END ってのがありまして、Nが9以下の時は三角形が * ** *** : : ******** ********* と表示されるのですが、Nに10以上を入力すると 正しく表示されません 10以上でも表示されるようにするにはどうしたらいいですか?

  • 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 こんな質問で非常にもし分けないのですが… 自分なりに色々考えましたが,どうもうまく行きません。 ご指導よろしくお願いします。 わかる範囲で構いませんのでロジックと解説をお願いします。

  • CASLIIで質問です

    32 ビット符号なし 2 進整数と 15 ビット符号なし 2 進整数の乗算を行う副プログラム MULT32の一部です。 質問したいのは、↓のプログラムの中に出てくる「LD GR6,GR1」 という命令です。解説を見てみると意味は乗数をGR6に設定し、GR1は作業用に設定と書いてありました。 しかし、GR1はこのプログラム全体を見ても初登場ですし、GR6にはどのような内容を格納しているのかわかりません。また、なぜ初登場の領域に対して解放という言葉を使っているのでしょうか。 MULT32 START RPUSH LD GR5,0,GR2 ST GR5,H LD GR5,1,GR2 ST GR5,L LD GR5,=0 ST GR5,0,GR2 ST GR5,1,GR2 LAD GR3,15 LAD GR4,1 LD GR6,GR1     ←ここです。 LP LAD GR3,-1,GR3 LAD GR4,1,GR4 SLL GR6,1 JZE FIN