这些寄存器最初被隐含地用于重复指令中,例如MOVSB,它将一个字节从DS:SI(DataSegment:SourceIndex)复制到ES:DI(ExtraSegment:DestinationIndex),当时的16位计算机在真实的模式下使用分段内存。 现在,这些寄存器例如用于发送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)工作,这实际上是 * 为什么 * RDI和RSI被选为x86-64 System V ABI中的前两个arg-passing寄存器:有些函数调用memset或memcpy时使用它们的前1个或前2个参数,因此在这种情况下内联rep movsb/d的成本更低。)
1条答案
按热度按时间uemypmqf1#
这些寄存器最初被隐含地用于重复指令中,例如
MOVSB
,它将一个字节从DS:SI
(DataSegment:SourceIndex)复制到ES:DI
(ExtraSegment:DestinationIndex),当时的16位计算机在真实的模式下使用分段内存。现在,这些寄存器例如用于发送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)
工作,这实际上是 * 为什么 * RDI和RSI被选为x86-64 System V ABI中的前两个arg-passing寄存器:有些函数调用memset
或memcpy
时使用它们的前1个或前2个参数,因此在这种情况下内联rep movsb/d
的成本更低。)