組み込みシステム-アドレッシングモード
アン 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)内のデータをアキュムレータで追加してターゲットアドレスを取得します。