intel 64アーキテクチャには、単にA..D汎用レジスターであるrax..rdxレジスターがあります。
しかし、「ソースインデックス」および「デスティネーションインデックス」レジスタであるrsiおよびrdiと呼ばれるレジスタもあります。これらのレジスタに実際の名前があるのはなぜですか(Aに比べてなど)。
「ソースインデックス」と「デスティネーションインデックス」は実際にはどういう意味ですか?そして、これらのレジスタは特定の状況で使用されるべきであると言う規則がありますか?
これらのレジスターは、元々、例えばMOVSB
などの反復命令で暗黙的に使用されていました。これは、リアルモードでセグメント化されたメモリーを持つ16ビットコンピューターの時点で、DS:SI
(DataSegment:SourceIndex)からES:DI
(ExtraSegment:DestinationIndex)にバイトをコピーしますまた、[bx + si]
などの16ビットアドレッシングモードのインデックスレジスタとしても使用できます。
現在、これらのレジスタは、たとえば、最初の2つの(整数)関数パラメータを NIXのx86_64 ABI で送信するために使用され、元の目的からはほど遠いものです。 ( i386およびx86-64でのUNIXおよびLinuxシステムコールの呼び出し規約は何ですか )も参照してください)
新しいrXX
64ビットレジスタの名前は、古いレジスタ名が親しみとレトロ互換性のためだけにあることを明確に示しています。 (ただし、一部の命令は一部のレジスタでしか機能しないことに注意してください。たとえば、 rep movsb
はmemcpy(rdi, rsi, rcx)
としてのみ機能し、 実際にはwhyRDIとRSIが最初の2つの引数渡しレジスタとして選択されました x86-64 System V ABI:一部の関数は、最初の1または2でmemset
またはmemcpy
を呼び出しますそのため、rep movsb/d
をインライン化する方が安価です。