2

我在业余时间学习汇编语言以成为更好的开发人员。我从亚马逊买了一本书,它很快就会发货,我正在尝试在深入研究之前熟悉基本概念。

我对应该将哪些通用寄存器用于通用任务感到困惑。我知道 C 编程语言,并且阅读过关于汇编和 Windows API 的调用约定。

但是,如果您有一个非常简单的任务,例如将两个数字相加而没有对 C 等的引用,那么您会使用哪些寄存器?

我意识到这是一个基本问题。

4

1 回答 1

3

无论你想要什么,真的。

在第一代 8086 处理器中,一些通用寄存器(AX、BX、CX、DX)也有半特殊用途。例如,LOOP 操作码假定您的循环计数器在 CX 中;DIV 操作码将结果存储在 AX 和 DX 中。有些寻址方式可以使用BX或SI或DI作为偏移量,但不能使用其他通用寄存器作为偏移量。

在随后的处理器世代中,其中一些特殊用途已经逐渐消失——例如,我认为大多数操作码现在允许您使用任何寄存器作为偏移量,而不仅仅是 BX。所以在大多数情况下,通用寄存器是可以互换的。

如果您想遵循历史先例,则 (E)AX 是“累加器”,因此它将是存储例如运行总计的传统位置,因为您正在对一系列数字求和。因此,如果您正在做加法,并且您不确定将结果放入哪个寄存器,则 (E)AX 将是一个不错的默认选择。

于 2012-04-07T16:03:02.357 回答