1

Richard C. Detmer 著の「Introduction to 80x86 Assembly Language and Computer Architecture Second Edition」というタイトルの 80x86 アセンブリ言語に関する本を読んでいます。Register Indirect Mode を理解するのに苦労しています。私の本には次のように書かれています。

「私たちのサンプル プログラムには、レジスタ間接メモリ オペランドを持つ命令はありません。次のようになります。コメントは、リスティング ファイルに表示されるオブジェクト コードを示します。

add eax, [edx] ; 03 02

最初のオペランド EAX は明らかにレジスタ モードであり、2 番目のオペランドはレジスタ間接モードです。オブジェクト コードは 2 バイトしかなく、32 ビットのメモリ アドレスを格納するには不十分であることに注意してください。代わりに、2 番目のバイトには、EDX レジスタのアドレスを使用して 2 番目のダブルワード オペランドを特定するよう指示するビットが含まれています。つまり、2 番目の番号は EDX にはありませんが、そのアドレスは EDX にあります。角括弧表記 ([ ]) は、アセンブリ言語での間接アドレス指定を示します。" - 最下部の 65 ページ (教科書をお持ちの場合)。

この本には、メモリ スロットの図と、メモリ内の EDX (オペランドのアドレス) の場所のアドレスとその強調表示が示されています。

わかりませんので、その小さなセクションを入力しました.2番目のdwordを見つけるためにEDXのアドレスを使用すると書かれていますが、2番目の数字はEDXにありませんが、そのアドレスは. 何??EDX のアドレスを取得しますが、メモリ内の数値はどのように得られるのでしょうか? アドレスは EDX をアドレス指定するだけだと思いましたが、レジスタに含まれるものは何でも、EDX から番号を取得せずにメモリアドレスのみを使用するにはどうすればよいでしょうか? アドレスは EDX とその内容を指しているため、アドレスを使用すると、通常は EDX で値を取得できませんか? では、以下のステートメントは同じではありませんか?:

add eax, edx

レジスタ間接モードについて、いくつかの例、説明、および上記の私の質問への回答とともに、誰かが私にもう少し洞察を与えることができれば、本当に感謝しています。

4

1 に答える 1

1

EDXにアドレスが含まれていると言っています。つまり、EDX はメモリへのポインタです。これは、メモリ内のその位置にあるデータのワードを逆参照[]して EAX にロードする命令オペコード/アドレッシング モードをアセンブラが選択する必要があることを示しています。C ライクな擬似コードでは: EDX

eax = eax + *(uint32_t *)edx;

レジスタである EDX 自体にはアドレスがありません。その概念は無意味です。

2 番目の例 ( add eax, edx) は次のようなものです。

eax = eax + edx;

メモリはまったくアクセスされません。

于 2013-06-20T00:37:08.740 に答える