アセンブラの間接アドレッシングについて

このQ&Aのポイント
  • 間接アドレッシングの意味と具体的な使い方について説明してください。
  • アセンブラでの間接アドレッシングは、命令のオペランドとして使用されるアドレスが、実際のデータの格納場所ではなく、その格納場所のアドレスを指す方法です。
  • 具体的なプログラム例として、記録場所の差を求めて別の場所に格納するプログラムを提示しました。
回答を見る
  • ベストアンサー

アセンブラの間接アドレッシング

間接アドレッシングの意味は曖昧ながらも分かるのですが、実際どうしたらいいのか分かりません。下の例を間接アドレッシングに直して誰か説明してもらえませんか?お願いします。 このプログラムは記録場所500~999と1500~1999の差を求めて2500~2999に収納するプログラムです。 命令アドレス  命 令   コメント  13→0 LD   500 -----------     1 SB   1500 差を求めて記憶     2 ST   2500 -----------     3 LD    0r -----------     4 AD    15r  0番地の命令を変更     5 ST    0r -----------     6 LD    1r -----------     7 AD    15r  1番地の命令を変更     8 ST    1r -----------     9 LD    2r -----------     10 AD    15r 2番地の命令を変更     11 ST    2r -----------     12 SB    16r 2番地の命令と16番地の擬似命令を比較     13 NG    0r     14 HT        15      4 アドレス部に加える定数1     16 ST   3000 定数(擬似命令)

  • Mr_KZ
  • お礼率84% (11/13)

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

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

0000h-00FFh番地から順番に2000h-20FFh 番地の値をプラスして2000h-20FFh番地に格納するプログラムです。 i8086のアセンブラです、参考にならなければ無視して下さい。 CODE   SEGMENT      ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE      ORG 100h STRART:      mov bx,0000h   BXレジスタに0000h代入      mov dx,2000h   DXレジスタに2000h代入      mov cx,00FFh   CXレジスタに繰り返し回数代入 loop:   mov ax,[bx]    AXレジスタに間接アドレスBX番地の値を代入      add ax,[dx]    AXレジスタの値に間接アドレスDX番地の値をプラスしてAXレジスタに代入      mov [dx],ax   間接アドレスDX番地にAXレジスタの値を代入      inc bx      BXレジスタの値を+1      inc dx      DXレジスタの値を+1      dec cx      CXレジスタの値を-1      jnz loop     CXレジスタの値が0で無い場合loopへジャンプ      mov ax,4c00h      int 21h CODE   ENDS      END STRART

Mr_KZ
質問者

お礼

すごい役に立ちました。 ありがとうございます。

その他の回答 (1)

noname#63526
noname#63526
回答No.2

ANo.1補足、間接アドレッシングは、連続するアドレスや規則性のあるアドレスを簡単に参照出来ます。

関連するQ&A

  • コンピュータアーキテクチャの問題です

    (1)レジスタ、メモリに初期状態が以下表である時 レジスタ GR0 7 GR1 2 番地 データ 100 10 110 8 120 3 5÷3の計算を行うための一連の命令をニーモニック表現で示せ 値はすべて10進数とする。 ただし以下の3条件に従うこと 1.最初の命令をLI1、100とする 2.計算結果は120番地に格納すること 3.最低1回は命令でXRを指定すること。 (2)ハードウェア障害によってGR2とメモリの120番地が使用不能となったものとして、5÷3の計算を行うための一連の命令をニーモニック表現で示せ。 初期状態は(1)の開始時と同様とし、(1)とはことなり最初の命令は制限がない。 計算結果は110番地に格納すること。 ニーモニック表現 命令  OP 16進  説明        表記 ロード LD  10  r←(efa)     LD GR,adr,XR ストア ST  20  r→(efa)      ST GR,adr,XR       加算  AD  70  r←r+(efa)     AD GR,adr,XR 減算  SB  75  r←r-(eaf)     SB GR,adr,XR 乗算  MP  85  r←r×(eaf)    MP GR,adr,XR 除算  DV  55  r←r÷(eaf)    DV GR,adr,XR 即値  LI  30  r←ID       LI GR, ID という問題ですがわかる人教えてください。よろしくお願いします

  • アキュムレータに格納される数値は・・・?

    次の問題の解き方をできるだけ詳しく教えてください。 主記憶装置の100番地~104番地の内容は以下のようであるとき、LD/(102)を実行した結果アキュムレータに格納される数値は? LD命令は指定した有効アドレスの内容をアキュムレータに格納するめいれいであり、(X)は間接アドレス指定である。すなわちX番地の内容を 有効アドレスにするという意味である。 103     102    100    101    104 100番地   101番地  102番地  103番地  104番地

  • アセンブラについて質問です

    EX03Q START LD GR3,X LD GR1,ONE ADDA GR1,GR1 ADDA GR3,GR1 ST GR1,HOGE SUBA GR1,GR1 ST GR1,HENA ST GR3,FUGA RET X DC 119 ONE DC 2 HOGE DC 123 FUGA DS 1 HENA DS 1 END (1)プログラムの実行終了直後の記号番地HOGEの内容を10進符号付き整数で表すとどうなるのか (2)EX03Qの実行終了直後の記号番地Xの内容を10進符号付き整数で表すとどうなるのか (3)EX03Qの実行終了直後の記号番地FUGAの内容を10進符号付き整数で表すとどうなるのか (4)EX03Qの実行終了直後の記号番地HENAの内容を10進符号付き整数で表すとどうなるのか です。 どうかよろしくお願いいたしますm(_ _)m

  • CASLIIでLADやSTなどの命令の読み方がよくわからない

    LD GR6,GR1 LAD GR1,PARAM(8045番地にある) ST GR6,1,GR1 GR1は4という内容、PARAMは8045番地にあるとします。 ST命令ならば、GR6の内容を(1+GR1)へ入れると読むのでしょうが、 「8046番地に入れる」と読むのでしょうか。 しかし、8046番地にはEND命令があり、わけがわからないです。 まだ、CASLIIの初心者であり、読みなれていません。 よろしくお願いします。

  • CASLとフラグレジスタ

     私は今CASLの勉強をしています。  今はLD命令や分岐命令を使ってプログラムを作っているのですが、LD命令のフラグレジスタの設定の説明がよくわからないところがあるのです。  それは、LD命令は転送する値によってFRが決まるということですよね。それは、転送を命令された番地の数字(すなわち番地名)なのか、それともその番地に入っている値そのものなのかがなかなか調べても出てきません。  初心者な質問ですが、どなたか回答よろしくお願いします。

  • CASL アセンブラ命令 アプリ機能

    例えば、CASLのアセンブラ命令にDCがある。 LABER DC 100 とすると。 これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。 CASLには機械語命令・マクロ命令・アセンブラ命令がある。 機械語命令は人に分かりやすいようにニーモニックが付けられているだけだが、 アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。 アセンブリ言語は色々ありますが、アセンブラ言語は人に見やすいようにニーモニックが付けられているだけでなく、CASLのDC命令のように、ハンドアセンブリではできないアドレスの自動変更のようなアプリケーションとしての機能(OS的機能)も一般にふくまれているとかんがえてよいのでしょうか? よろしく願います。

  • 8051プロセッサについて

    質問カテゴリが適切でなかったらすいません。 インテル8051プロセッサ互換のマイコンで、 データポインタの使い方、間接アドレッシングの使い方が 分かりません。レジスタでいうとDPL,DPH、命令でいうところの R0,R1についてです。PICマイコンではレジスタFSRで示された アドレスに、INDFを通してアクセスできますが、これとは全く 違う方法なんでしょうか? 実際に使用するマイコンはアナログデバイセスのADuC812です。 もしお分かりの方がおられたら教えていただけませんか。

  • 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

  • PDP-11のアセンブラ課題

    学校の課題で出されたものです。 まだ勉強をはじめたばかりでどこから手をつけていいのかわかりません>< ○PDP-11のアセンブラは、MOV#1,R2を次のような2語の機械語に翻訳する。PDP-11は、これをど  のように解釈し、どのように実行するのか説明せよ 0001010111000010 0000000000000001 ○PDP-11のMOV命令を使用し、以下の命令のアセンブリ言語表現、機械語表現を示せ。 ・R5が示すアドレスにジャンプする命令 ・サブルーチンから戻る命令 ・R0をスタック上にプッシュする命令 ○次のプログラムをPDP-11のアセンブリ言語で作成せよ。 ・R0が示す番号以降のR2が示すバイト数をR1が示す番号以降に転送 ・R1(上位16ビット)R0(下位16ビット)が示す符号付32ビット値を符号反転 宜しくお願い致します。

  • 機械語の命令について

    例えばアセンブラでいうところの LD xxxx という命令は、 「xxxx番地のデータをレジスタに記憶する。」 らしいのですが、LDという命令もアドレスxxxxも2進数 で表現されていますか? そうだとして、どんな論理回路で、最終的にレジスタの電圧が1になるのでしょうか^-^? よろしくお願いします。