• ベストアンサー

CASLIIのLD GR3,0,GR1とLD GR3,GR1の表記法の違いについて

こんにちは、CASLIIを勉強しているのですが疑問点が出てきたので質問させて頂きます。 例えば LD GR3,0,GR1 LD GR3,GR1 のように、LDのレジスタ間の間に0を入れることがありますが、有効アドレスを算出するときに0を加算しても同じ結果なのでこれは意味がないのではありませんか?これを入れる必要性がわかりません。 GR1が目的のデータではなく、目的のデータが格納されているアドレスのときにこういう表記をしなくてはならないとあったのですが、これもその為ですか? 拙い文章で申し訳ありませんが、どなたかご理解のある方は教えてください。よろしくお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

LD GR3,GR1 の場合は、GR1 の内容がGR3にロード(設定)されます。 LD GR3,0,GR1 の場合は、実効アドレス(0+GR1の内容をアドレスとして)の内容がGR3にロードされます。 アドレスが、BUF のようにラベルで判っていれば LD GR3,BUF で良いわけですが、参照したいアドレスがレジスタに格納されている時は LD GRn, 基準アドレス,指標アドレス の様に指定して基準アドレス+指標アドレス が実際にアクセスするアドレスになります。(なので実効アドレスという) この場合、GR1 にBUF のアドレスが入っているとしてそのアドレスをそのまま使ってアドレスの内容を持ってくればいいのですが、 そのために0 を指定しています。

good_listener
質問者

お礼

レス有難うございます。 丁寧なレスでとても理解できました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

例えば、GR1=2でアドレス2番地に4が格納されていたら、 LD GR3,GR1→GR3=2 LD GR3,0,GR1→GR3=4 ――になるかと。 直接と間接の違い。

good_listener
質問者

お礼

レス有難うございます。 なるほど、番地か内容かの違いですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 解答お願いします!!><

  • CASL LDの考え方

    お世話になっております。 CASLでLDの考えた方が良く整理できておりません。 アドバイスをいただければと思います。 ◎処理フローの概要に関して  処理フロー概要は以下の通りです。  (1)GR1に文字列"1","2","3"の先頭アドレスを格納する。  (2)GR1から"1"をGR2に格納する。 ◎不明点に関して(文中に疑問点あり)  上記の(2)を実現するためには、下記ロジックが必要と  なるようです。  LD GR2,0,GR1    ここで不明なのは、上記ロジックに"0"がなぜ、  必要であるかです。  LD GR2,GR0 でも良いのではないかと考えました。  そこで、下記について教えていただけないでしょうか。  ・なぜ、"0"が必要になるか。  ・LD GR2,GR0では、GR2に"1"が格納されない理由について。  以上、よろしくお願い致します。

  • CASLIIの問題なんですが

    CASLIIの問題なんですが DAT番地より格納された5個のデータの0以上の数の個数をGR2に数えるプログラムを作成せよ。 という問題が解けません>< どなたかご教授お願いします。

  • CASLIIのADDAとADDLの演算

    次の問題があっているのかわかりません。 次のCASLIIプログラムの実行後のレジスタ(GR1,FR)とメモリ(AA,BB,CC番地) の内容を16進表示および符号付き10進表示せよ。 PGM START LD GR1,AA ADDA GR1,BB ST GR1,CC RET AA DC 32767 BB DC 1 CC DS 1 END 32767をGR1に入れて、1加算する。 だからGR1 = 32768 と思ったのですが、先生の書いた答えは -32768 でした。 PGM START LD GR1,AA ADDL GR1,BB ST GR1,CC RET AA DC #7FFF BB DC 1 CC DS 1 END #7FFFに1加算するので GR1=#8000 だと思います。 また自分で書いた板書に Arithmetic[ -32768, 32767](#8000,#7FFF) Logical[0,65535](#0000,#FFFF) とありました。 板書をとったのがだいぶ前なのでこれの意味をよく覚えていないのですが、 ADDA命令のときに扱える値の範囲は-32768,~32767 ADDL命令のときに扱える値の範囲は0~65535 ということなのでしょうか。 その場合、先ほどの問題のADDAの問題で 32767 + 1 をしたら範囲を超えてしまいます。 このような場合どうなるのでしょうか? ADDLの場合も範囲を超えてしまったらどうなるのですか? よろしくお願いします。

  • 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の解説

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

    LESSON3_8_2 START ; FFFFから0FFFを論理減算 LD GR1,CFFFF ;FFFFをロード SUBL GR1,C0FFF ;FFFF-0FFF ST GR1,ANS ;結果をANSに格納 RET CFFFF DC #FFFF C0FFF DC #0FFF ANS DS 1 END 1週間で分かる集中ゼミ【CASLII】P.274より抜粋 以上のように、演習問題の解答例があったのですが下から4行目と3行目のCFFFFとC0FFFのメモリの値は存在しないのではないでしょうか?COMETIIの場合、アドレスとして0000~FFFFまでの値しか使用できないと習ったのですが…

  • サブルーチンでの加算

    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をキャスルツーと読むことを知ったぐらいです。「なるべく専門用語を使わないで答えてくださる方」よろしくお願いします。 基本情報午後の選択はCASLIIがいいと思って参考書を読んでみたのですが、とても難しく、ネットで検索していたら理解を深めるための記事みたいのがあったのですが、【主プログラムから副プログラムのデータの受け渡し】ということで以下のことが書かれてます。 LAD  GR1,123     ;GR1に123を格納する(主プログラムの先頭)   PUSH   0,GR1 ;123をスタックに格納する     LAD   GR2,456 ;GR2に456を格納する     PUSH   0,GR2 ;456をスタックに格納する     CALL   SUB1  ;副プログラムSUB1を呼び出す     POP   GR3    ;加算結果をスタックからGR3に取り出す        :   ;これ以降の処理は省略する  SUB1 POP   GR4   ;戻り番地を逃がしておく  ←これ!!    POP   GR1    ;GR1に456を取り出す(副プログラムの先頭)   POP   GR2   ;GR2に123を取り出す     ADDA  GR1,GR2 ;GR1とGR2の加算結果をGR1に格納する      PUSH   0,GR1 ;加算結果をスタックに格納する      PUSH   0,GR4 ;戻り番地を元通りにする  ←ここも!!     RET      ;主プログラムに戻る(副プログラムの末尾) の、戻り番地を逃がしておくが意味がよく分かりません。なので、戻り番地を元通りにするもよく分かりません。 よろしくお願いします。

このQ&Aのポイント
  • 仮想メモリのパーティション分割について質問です。Windows OSにおいて、ディスクごとに仮想メモリを設定するパターンと、同一ディスク内でパーティション分割したパターンがあります。性能の観点から考えると、ディスクごとにI/Oが分散されるパターンの方が効果的と考えられますが、これは正しいでしょうか?
  • Windows OS上での仮想メモリのパーティション分割について質問です。ディスクごとに仮想メモリを設定するパターンと、同一ディスク内でパーティション分割したパターンがありますが、どちらの方が性能的に優れているのでしょうか?
  • 仮想メモリの設定方法について質問です。パターン1ではディスクごとにI/Oが分散されるためパフォーマンスが向上すると考えられますが、これは正しい判断でしょうか?
回答を見る

専門家に質問してみよう