assembly 英特尔64、rsi和rdi寄存器

nhaq1z21  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(578)

在Intel x86 64位架构中,有rax ... rdx寄存器,它们只是A...D通用寄存器。
但也有寄存器称为rsirdi,它们分别是“源索引”和“目标索引”寄存器。为什么这些寄存器有实际的名称(与只有A等相比)?
“源索引”和“目标索引”实际上是什么意思?是否有某种约定规定这些寄存器应在特定情况下使用?

uemypmqf

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寄存器:有些函数调用memsetmemcpy时使用它们的前1个或前2个参数,因此在这种情况下内联rep movsb/d的成本更低。)

相关问题