ホームページ  >  記事  >  メモリオペランドのアドレッシングモードは何ですか?

メモリオペランドのアドレッシングモードは何ですか?

青灯夜游
青灯夜游オリジナル
2020-07-28 14:24:4916435ブラウズ

メモリ オペランドのアドレッシング モードは、直接アドレッシング、レジスタ間接アドレッシング、レジスタ相対アドレッシング、ベース インデックス インデックス アドレッシング、およびベース インデックス インデックス相対アドレッシングです。

メモリオペランドのアドレッシングモードは何ですか?

#メモリ オペランドのアドレッシング モード

TIPS:

♥命令によって操作されるオブジェクトはメモリ内にあり、その式は [ ]

#♥ 命令によって、メモリの特定の論理セグメント内の操作オブジェクトのオフセット アドレスが与えられます。 [オフセット アドレス]

♥論理セグメントのセグメント ベース アドレスは、

default

または reset♥メモリ オペランドの語長で指定されます。それ自体は決定されず、その語長は別のレジスタ オペランドに依存するか、語長は他の方法で指定されます

#1. 直接アドレス指定

命令はオペランドのオフセットアドレスを直接与えます

eg

: MOV AX,[1200H]; データセグメント1200Hの内容をALに格納します。 1201H コンテンツは AH# に格納されます。

ダイレクト アドレッシング モードでは、オペランドはデフォルトでデータ セグメントになりますが、セグメントのリセットは許可されます。つまり、論理セグメントは命令によって指定されます。

eg

: MOV AX,ES:[1200H]; 追加セグメント 1200H の内容を AL に、1201H の内容を AH に格納します。 ##個人的な理解 :

[ ]を付けるとレジスタ以外のアドレスを探す必要があることを意味しますが、このときメモリのどのセグメントにあるかを考えてから行う必要があります。このセグメントで指定されたアドレスを直接検索します。一般に、デフォルトはデータ セグメントです。

#2. レジスタ間接アドレッシング

オペランドはメモリに格納され、データのオフセットはメモリ内のシフト アドレスは、角括弧 [ ] 内の汎用レジスタの内容です。

#4 つの汎用レジスタが一般的に使用されます (これらの 4 つのレジスタは、BX、BP、SI、DI という間接アドレス レジスタとも呼ばれます)。データのオフセットアドレス。 (間接アドレスレジスタは、ベースアドレスレジスタ BX、BP とインデックスレジスタ SI、DI に分かれています)

#間接アドレッシングの一般的な形式:

eg: MOV BX,1200H; これは即時アドレッシング、つまりオペランドを直接 BX に送信します このとき、 BX=1200H

MOV AX,[BX]; ここで [ BX] =[1200H]なのでダイレクトアドレッシングに変換されますが、中間エージェントとしてBXが追加され、このときコードセグメント中のオフセットアドレス1200Hのユニットの内容がALに代入され、ユニット 1201H の内容が AH

#間接アドレッシングとは、オペランドのオフセット アドレスをレジスタを通じて間接的に与えることです。

##オペランドのセグメント アドレス (オペランドがどのセグメントにあるか) は、どの間接アドレス レジスタを選択するかによって決まります (セグメントごとにリセット可能)

#BX、SI、および DI は、デフォルトでデータセグメント; BP はデフォルトでスタックセグメントにあります

個人的な理解

:

選択されたセグメントを通じて対応するセグメントを見つけることができます間接アドレス レジスタを参照し、セグメントのオフセットを通じて物理的な位置を見つけます。間接的にアドレス指定する場合、ソース オペランドの物理的な場所を見つけることができます。

物理的位置=セグメントベースアドレス*16オフセットアドレス。

#3. レジスタの相対アドレス指定

オペランドのオフセット アドレスは、レジスタの内容に 1 を加えたものです。変位量

##eg

: MOV AX,2000H ; 即時アドレッシング、AXMOV DS,AX ; DSはAXセグメントヘッドから取得address

MOV BX,1200H; 即時アドレッシング、BXMOV AL,[BX]5; 相対アドレッシング、セグメントベースアドレスは2000H、オフセット シフト量の内容1200H の 5 は AL に割り当てられます

#相対アドレス指定は主に 1 次元配列の演算に使用されます

#ディスプレイスメントはテーブルとしてよく使用されますヘッダアドレスと間接アドレスレジスタの値をテーブル内の相対アドレスとして使用します(使用する間に定数が発生するので不便です)

個人的な理解

:

相対アドレッシングは、間接アドレッシングをベースに変位定数を追加するため、間接アドレッシングか相対アドレッシングかを判断する方法は、間接アドレスの前後に定数があるかどうかで判断します。定数がある場合は相対アドレッシング

4. ベースアドレスインデックスドアドレッシング

オフセットオペランドのアドレスは :

ベース アドレス レジスタ (BX、BP) の内容とインデックス レジスタ (SI、DI) の内容

BXデフォルトはデータ セグメント、BP はスタック セグメントです

オペランドのセグメント アドレスは、選択したベース アドレス レジスタによって決まります

相対アドレス指定と同じで、主に 1 次元配列演算に使用されます

##例

: MOV SI,1100H; 即時アドレス指定、SI に 1100H を割り当てます

MOV BX,SI; Assign 1100H to BX

MOV AX,[SI BX] ;ソースオペランドの物理アドレス = データセグメントベースアドレス*16 1100H 1100H

#個人的な理解

:

ベース アドレス インデックス アドレッシングでは、まずベース レジスタが配置されているセグメントの最初のアドレスを見つけ、次にベース レジスタのオフセットとインデックス レジスタのオフセットを加算します。その特徴は、[BX][BP] が 2 つのうちの 1 つであること、[SI][DI] が 2 つのうちの 1 つである必要があることです。

5. ベース アドレス インデックス付き相対アドレッシング

##オペランドのオフセットアドレスは です。

ベースアドレスレジスタ インデックスレジスタ変位量

オペランドのセグメント アドレスは、選択したベース アドレス レジスタによって決まります

##ベース アドレス インデックス相対アドレッシング モードは、主に 2 次元配列の演算に使用されます

#eg

: MOV DI,1100H ; 即時アドレス指定、1100H を DIMOV BP,DI ; 1100H を BP

MOV AL, [BP][DI]5; BP は、オペランドがスタック セグメント内にあることを示し、その物理アドレス = スタック セグメント セグメント ベース アドレス*16 1100H 1100H 5

#個人的な理解

:

##ベースインデックス相対アドレッシングは、ベースインデックスに定数オフセットを加算するだけであり、これによりソースオペランドの物理アドレスが把握できます。

関連知識の詳細については、

PHP 中国語 Web サイト

をご覧ください。

以上がメモリオペランドのアドレッシングモードは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。