Embedded-systems-es-addressing-modes

提供:Dev Guides
移動先:案内検索

組み込みシステム-アドレス指定モード

  • アドレッシングモード*は、指定されたメモリロケーションのアドレス指定方法を示します。 次のように、この命令を実行する5つの異なる方法または5つのアドレッシングモードがあります-
  • 即時アドレス指定モード
  • 直接アドレス指定モード
  • 直接アドレス指定モードを登録する
  • 間接アドレス指定モードを登録する
  • インデックス付きアドレッシングモード

即時アドレス指定モード

例から始めましょう。

MOV A, #6AH

一般的に、私たちは書くことができます、

MOV A, #data

8ビットのデータはすぐにアキュムレーター(宛先オペランド)に転送されるため、「即時」と呼ばれます。

次の図は、上記の命令とその実行について説明しています。 オペコード74Hは0202アドレスに保存されます。 データ6AHは、プログラムメモリの0203アドレスに保存されます。 オペコード74Hを読み取った後、次のプログラムメモリアドレスのデータがアキュムレータAに転送されます(E0Hはアキュムレータのアドレスです)。 命令は2バイトで1サイクルで実行されるため、プログラムカウンターは2ずつ増加し、プログラムメモリの0204を指します。

即時アドレス指定モード

-6AHの前の「#」記号は、オペランドがデータ(8ビット)であることを示します。 「#」がない場合、16進数がアドレスとして使用されます。

直接アドレス指定モード

これは、オペランドをアドレス指定する別の方法です。 ここでは、データ(ソースデータ)のアドレスがオペランドとして指定されます。 例を見てみましょう。

MOV A, 04H

レジスタbank#0(4番目のレジスタ)のアドレスは04Hです。 MOV命令が実行されると、レジスタ04Hに格納されているデータがアキュムレータに移動します。 レジスタ04Hがデータ1FHを保持するため、1FHはアキュムレータに移動します。

-即時モードとは異なり、直接アドレス指定モードでは「#」を使用していません。 「#」を使用していた場合、データ値04Hは1FHではなくアキュムレータに転送されていました。

ここで、次の図を見てください。 命令が実行される方法を示します。

直接アドレス指定モード

上の図に示すように、これは完了するのに1サイクルを必要とする2バイトの命令です。 PCは2ずつ増加し、0204を指します。 命令MOV A、アドレスのオペコードはE5Hです。 0202の命令が実行されると(E5H)、アキュムレータがアクティブになり、データを受信する準備が整います。 次に、PCは0203として次のアドレスに移動し、ソースデータ(アキュムレータに転送される)が配置されている04Hの場所のアドレスを検索します。 04Hで、コントロールはデータ1Fを検出し、それをアキュムレーターに転送し、実行が完了します。

直接アドレス指定モードの登録

このアドレッシングモードでは、レジスタ名を(ソースオペランドとして)直接使用します。 例の助けを借りて理解してみましょう。

MOV A, R4

一度に、レジスタはR0からR7の値を取ることができます。 このようなレジスタは32個あります。 レジスタをアドレス指定するために8つの変数のみを持つ32個のレジスタを使用するには、レジスタバンクが使用されます。 0〜3という名前の4つのレジスタバンクがあります。 各バンクは、R0〜R7という名前の8つのレジスタで構成されています。

一度に1つのレジスタバンクを選択できます。 レジスタバンクの選択は、 Processor Status Word (PSW)という名前の*特殊機能レジスタ*(SFR)によって可能になります。 PSWは、各ビットを必要に応じてプログラムできる8ビットSFRです。 ビットはPSW.0からPSW.7に指定されます。 PSW.3およびPSW.4は、レジスタバンクの選択に使用されます。

次に、次の図を見て、その仕組みを明確に理解してください。

直接アドレス指定モードの登録

オペコードECはMOV A、R4に使用されます。 オペコードはアドレス0202に格納され、実行されると、制御は、関連するレジスタバンク(PSWで選択される)のR4に直接移動します。 レジスタバンク#0が選択されている場合、レジスタバンク#0のR4からのデータはアキュムレータに移動されます。 ここでは、2Fは04Hに格納されます。 04Hは、レジスタバンク#0のR4のアドレスを表します。

データ(2F)の動きは太字で強調表示されています。 2Fはデータメモリロケーション0C Hからアキュムレータに転送され、点線で示されています。 0CHは、レジスタバンク#1のレジスタ4(R4)のアドレス位置です。 上記の命令は1バイトであり、完全な実行には1サイクルが必要です。 つまり、レジスタダイレクトアドレッシングモードを使用してプログラムメモリを節約できます。

間接アドレス指定モードの登録

このアドレッシングモードでは、データのアドレスがオペランドとしてレジスタに保存されます。

MOV A, @R0

ここで、R0内の値はアドレスと見なされ、アキュムレータに転送されるデータを保持します。 :R0の値が20Hであり、データ2FHがアドレス20Hに格納されている場合、値2FHはこの命令の実行後にアキュムレータに転送されます。 次の図を参照してください。

間接アドレス指定モードの登録

したがって、 MOV A、@ R0 のオペコードはE6Hです。 レジスタバンク#0が選択されたとすると、レジスタバンク#0のR0はデータ20Hを保持します。 プログラム制御は20Hに移動し、そこでデータ2FHを見つけ、2FHをアキュムレーターに転送します。 これは1バイトの命令で、プログラムカウンターは1ずつ増加し、プログラムメモリの0203に移動します。

注意-R0とR1のみがレジスタ間接アドレッシング命令を作成できます。 つまり、プログラマは@ R0または@ R1を使用して命令を作成できます。 すべてのレジスタバンクが許可されます。

インデックス付きアドレッシングモード

インデックスアドレッシングモードの概念を理解するために、2つの例を取り上げます。 次の指示を見てください-

*MOVC A、@ A + DPTR*

and

*MOVC A、@ A + PC*

ここで、DPTRはデータポインターで、PCはプログラムカウンターです(両方とも16ビットレジスターです)。 最初の例を考えてみましょう。

MOVC A, @A+DPTR

ソースオペランドは@ A + DPTRです。 この場所からのソースデータが含まれています。 ここでは、アキュムレータの現在のコンテンツにDPTRのコンテンツを追加しています。 この追加により、ソースデータのアドレスである新しいアドレスが得られます。 次に、このアドレスが指すデータがアキュムレーターに転送されます。

インデックス付きアドレス指定モード

オペコードは93Hです。 DPTRの値は01FEです。01はDPH(上位8ビット)にあり、FEはDPL(下位8ビット)にあります。 アキュムレータの値は02Hです。 次に、16ビット加算が実行され、01FE H + 02Hが0200 Hになります。 ロケーション0200Hのデータはアキュムレーターに転送されます。 アキュムレーター内の以前の値(02H)は、0200Hからの新しいデータで置き換えられます。 アキュムレータの新しいデータは、図で強調表示されています。

これは、実行に2サイクル必要な1バイトの命令であり、この命令に必要な実行時間は、以前の命令(すべて1サイクルでした)と比較して長くなります。

他の例 MOVC A、@ A + PC は、上記の例と同じように機能します。 アキュムレータでDPTRを追加する代わりに、ここではプログラムカウンタ(PC)内のデータがアキュムレータで追加され、ターゲットアドレスが取得されます。