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

Assembly 汇编,依靠寄存器和变量来提高效率?,assembly,x86-16,Assembly,X86 16,我遇到过很多情况,在这些情况下,我使用所有寄存器,需要临时保存一个值,不知道是要声明一个新变量,还是要改变寄存器和堆栈以某种方式在某个地方容纳该值(例如:使用PUSHA和POPA临时存储堆栈上的所有内容) 在某些情况下,它很简单,但在另一些情况下,由于没有添加额外变量,代码变得不必要的长 使用变量而不是寄存器有什么缺点吗?您如何选择使用哪种方法?您遇到的问题称为寄存器调度,这是像C这样的语言为您解决的大部分问题 寄存器比RAM快。如果可以使用寄存器而不是内存位置,则更可取。然而,溢出到内存中的计

我遇到过很多情况,在这些情况下,我使用所有寄存器,需要临时保存一个值,不知道是要声明一个新变量,还是要改变寄存器和堆栈以某种方式在某个地方容纳该值(例如:使用PUSHA和POPA临时存储堆栈上的所有内容)

在某些情况下,它很简单,但在另一些情况下,由于没有添加额外变量,代码变得不必要的长


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

您遇到的问题称为寄存器调度,这是像C这样的语言为您解决的大部分问题

寄存器比RAM快。如果可以使用寄存器而不是内存位置,则更可取。然而,溢出到内存中的计算是不可避免的

根据所使用的汇编程序,您可以命名堆栈上的内存位置。例如,如果使用,则可以使用该指令为堆栈上的变量指定符号名。如果您需要的不仅仅是最短暂的临时存储,那么您应该找到一种命名方法。一年后,你将记不起你在[ESI+12]中投入了什么。推送和弹出仍然可以是你的朋友。例如,我过去喜欢在链表中插入或删除节点时使用PUSH和POP进行内存到内存的移动或保存指针

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