在Intel 64架构中,有rax..rdx寄存器,它们只是A..D通用寄存器.
但是也有一些名为rsi和rdi的寄存器,它们是"源索引"和"目标索引"寄存器.为什么这些寄存器有实际名称(与A等相比)?
"源索引"和"目标索引"实际上意味着什么?是否有一些惯例说这些寄存器应该在特定情况下使用?
小智 18
这些寄存器最初隐含地用于重复指令中,例如MOVSB,在实际模式下具有分段存储器的16位计算机时,将一个字节从DS:SI(DataSegment:SourceIndex)复制到ES:DI(ExtraSegment:DestinationIndex).并且还作为16位寻址模式中的索引寄存器[bx + si].
现在,这些寄存器例如用于在UNIX的x86_64 ABI中传输前两个(整数)函数参数,远非其原始目的.(另请参阅i386和x86-64上UNIX和Linux系统调用的调用约定)
新的rXX64位寄存器的名称清楚地表明旧的寄存器名称仅用于熟悉和逆向兼容.(但请注意,某些指令仍然只能用于某些寄存器,例如rep movsb仅用作a memcpy(rdi, rsi, rcx),并且实际上为什么选择RDI和RSI作为 x86-64 System V ABI中的前2个arg传递寄存器:一些函数打电话memset或memcpy使用他们的前1或2个args,因此rep movsb/d在这种情况下内联更便宜.)
| 归档时间: |
|
| 查看次数: |
40452 次 |
| 最近记录: |