如何在C代码中使用内联汇编之明确的寄存器变量

明确的寄存器变量
GNU C允许您将特定的硬件寄存器与C变量关联起来。在几乎所有情况下,允许编译器分配寄存器都会生成最好的代码。然而,在某些不寻常的情况下,需要对变量存储进行更精确的控制。
全局变量和局部变量都可以与寄存器关联。

全局寄存器变量
你可以定义一个全局寄存器变量,并将它与一个指定的寄存器相关联,如下所示:
register int *foo asm (“r12”);

r12是寄存器名。
注意,这是用于定义本地寄存器变量的相同语法,但是对于全局变量,声明出现在函数外部。
关键字registerb不能和关键字static一起使用。
寄存器名必须是目标平台的有效寄存器名
不要使用const和volatile等类型限定符,因为结果可能与预期相反。
特别是,使用volatile限定符并不能完全阻止编译器优化对寄存器的访问。
寄存器在大多数系统中是一种稀缺资源,允许编译器管理它们的使用通常会得到最好的代码。然而,在特殊情况下,在全局范围内保留一些是有意义的。例如,这在一些程序中可能很有用,比如编程语言解释器,它有两个经常访问的全局变量。
定义全局寄存器变量后,当前编译单元:

局部寄存器变量

您可以定义一个本地寄存器变量,并将它与一个指定的寄存器相关联,如下所示:
register int *foo asm (“r12”);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章