手工编码的实用寄存器分配



我从来没有用汇编语言写过长程序。但从我肤浅的经验来看,这似乎没有人们想象的那么难。

我唯一不能完全理解的是:如何实际执行寄存器分配?而在x86没有太多的空间,x64和RISC设计(AVR, ARM)给你足够的寄存器。

汇编程序员如何选择哪些变量应该留在寄存器中,何时将它们从/转移到内存,最后,他们如何跟踪每个变量?

汇编程序员如何选择哪些变量应该留在寄存器中

由于寄存器(几乎总是)比内存访问快,因此经常使用的变量(读或写)通常应该进入寄存器。一个例子是循环的索引变量

反例是一个变量,您将获取该变量的地址。这应该进入内存,因为你不能(通常)获取一个指向寄存器的指针。

何时将它们从/转移到内存

除非绝对必要,否则不要。

,最后,它们如何跟踪每个变量?

几乎没有。除了开玩笑,频繁的注释、一致的命名和寄存器分配约定、某种宏处理器的使用(汇编程序拥有一个宏处理器或C预处理器)以及规范的编码通常会使事情变得更容易一些。

最新更新