Intel 64,rsi和rdi寄存器

时间:2014-04-29 14:30:50

标签: assembly x86-64

在Intel 64架构中,有rax..rdx寄存器,它们只是A..D通用寄存器。

但也有一些名为rsi和rdi的寄存器,它们是"源索引"和"目的地索引"寄存器。为什么这些寄存器有实际名称(与A等相比)? 什么"源索引"和"目的地索引"实际上意味着是否有一些惯例说这些寄存器应该在特定情况下使用?

1 个答案:

答案 0 :(得分:14)

这些寄存器最初隐式用于重复指令,例如MOVSB,它将DS:SI(DataSegment:SourceIndex)中的一个字节复制到ES:DI(ExtraSegment:DestinationIndex),在实模式下具有分段存储器的16位计算机的时间。并且还作为16位寻址模式中的索引寄存器,如[bx + si]

现在,这些寄存器用于传输UNIX's x86_64 ABI中的前两个(整数)函数参数,远非其原始目的。 (另见What are the calling conventions for UNIX & Linux system calls on i386 and x86-64

rXX 64位寄存器的名称清楚地表明旧的寄存器名称仅用于熟悉和逆向兼容。 (但请注意,某些指令仍然仅适用于某些寄存器,例如rep movsb仅适用于memcpy(rdi, rsi, rcx)和x86-64 System V ABI中的is in fact why RDI and RSI were chosen as the first 2 arg-passing registers:某些函数调用{ {1}}或memset带有前1或2个参数,因此在这种情况下内联memcpy会更便宜。)

相关问题