汇编,依靠寄存器和变量来提高效率?

时间:2013-06-25 23:28:57

标签: assembly x86-16

我遇到过很多情况,我正在使用所有寄存器,需要暂时保存一个值,不知道是否要声明一个新变量,还是要调整寄存器和堆栈以某种方式适应某处的值(例如:使用PUSHA和POPA临时存储堆栈中的所有内容)。

在某些情况下,这很简单,但在其他情况下,代码变得不必要地长时间不添加额外的变量。

使用变量而不是寄存器有什么缺点吗?你如何选择使用哪种?

1 个答案:

答案 0 :(得分:0)

您遇到的问题称为寄存器调度,并且是C语言等问题的很大一部分。

寄存器比RAM快。如果您可以使用寄存器而不是更好的内存位置。然而,累积到内存中的计算是不可避免的。

根据您使用的汇编程序,您可以在堆栈上命名内存位置。例如,如果您使用MASM,则可以使用LOCAL指令为堆栈上的变量赋予符号名称。如果您需要的不仅仅是最短暂的临时存储空间,那么您应该找到一种方法来命名它。在一年中你不会记得你在[ESI + 12]中的内容。 PUSH和POP仍然可以成为你的朋友。例如,我曾经喜欢使用PUSH和POP来执行内存移动或在插入或删除链表中的节点时保存指针。

如果您需要持续执行程序的整个过程,那么使用变量是唯一的方法。记住全局变量在每种语言中都是邪恶的(即使有必要)。