2015-05-24 27 views
-1

有时通用寄存器由于某些特定原因而被使用。例如,EAX用作累加器并存储返回值,ECX用作计数器,ESIEDI分别用于存储src和dst地址。同样,ESPEBP什么是通用寄存器的一些特殊用途

EBX寄存器是否有任何特定用例?还有什么我错过了通用寄​​存器的特殊用例吗?

+0

之所以一些指令只能使用特定的寄存器是相当的历史。它曾经是这样的,如果你在指令中没有足够的位来指定一个寄存器,并且你不希望你的指令格式变得太复杂,那么你创建了一个指令(只用一个操作码)寄存器硬编码。这意味着:如果您想了解更多关于它的信息,请查阅一些旧数据表以及以前的英特尔处理器的说明。 – user35443

回答

2

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