CASLIIの解説

このQ&Aのポイント
  • CASLIIとは、コンピュータのプログラミング言語の一つです。
  • このプログラムは、10進数の「5×20」の結果を求め、その結果をメモリに格納するものです。
  • さまざまな数に置き換えても掛け算が行えるプログラムとなっています。
回答を見る
  • ベストアンサー

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

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

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

次のように行番号をつけてみました。 1:   LAD GR1,0 2:   LAD GR2,1 3:   LD GR3,=5 4:LOOP LD GR4,C20 5:   AND GR4,GR2 6:   JZE NEXT 7:   ADDA GR1,GR3 8:NEXT SLA GR3,1 9:   SLL GR2,1 10:   JNZ LOOP 11:   ST GR1,ANS CASLのレジスタは16bit長ですが,桁数が長くてめんどうなので8bit幅として解説します。 a)2行・9行より,GR2はループのたび次のように変化する。 00000001 → 00000010 → 00000100 → …… つまり,ビット1が最下位(右端)から左へと1bitずつ移動していく。 b)4行・5行より,GR4には(20)10 = (00010100)2 がセットされ,前述のGR2とのANDがとられる。つまり,GR4内のビット列を右端から左へと1bitずつ調べて,その位置が1か0か判定している。 c)3行・8行より,GR3はループのたび次のように2倍される。 (5)10 → (10)10 → (20)10 → …… d)よって7行目で解答格納領域(GR1)に加算される値は次のとおり。 1回目:GR4=0001010零 なので 5は加算しない 2回目:GR4=000101零0 なので 10は加算しない 3回目:GR4=00010壱00 なので GR1に(20)加算 4回目:GR4=0001零100 なので 40は加算しない 5回目:GR4=000壱0100 なので GR1に(80)加算 6回目:GR4=00零10100 なので 160は加算しない 7回目:GR4=0零010100 なので 320は加算しない 8回目:GR4=零0010100 なので 640は加算しない 11行目でANSに格納される値は(20)+(80)=(100)です。

goochan_1975
質問者

お礼

ありがとうございます。 とてもわかりやすかったです(泣

関連するQ&A

  • 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の問題が分かりません。

    資格の勉強のためCASLIIを勉強しているのですが、問題がわからなく質問します。 ●10進数1000を16ビットの2進数で表現した時、その値の中に1が何個含まれているかを求め、その結果をメモリに格納するプログラムを作成せよ。 SAMPL  START ; 1が立っている数 LAD GR1,0 LAD GR2,1 LOOP LD GR3,C1000 AND GR3,GR2 ;1が立っているか調べる JZE NEXT ;1が立っていない場合ジャンプ LAD GR1,1,GR1 ;1を加算 NEXT SLL GR2,1 ;1ビットを左にずらす JNZ LOOP ;繰り返し ST GR1,ANS RET C1000 DC 1000 ANS DS 1 END このプログラムでAND GR3,GR2 の部分からよくわからなく、コメントの「1が立っているか調べる」とありますが、1が立っているとはどういう意味なんでしょうか?それ以降から理解できなく、解説をお願いします。

  • CASLIIの問題が分かりません。

    資格の勉強のためCASLIIの参考書を買い問題を解いてるのですが分からないので質問します。 4桁の16進文字列を入力し、それを数値に変換してメモリ上に格納するプログラム。 SAMPL16 START LD GR1,0BUF LD GR0,=1000 CALL REVESUB OUT OBUF,LEN LET OBUF DS 4 LEN DC 1 ANS DS 1 END REVESUB START PUSH 0,GR1 PUSH 0,GR2 PUSH 0,GR3 PUSH 0,GR4 LAD GR0,0 LAD GR2,0 LOOP SLL GR0,4 ;ここまでの結果を4ビット左シフト LD GR3,0,GR1 ;1文字取り出し CPL GR3,='A' JMI NEXT ADDL GR3,=9 NEXT AND GR3,C000F ADDL GR0,GR3 LAD GR1,1,GR1 LAD GR2,1,GR2 CPL GR2,=4 JMI LOOP POP GR4 POP GR3 POP GR2 POP GR1 RET C000F DC #000F END SLL GR0,4 で4ビットシフトする意味がわかりません。あとLD GR3,0,GR1で1文字だけ取り出せるのですか?取り出すのは下位からですか?

  • CASLIIについて

    行 ラベル 命令 オペランド 01     LD  GRO、=0 02     LD  GR1、=10 03 L1  SUBA   GR1、=1 04     JMI   OWARI O5     LD   GR2、DATA、GR1 06 L2   JZE   L1 O7     JPL   L3 08     ADDA  GRO、=1           09 L3   SLL   GR2、1           10     JUMP  L2 11 OWARI  ST   GRO、ANS 12     RET 13 DATA  DC      ‘TOKYOOSAKA‘ 14 ANS  DS    1    15     END この文で、5行のLD GR2 DATA GR1に14行目を入れるとGR2は、‘A‘が入ると思うのですが、次の70と80行目のやり方がわかりません。またGROは、最終的に何を求めているのですか?あと、9行目は、なにをしているか、教えてください。お願いします             

  • 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(以前の問題について)

    次のプログラムに、 指定された整数値配列の平均値(整数値)を調べるサブルーチン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

  • 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☆台形の面積 (急!!)

    上底12、下底9、高さ8の台形の面積を求めて答えを表示させる問題です。     START     LAD   GR1,0     LAD   GR2,0 NEXT  ADDA  GR2,M     LAD   GR1,1,GR1     CPA   GR1,N     JNZ   NEXT     SRA   GR2,1     ST   GR2,ANS     RET M   DC  21 N   DC   8 ANS  DS   1    END と考えました。 修正した方がいいと思われる点を教えてくださいm(__)m 答えが入る場所が、変な気がします。(・・;)

  • アセンブラ言語

    平成17年度 春期 基本情報技術者の問題について質問ですが http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H17a2/pm13.html 以下のようにエラーが出てどこがいけないのか分かりません。 どこがいけないのか教えてくれませんか? 0000 NREAD START 0002 RPUSH 0004 IN INBUF,LENG 0006 1020 0151 LD GR2,LENG 0008 6300 0288 JZE ERR 000A 6100 0288 JMI ERR 000C 1210 0051 LAD GR1,INBUF 000E 2621 ADDL GR2,GR1 000F 1230 0000 LAD GR3,0 0011 1250 0001 LAD GR5,1 0013 1260 0000 LAD GR6,0 0015 0000 0000 LOOP CPL GR1,GR2 ラベルの重複 0016 6300 0043 JZE CNV 0018 1041 0000 LD GR4,0,GR1 001A 4140 0296 CPL GR4,=' ' 001C 6300 003B JZE NEXT 001E 1433 LD GR3,GR3 001F 6200 002D JNZ NUMCHK 0021 1230 0001 LAD GR3,1 0023 4140 0297 CPL GR4,='-' 0025 6200 002D JNZ NUMCHK 0027 1145 0152 ST GR4,NUMSTR,GR5 0029 1255 0001 LAD GR5,1,GR5 002B 6400 003B JUMP NEXT 002D 4140 0298 NUMCHK CPL GR4,='9' 002F 6500 0288 JPL ERR 0031 4140 0299 CPL GR4,='0' 0033 6100 0288 JMI ERR 0035 1145 0152 ST GR4,NUMSTR,GR5 0037 1255 0001 LAD GR5,1,GR5 0039 1266 0001 LAD GR6,1,GR6 003B 1211 0001 NEXT LAD GR1,1,GR1 003D 6400 026A JUMP LOOP 003F 0000 0000 ERR LAD GR0,-32768 ラベルの重複 0041 6400 0293 JUMP EXIT 0043 1466 CNV LD GR6,GR6 0044 6300 0288 JZE ERR 0046 1255 FFFF LAD GR5,-1,GR5 0048 1150 0152 ST GR5,NUMSTR 004A 1210 0152 LAD GR1,NUMSTR 004C 8000 0255 CALL DTOB 004E EXIT RPOP ラベルの重複 0050 8100 RET 0051 0000 INBUF DS 256 0151 0000 LENG DS 1 0152 0000 NUMSTR DS 257 0253 END 0255 DTOB START 0257 RPUSH 0259 1021 0000 LD GR2,0,GR1 025B 2621 ADDL GR2,GR1 025C 1200 0000 LAD GR0,0 025E 1230 0000 LAD GR3,0 0260 1041 0001 LD GR4,1,GR1 0262 4140 0297 CPL GR4,='-' 0264 6200 026A JNZ LOOP 0266 1230 0001 LAD GR3,1 0268 1211 0001 LAD GR1,1,GR1 026A 1211 0001 LOOP LAD GR1,1,GR1 026C 4512 CPL GR1,GR2 026D 6500 028C JPL FIN 026F 1041 0000 LD GR4,0,GR1 0271 2340 0299 SUBL GR4,='0' 0273 5200 0001 SLL GR0,1 0275 6100 0288 JMI ERR 0277 1450 LD GR5,GR0 0278 5200 0001 SLL GR0,1 027A 6100 0288 JMI ERR 027C 5200 0001 SLL GR0,1 027E 6100 0288 JMI ERR 0280 2605 ADDL GR0,GR5 0281 6100 0288 JMI ERR 0283 2604 ADDL GR0,GR4 0284 6100 0288 JMI ERR 0286 6400 026A JUMP LOOP 0288 1200 8000 ERR LAD GR0,-32768 028A 6400 0293 JUMP EXIT 028C 1433 FIN LD GR3,GR3 028D 6300 0293 JZE EXIT 028F 3200 029A XOR GR0,=#FFFF 0291 2000 029B ADDA GR0,=1 0293 EXIT RPOP 0295 8100 RET 0296 0020 DC ' ' 0297 002D DC '-' 0298 0039 DC '9' 0299 0030 DC '0' 029A FFFF DC #FFFF 029B 0001 DC 1 029C END

  • 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

専門家に質問してみよう