CASLIIの問題

このQ&Aのポイント
  • CASLIIの問題について質問があります。プログラムに最大値を調べるサブルーチン、最小値を調べるサブルーチン、昇順にソートするサブルーチン、平均値を調べるサブルーチンを作成する方法を教えてください。
  • CASLIIの問題について質問です。プログラム作成についてわからないことがあります。データの先頭番地と個数を指定して、最大値や最小値を調べるサブルーチン、昇順にソートするサブルーチン、平均値を調べるサブルーチンを作成する方法を教えてください。
  • CASLIIの問題について質問です。指定された整数値配列から最大値や最小値を調べるサブルーチン、昇順にソートするサブルーチン、平均値を調べるサブルーチンを作成する方法を教えてください。プログラムの作り方がわかりません。
回答を見る
  • ベストアンサー

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で個数を比較している。 などのことはわかるのですが、 プログラムを作るとなるとまったくわかりません。 どなたか教えていただけませんか?? お願いします!!

  • 32i
  • お礼率33% (3/9)

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

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

回答がないので調べてみました。アセンブルは下記を使用しました。バグがあるようなのと知らないのであまり自信がありません。 http://www.chiba-fjb.ac.jp/fjb_labo/casl/index.html PGM START LAD GR1, DATA LD GR2, =10 CALL SUM ST GR0, RESULT CALL AVE ST GR7,WK2 CALL MAX ST GR0,WK3 DUMP RESULT,3 ;システムコール、結果の確認 RET DATA DC 1,9,3,7,5,10,2,8,4,6 RESULT DS 1 WK2 DS 1 WK3 DS 1 SUM 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 ;--------------------- ; 割り算 ; GR7=GR0/GR2 ;HOLD : GR1-GR6 ;--------------------- AVE LD GR7,=0 LOOP2 SUBA GR0,GR2 JMI QUIT2 LAD GR7,1,GR7 JUMP LOOP2 QUIT2 RET ;----------------------------- ; 最大値の検索 ; IN : GR1=DATA TOP ; : GR2=DATA SU ;HOLD : GR1-GR6 ;--------------------- MAX PUSH 0,GR1 LD GR0,0,GR1 LD GR7,=0 LOOP3 LAD GR7,1,GR7 CPA GR7,GR2 JZE QUIT3 LAD GR1,1,GR1 CPA GR0,0,GR1 JPL LOOP3 LD GR0,0,GR1 JUMP LOOP3 QUIT3 POP GR1 RET END ;-------------- ; 以下はソート ;-------------- PGM START LAD GR1, DATA LD GR3, =10 ;DATA SU CALL SORT DUMP DATA,10 ;システムコール、結果の確認 RET DATA DC 1,9,3,7,5,10,2,8,4,6 ;------------------------------------- ; バブルソート ; IN : GR1=DATA TOP ; : GR3=DATA SU ; WORK : GR2=比較用 DATA TOP ; : GR4=SWAP用WORK ; : GR6=基準データ数カウンタ ; : GR7=比較データ数カウンタ ;DESTORY : GR3,GR5以外すべて ;------------------------------------- SORT LD GR6, =0 ;I=0 FOR_I LAD GR2,0,GR1 ;D[I]=D[J] DATA TOP アドレスを同じにする LAD GR6,1,GR6 ;I=I+1 CPA GR6, GR3 JZE QUIT ;I==DATA SU LD GR7,GR6 ;J=I FOR_J LAD GR7,1,GR7 ;J=J+1 LAD GR2, 1, GR2 ;D[J] 比較用のデータアドレスを進める LD GR0,0,GR2 ;GR0=D[I] CPA GR0,0,GR1 JPL NEXT ;D[J]>D[I] 順の入れ替え不要 JZE NEXT ;D[J]=D[I] ” LD GR5,GR0 ;GR5=D[J] LD GR0,0,GR1 ;GR0=D[I] ST GR0,0,GR2 ;D[J]=GR0 ST GR5,0,GR1 ;D[I]=GR5 SWAP D[I],D[J] NEXT CPA GR7, GR3 JMI FOR_J ;J<DATA SU LAD GR1,1,GR1 ;D[I]のアドレスをつぎの配列に進める JUMP FOR_I QUIT RET END

32i
質問者

お礼

丁寧で迅速な説明、ありがとうございます!! 今更なんですが、問題にへんなところがありました。。 最小値のほうのサブルーチンはMAXではなくてMINですね。。 ごめんなさい。

関連する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の問題が分かりません。

    資格の勉強のため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で質問です

    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

  • サブルーチンでの加算

    CASLIIの課題で、 主プログラムで、連続したN語の領域に格納されているデータの先頭番地をサブルーチンに渡し、サブルーチンでデータを加算し、主プログラムのANS番地に格納するプログラムを作成しなさい。 という問題が出ました。 サブルーチンでの加算法がよくわかりません。 どなたかご教示ください。 MAIN     START LAD GR0,TBL ST GR0,PARA LAD GR1,1 LD GR0,N ST GR0,PARA,GR1 LAD GR1,PARA CALL  SUBR ST GR0,ANS RET TBL DC 1,2,3,4,5,6,7,8,9,10 N DC 10 PARA DS 2 ANS DS 1 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

  • 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

  • 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の問題で困っています

    最近学校でCASLIIを情報の時間に習ったのですが、さっぱり意味が分かりません。 CASLIIの命令、オペランドが表している意味を詳しく解説願います。 カテゴリ間違っていたらごめんなさい! 論理演算プログラム   ラベル    命令     オペランド REI1003   START             LD       GR1,DATA1          OR       GR1,DATA2          LD       GR1,DATA1          AND      GR1,DATA2          LD       GR1,DATA1 XOR GR1,DATA2 RET DATA1 DC #5AOF DATA2 DC #FOFO END 解答お願いします!!><

  • 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

専門家に質問してみよう