web-dev-qa-db-ja.com

SIレジスタとDIレジスタの実際的な違いは何ですか?

何が違うのかわかりません。

16
tatsuhirosatou

Movsbのような命令を使用している場合、siはs ourceレジスタと見なされ、diはd estinationレジスタと見なされます。ただし、どちらも通常のx86レジスタです。

27
Pierre Bourdon

私のアセンブリは少し錆びていますが、1つはソースインデックス、もう1つは宛先インデックスです。 movsbのような命令は、SIが指すメモリ位置からバイトをコピーし、それをDIが指すメモリ位置に移動してから、両方をインクリメントします。 SI+1に格納されているバイトをDI+1にコピーする場合は、さらにmovsb命令を実行するだけです。

11

SIはソースインデックスを表します。ソースインデックスは、文字列命令(LODS、MOVS、またはCMPS)で読み取られている現在の文字へのポインタとして使用されます。ソースインデックスは、間接アドレス指定を行うときにBxまたはBpを追加するためのオフセットとしても使用できます。
例:

MOV [Bx + SI] , Ax  

この命令は、Axの内容を、アドレスがBxとSIの合計であるメモリ位置にコピーします。

DIは宛先インデックスを表し、文字列命令で書き込まれている、または比較されている現在の文字へのポインタとして使用されます。

SIと同様にオフセットとしても利用できます。

6
Umair

上で述べたように、diは宛先インデックスを表し、siはソースインデックスを表します。メモリからデータを移動する場合は、siを使用します(例:mov ax、[si])。データをメモリに移動する場合は、diを使用します。例:mov [di]、ax

どちらも16ビットレジスタであり、8ビットに分割することはできません

0
anjali dhasmana