手动编码汇编 - 实用的寄存器分配?

时间:2014-07-27 20:46:49

标签: assembly register-allocation risc

我从未在汇编中写过任何长篇程序。但是从我肤浅的经历来看,它似乎并不像人们看起来那么难。

我唯一能够完全理解的是:一个人如何实际进行寄存器分配?虽然在x86中没有太多空间,但x64和RISC设计(AVR,ARM)为您提供了大量的寄存器。

汇编程序员如何选择哪些变量应该保留在寄存器中,何时从/向存储器传输?最后,他们如何跟踪每个变量?

1 个答案:

答案 0 :(得分:3)

  

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

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

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

  

何时从/向内存传输

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

  

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

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