-1
有时通用寄存器由于某些特定原因而被使用。例如,EAX
用作累加器并存储返回值,ECX
用作计数器,ESI
和EDI
分别用于存储src和dst地址。同样,ESP
和EBP
。什么是通用寄存器的一些特殊用途
EBX
寄存器是否有任何特定用例?还有什么我错过了通用寄存器的特殊用例吗?
有时通用寄存器由于某些特定原因而被使用。例如,EAX
用作累加器并存储返回值,ECX
用作计数器,ESI
和EDI
分别用于存储src和dst地址。同样,ESP
和EBP
。什么是通用寄存器的一些特殊用途
EBX
寄存器是否有任何特定用例?还有什么我错过了通用寄存器的特殊用例吗?
EBX:基址寄存器
在16位模式下,基址寄存器,EBX,作为一个通用的指针。除了专用的ESI,EDI和EBP寄存器之外,它是唯一可以出现在方括号存储器访问(例如MOV [BX],AX)中的通用寄存器。然而,在32位的世界中,任何寄存器都可以用作内存偏移量,所以基址寄存器不再是特殊的。
基址寄存器从XLAT指令中获取其名称。 XLAT使用AL作为索引和EBX作为基准在表中查找值。 XLAT等同于MOV AL,[BX + AL],如果您需要用表中的另一个8位值替换一个8位值(有关颜色查找),则这有时很有用。
因此,在所有通用寄存器中,EBX是唯一没有重要专用目的的寄存器。这是一个存储额外指针或计算步骤的好地方,但不是更多。
(引述)整来源: The Art of Picking Intel Registers
之所以一些指令只能使用特定的寄存器是相当的历史。它曾经是这样的,如果你在指令中没有足够的位来指定一个寄存器,并且你不希望你的指令格式变得太复杂,那么你创建了一个指令(只用一个操作码)寄存器硬编码。这意味着:如果您想了解更多关于它的信息,请查阅一些旧数据表以及以前的英特尔处理器的说明。 – user35443