何が違うのかわかりません。
Movsbのような命令を使用している場合、siはs ourceレジスタと見なされ、diはd estinationレジスタと見なされます。ただし、どちらも通常のx86レジスタです。
私のアセンブリは少し錆びていますが、1つはソースインデックス、もう1つは宛先インデックスです。 movsb
のような命令は、SI
が指すメモリ位置からバイトをコピーし、それをDI
が指すメモリ位置に移動してから、両方をインクリメントします。 SI+1
に格納されているバイトをDI+1
にコピーする場合は、さらにmovsb命令を実行するだけです。
SI
はソースインデックスを表します。ソースインデックスは、文字列命令(LODS、MOVS、またはCMPS)で読み取られている現在の文字へのポインタとして使用されます。ソースインデックスは、間接アドレス指定を行うときにBxまたはBpを追加するためのオフセットとしても使用できます。
例:
MOV [Bx + SI] , Ax
この命令は、Axの内容を、アドレスがBxとSIの合計であるメモリ位置にコピーします。
DI
は宛先インデックスを表し、文字列命令で書き込まれている、または比較されている現在の文字へのポインタとして使用されます。
SIと同様にオフセットとしても利用できます。
上で述べたように、diは宛先インデックスを表し、siはソースインデックスを表します。メモリからデータを移動する場合は、siを使用します(例:mov ax、[si])。データをメモリに移動する場合は、diを使用します。例:mov [di]、ax
どちらも16ビットレジスタであり、8ビットに分割することはできません