• 締切済み

CASL2

プログラミングCASL選択したのですがいくら考えても問題が解けません。解き方と回答を教えていただきたいです。長い質問ですみませんがよろしくお願いします。 2つのプログラムBCNT1 BCNT2はいずれも与えられた1語の中のビット値1の個数を数える副プログラムである。 1.処理対象となる1語の値はGR1に設定されて主プログラムから渡される。 2.副プログラムで数えたビット値1の個数はGR0に格納して主プログラムに戻る。 3.たとえばGR1に#00FEを設定して副プログラムBCNT1を呼び出すとGR0に#0007が返却される。副プログラムBCNT2も同様である。 (プログラムBCNT1) (行番号) 101 BCNT1 START 102 RPUSH 103 a 104 L10 SLL GR1,1 105 b 106 JZE L12 107 JUMP L10 108 L11  ADDA GR0,=1 109 JUMP L10 110 L12 RPOP 111 RET 112 END        (プログラムBCNT2) (行番号) 201 BCNT2 START 202 RPUSH 203 a 204 LAD GR3,#0001 205 L20 LD GR2,GR1 206 AND GR2,GR3 207 c 208 ADDA GR0,=1 209 L21 d 210 JNZ L20 211 L22 RPOP 212 RET 213 END a アLAD GR0,0 イLD GR0,0 ウLD GR1,GR エPUSH 0,GR1 オST GR0,0   b アJMI L11 イJMI L12 ウJOV L11 エJOV L12 オJPL L11 カJPL L12 c アJMI L21 イJMI L22 ウJNZ L21 エJNZ L22 オJZE L21 カJZE L22 d アSLL GR1,1 イSRL GR2,1 ウSLL GR2,1 エSLL GR3,1

みんなの回答

  • kaneoka
  • ベストアンサー率0% (0/0)
回答No.2

BCNT2のほうは、あまり見てないけど、BCNT1はホントに間違いないですかね。 103行目はGR0をクリアーする命令に間違いないと思いますので、「LAD GR0,0」でしょう。 このプログラムは、16回ループしなければなりませんから、この比較が必要です。 104行目を見ると、GR1を左論理シフトしてますから、シフトして無くなったビットが1なら、フラグレジスタOFに1がセットされます。 ということで、105行目は、「JOV L11」だと思うのですが、そうするとどこにも「16回ループしたか」を判定するところがありません。 変ですね・・・

352778
質問者

お礼

お礼遅くなってすみません。回答していただきありがとうございます。 BCNT1見直しましたが間違いありませんでした。 CASL2は本屋さんにもほとんど置いてなくて、私は全くの初心者で通信教育はじめたのですがプログラミングになるとテキストいくら読んでもわからないのです。ましてや応用問題になると時間だけがすぎていきます。この問題で一ヶ月ぐらいすぎようとしています。 何かいい方法ありますか?

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

CASL2シミュレータに実際の4通りのプログラムをぶち込んで実行、動作を解析、確認してみては? Vector> ダウンロード> Windows> プログラミング> 情報処理用 CASL・COMET http://www.vector.co.jp/vpack/filearea/win/prog/casl/

352778
質問者

お礼

お礼が遅くなってすみません。 回答していただきありがとうございます。 ただシミュレータがダウンロードできません~。私のやり方がおかしいと思うのですが残念です。

関連するQ&A

  • CASL2000でのプログラミングで・・・。(NO2)

    START INPUT IN ABC,LEN LAD GR0,ABC LAD GR1,127 LAD GR2,0 DIV SUBA GR0,GR1 JMI END LAD GR2,1,GR2 JUMP DIV END ADDA GR0,GR1 ST GR2,S ST GR0,A LD GR5,S CALL CHG LAD GR1,0 LD GR2,AN SUBA GR3,=1 LOOP3 LD GR0,WORK,GR3 ADDL GR0,=#0030 ST GR0,ANS,GR2 ADDA GR2,=1 ST GR2,AN LAD GR1,1,GR1 SUBA GR3,=1 JMI OUT1 JUMP LOOP3 OUT1 OUT ANS,AN LD GR5,A CALL CHG LAD GR1,0 LD GR2,AM SUBA GR3,=1 LOOP4 LD GR0,WORK,GR3 ADDL GR0,=#0030 ST GR0,AMA,GR2 ADDA GR2,=1 ST GR2,AM LAD GR1,1,GR1 SUBA GR3,=1 JMI OUT2 JUMP LOOP4

  • 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行目は、なにをしているか、教えてください。お願いします             

  • アセンブラ言語

    平成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の解説

    以下のような問題があり、解答がありますが理解できません。 すみませんが、どなたか解説をお願いします。 ---------------------------------------------------------- ■問題  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

    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

  • CASL2の問題について

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

  • CASL2000・・・・・のNO2の続き

    OUT2 OUT AMA,AM RET S DS 1 ABC DS 8 LEN DS 3 A DS 1 ANS DC 'ANSWER= ' AMA DC 'AMARI= ' AN DC 7 AM DC 6 CHG LAD GR3,0 LOOP1 LAD GR4,0 LOOP2 SUBA GR5,=10 JMI NEXT LAD GR4,1,GR4 JUMP LOOP2 NEXT ADDA GR5,=10 ST GR5,WORK,GR3 LAD GR3,1,GR3 LD GR5,GR4 JZE TUGI JUMP LOOP1 TUGI RET WORK DS 5 END これってなんのプログラミングですか?? 教えてくださいお願いします!! 関連URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=312336 http://oshiete1.goo.ne.jp/kotaeru.php3?q=312338

  • CASL2の問題について教えて下さい。

    CASL2を勉強したばかりで、いろいろ調べても分からず、下記の問題が解けなくて困っています。 どなたかお分かりの方いらっしゃいましたら教えて下さい。 よろしくお願いいたします。 下記のプログラムを実行すると、ANS番地からの6語に、以下のようなビットパターンが格納される。 ANS番地+0番地 0111111111111111 ANS番地+1番地 1111101111111111 ANS番地+2番地 1111111110111111 ANS番地+3番地 1111111111110111 ANS番地+4番地 1111111111111101 ANS番地+5番地 1111111111111110 このとき、(1)~(6)の空欄に適切な命令コードやオペランドを入れて、プログラムを完成させよ。 START LAD GR0,1 LAD GR1,1 LD GR2,LEN LOOP SUBA GR2,=1 JMI FIN LD (1) (2) GR3,WK ST (3) SLL GR0,0,GR1 LAD (4) JUMP LOOP FIN RET ANS DS 6 LEN DC (5) WK DC (6) END

  • 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

  • 10進数を2進数に変換するプログラム

    このアセンブラのプログラムはIN命令によって3桁のレコードに入力された10進数の値を2進数に変換するプログラムです。 INPUT START                      (1) RPUSH                      (2) IN IBUF,ILEN ;レコードを入力       (3)     LD GR0,ILEN                (4) JMI FIN2 ;ファイルの終わり      (5) LD GR1,=0   ;けた数のカウンタ      (6) LD GR4,=0   ;数値の初期化        (7) LOOP2 LD GR3,IBUF,GR1               (8) AND GR3,=#000F ;数字を数値に変換      (9) LD GR5,GR4;ここから↓4つの命令はGR4を10倍する (10) SLL GR5,3;                   (11) SLL GR4,1;                   (12) ADDA GR4,GR5;                  (13) ADDA GR4,GR3                   (14) ADDA GR1,=1                   (15) CPA GR1,GR0                   (16) JMI LOOP2                    (17) LD GR0,GR4                   (18) FIN2 RPOP                         (19) RET ILEN DS 1 IBUF DS 256 END (8)のLOOP2 LD GR3,IBUF,GR1の命令なのですが、「これはIBUFとGR1のアドレスをたしてGR3にその内容を格納する。」という意味であり、その後(14)で10倍されたGR4にたしています。 質問としては、この2進数に変換するプログラムでGR3とGR4の役割を教えていただきたいです。 GR1はレコードの桁数に使われている領域だとわかります。 個人的な解釈としては、GR4はレコードに入力する10進数の数値なのですが、GR4をなぜ10倍すると2進数に変換されるのかなどやGR3の意味がわからないために全く理解できません。 よろしくお願いします。

専門家に質問してみよう