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

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

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

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

局部寄存器变量

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

猜你喜欢

转载自blog.csdn.net/wzc18743083828/article/details/100544187