如何在C代碼中使用內聯彙編之明確的寄存器變量

明確的寄存器變量
GNU C允許您將特定的硬件寄存器與C變量關聯起來。在幾乎所有情況下,允許編譯器分配寄存器都會生成最好的代碼。然而,在某些不尋常的情況下,需要對變量存儲進行更精確的控制。
全局變量和局部變量都可以與寄存器關聯。

全局寄存器變量
你可以定義一個全局寄存器變量,並將它與一個指定的寄存器相關聯,如下所示:
register int *foo asm (“r12”);

r12是寄存器名。
注意,這是用於定義本地寄存器變量的相同語法,但是對於全局變量,聲明出現在函數外部。
關鍵字registerb不能和關鍵字static一起使用。
寄存器名必須是目標平臺的有效寄存器名
不要使用const和volatile等類型限定符,因爲結果可能與預期相反。
特別是,使用volatile限定符並不能完全阻止編譯器優化對寄存器的訪問。
寄存器在大多數系統中是一種稀缺資源,允許編譯器管理它們的使用通常會得到最好的代碼。然而,在特殊情況下,在全局範圍內保留一些是有意義的。例如,這在一些程序中可能很有用,比如編程語言解釋器,它有兩個經常訪問的全局變量。
定義全局寄存器變量後,當前編譯單元:

局部寄存器變量

您可以定義一個本地寄存器變量,並將它與一個指定的寄存器相關聯,如下所示:
register int *foo asm (“r12”);

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