組み込みシステム-アドレッシングモード

アン addressing mode特定のメモリ位置をどのようにアドレス指定するかを指します。この命令を実行するには、次の5つの異なる方法または5つのアドレッシングモードがあります。

  • 即時アドレッシングモード
  • ダイレクトアドレッシングモード
  • 直接アドレッシングモードを登録する
  • 間接アドレッシングモードを登録する
  • インデックス付きアドレッシングモード

即時アドレッシングモード

例から始めましょう。

MOV A, #6AH

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

MOV A, #data

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

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

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

ダイレクトアドレッシングモード

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

MOV A, 04H

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

Note−即時モードとは異なり、ダイレクトアドレッシングモードでは「#」を使用していません。'#'を使用した場合、データ値04Hは1FHではなくアキュムレータに転送されます。

次に、次の図を見てください。命令がどのように実行されるかを示します。

上の図に示すように、これは2バイトの命令であり、完了するまでに1サイクルが必要です。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つのレジスタバンクを選択できます。レジスタバンクの選択は、Special Function Register (SFR)という名前 Processor Status Word(PSW)。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はデータメモリ位置0CHからアキュムレータに転送されており、点線で示されています。0CHは、レジスタバンク#1のレジスタ4(R4)のアドレス位置です。上記の命令は1バイトであり、完全に実行するには1サイクルが必要です。つまり、レジスタ直接アドレッシングモードを使用してプログラムメモリを節約できます。

間接アドレッシングモードの登録

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

MOV A, @R0

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

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

Note−レジスタ間接アドレス指定命令を形成できるのはR0とR1のみです。つまり、プログラマーは@ R0または@ R1を使用して命令を作成できます。すべてのレジスタバンクが許可されます。

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

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

MOVC A, @A+DPTR

そして

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の結果は0200Hになります。位置0200Hのデータはアキュムレータに転送されます。アキュムレータ内の以前の値(02H)は、0200Hからの新しいデータに置き換えられます。図では、アキュムレータの新しいデータが強調表示されています。

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

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