索引寄存器¶
x86 汇编还有四个索引寄存器,用于访问数据流、引用调用栈和跟踪局部信息。与通用寄存器一样,索引寄存器为 32 位且用途更严格定义:
EDI(目标索引)(the destination index):用于索引写操作目标的内存。如果一段代码中没有写操作,编译器可以在需要时把 EDI 用于任意存储。
ESI(源索引)(the source index):用于索引读操作目标的内存。也可以任意使用。
ESP(栈指针)(the stack pointer):用于引用调用栈的顶部。所有栈操作都直接访问这个寄存器。你只能在处理栈时使用 ESP,而且它必须始终指向栈顶。
EBP(栈基址指针)(the stack base pointer):标记栈帧的底部。函数用引用它们的参数和局部变量。某些代码可以用选项编译省略这种行为,这种情况下 EBP 可以任意使用。
与通用寄存器一样,每个索引寄存器都有 16 位对应物:分别是 DI、SI、SP 和 BP。不过,索引寄存器没有 8 位子寄存器。