ESI および EDI レジスターの目的は? 質問する

ESI および EDI レジスターの目的は? 質問する

アセンブラにおける EDI および ESI レジスタの実際の目的と使用方法は何ですか?

まず、これらが文字列操作に使用されることは知っています。

誰か例を挙げてもらえますか?

ベストアンサー1

SI= ソースインデックス
DI= 宛先インデックス

他の人が指摘しているように、これらは文字列命令で特別な用途があります。リアルモードプログラミングでは、セグメントレジスタは次のように使用ESする必要があります。DIDSSI

movsb  es:di, ds:si

SIとDIは汎用インデックスレジスタとしても使用できます。たとえば、Cソースコード

srcp [srcidx++] = argv [j];

コンパイルすると

8B550C         mov    edx,[ebp+0C]
8B0C9A         mov    ecx,[edx+4*ebx]
894CBDAC       mov    [ebp+4*edi-54],ecx
47             inc    edi

ここで、ebp+12は を含みargvebxでありjediを有しますsrcidx。3 番目の命令でediは を 4 倍にして、ebpオフセット 0x54 ( の位置srcp) を追加することに注意してください。アドレスを囲む括弧は間接参照を示します。


どこで見たかは覚えていないが、 これ そのほとんどを確認し、 これ (スライド17) その他:

AX= アキュムレータ
DX= ダブルワードアキュムレータ
CX= カウンタ
BX= ベースレジスタ

これらは汎用レジスタのように見えますが、(予想外に?)そのうちの 1 つ(ただし、どのレジスタか?)を暗黙的に使用する命令が多数あります。

おすすめ記事