汇编和登记

时间:2012-04-07 15:53:58

标签: assembly x86

我在业余时间学习汇编语言,以成为更好的开发人员。我已经从亚马逊购买了一本书,很快就会发布,我想在挖掘之前熟悉基本概念。

我很困惑我应该将哪些通用寄存器用于通用任务。我知道C编程语言,我已经阅读了有关为程序集和Windows API调用约定的内容。

但是,如果你有一个非常简单的任务,例如添加两个数字而不引用C等,那么你会使用哪个寄存器?

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

1 个答案:

答案 0 :(得分:3)

无论你想要哪一个,真的。

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

在后续的处理器代中,一些特殊用途已经褪色 - 例如,我认为大多数操作码现在允许您使用任何寄存器作为偏移,而不仅仅是BX。因此,在大多数情况下,通用寄存器是可以互换的。

如果你想遵循历史先例,(E)AX是“累加器”,所以它将是传统的存储地点,例如:当你总结一系列数字时的总计。因此,如果您正在添加,并且您不确定将结果放入哪个寄存器,(E)AX将是一个很好的默认选择。