アセンブラにおける EDI および ESI レジスタの実際の目的と使用方法は何ですか?
まず、これらが文字列操作に使用されることは知っています。
誰か例を挙げてもらえますか?
ベストアンサー1
SI
= ソースインデックス
DI
= 宛先インデックス
他の人が指摘しているように、これらは文字列命令で特別な用途があります。リアルモードプログラミングでは、セグメントレジスタは次のように使用ES
する必要があります。DI
DS
SI
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
は を含みargv
、ebx
でありj
、edi
を有しますsrcidx
。3 番目の命令でedi
は を 4 倍にして、ebp
オフセット 0x54 ( の位置srcp
) を追加することに注意してください。アドレスを囲む括弧は間接参照を示します。
どこで見たかは覚えていないが、 これ そのほとんどを確認し、 これ (スライド17) その他:
AX
= アキュムレータ
DX
= ダブルワードアキュムレータ
CX
= カウンタ
BX
= ベースレジスタ
これらは汎用レジスタのように見えますが、(予想外に?)そのうちの 1 つ(ただし、どのレジスタか?)を暗黙的に使用する命令が多数あります。