我遇到过很多情况,我正在使用所有寄存器并且需要临时保存一个值并且不知道是声明一个新变量还是调整寄存器和堆栈以某种方式在某处容纳该值(例如:使用 PUSHA 和 POPA 将所有内容临时存储在堆栈中)。
在某些情况下它很简单,但在其他情况下,由于不添加额外的变量,代码变得不必要的长。
使用变量而不是寄存器有什么缺点吗?你如何选择使用哪个?
您遇到的问题被称为寄存器调度,并且是 C 等语言为您解决的问题的很大一部分。
寄存器比 RAM 快。如果您可以使用寄存器而不是内存位置,那就更好了。然而,计算溢出到内存中是不可避免的。
根据您使用的汇编器,您可能能够命名堆栈上的内存位置。例如,如果您使用MASM,那么您可以使用LOCAL指令为堆栈上的变量指定一个符号名称。如果您需要的不仅仅是最短暂的临时存储,那么您应该找到一种命名方法。一年后你将不记得你在 [ESI+12] 中输入了什么。PUSH 和 POP 仍然可以成为您的朋友。例如,我曾经喜欢使用 PUSH 和 POP 来进行内存到内存的移动,或者在插入或删除链表中的节点时保存指针。
如果您需要在程序的整个执行过程中保留一些东西,那么使用变量是唯一的方法。请记住,全局变量在每种语言中都是邪恶的(即使有必要)。