欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ARM體系下的GCC內(nèi)聯(lián)匯編教程詳解

 更新時(shí)間:2020年02月10日 11:08:38   作者:摩斯電碼  
在操作系統(tǒng)級(jí)的編程中,有時(shí)候,C語(yǔ)言并不能完全的使用硬件的功能,這時(shí)候就需要嵌入一些匯編代碼來(lái)實(shí)現(xiàn)功能。這篇文章主要介紹了ARM體系下的GCC內(nèi)聯(lián)匯編,需要的朋友可以參考下

在操作系統(tǒng)級(jí)的編程中,有時(shí)候,C語(yǔ)言并不能完全的使用硬件的功能,這時(shí)候就需要嵌入一些匯編代碼來(lái)實(shí)現(xiàn)功能。 有兩種方式可以使C語(yǔ)言和assemly語(yǔ)言一起工作,一種是兩種語(yǔ)言分開(kāi)寫(xiě)成兩個(gè)文件,鏈接的時(shí)候鏈接成一個(gè)文件;另一種就是在C語(yǔ)言中嵌入?yún)R編代碼。下面簡(jiǎn)單介紹一下如何在GCC中嵌入?yún)R編代碼。

GCC規(guī)定了一個(gè)內(nèi)聯(lián)匯編的語(yǔ)法,不同硬件平臺(tái)上的GCC內(nèi)聯(lián)匯編幾乎都是這樣的:

asm(
 匯編指令列表
 :輸出運(yùn)算符列表
 :輸入運(yùn)算符列表
 :被更改的資源列表
};

在GCC中插入?yún)R編代碼,需要以asm關(guān)鍵字開(kāi)頭,中間四個(gè)部分用”:”分隔,如果你嵌入的匯編沒(méi)有輸入輸出,或者更改資源,后面三項(xiàng)是可以省略的。

下面以一個(gè)實(shí)例來(lái)說(shuō)明這個(gè)語(yǔ)法:

void test(void)
 {
  int tmp;
  // some code
  __asm__(
   " mov r1,%0\n\t"
   : 
   : "r" (tmp)
   : "r1"
  );
 }

以上代碼的意思就是,將tmp變量的值賦給r1寄存器,%0代表出現(xiàn)在輸入運(yùn)算符列表和輸出運(yùn)算符列表中的第一個(gè)值,%1,%2依次類推。由于我們自己的匯編代碼改變了r1的值,所以我們要通知GCC編譯器,r1的值被我們改變了, 在 “r” (tmp) 表達(dá)式中,tmp代表C語(yǔ)言輸入到匯編中的變量,”r”代表tmp會(huì)通過(guò)一個(gè)寄存器傳遞??梢允褂玫姆?hào)有以下幾種:

表1 GCC4內(nèi)聯(lián)匯編操作符節(jié)選

操作符 含義
r 通用寄存器R0~R15
m 一個(gè)有效內(nèi)存地址
l 數(shù)據(jù)處理指令中的立即數(shù)
X 被修飾的操作符只能作為輸出

上面一個(gè)代碼是將C語(yǔ)言的值傳遞到匯編代碼中,也可以將匯編代碼輸出的結(jié)果傳給C代碼:

void test(void)
  {
   int tmp;
   __asm__(
    "mov %0, #1\n\t"
    : "=r" (tmp)
    :
   ); 
  }

這段代碼的意思是,將立即數(shù)1賦給變量tmp。 與上面不同的是,輸入運(yùn)算符列表移到了輸出運(yùn)算符列表,”r”前面也多了一個(gè)等于號(hào)。這個(gè)等號(hào)被稱為約束修飾符,以下是幾種修飾符的含義列表:

表2 GCC4中內(nèi)聯(lián)匯編修飾符

修飾符 說(shuō)明
無(wú) 被修飾的操作符是只讀的
= 被修飾的操作符只寫(xiě)
+ 被修飾的操作符具有可讀寫(xiě)的屬性
& 被修飾的操作符只能作為輸出

總結(jié)

以上所述是小編給大家介紹的ARM體系下的GCC內(nèi)聯(lián)匯編教程詳解,希望對(duì)大家有所幫助!

相關(guān)文章

  • 最好懂的匯編語(yǔ)言教程,解釋CPU如何執(zhí)行代碼

    最好懂的匯編語(yǔ)言教程,解釋CPU如何執(zhí)行代碼

    這篇文章主要介紹了最好懂的匯編語(yǔ)言教程,解釋CPU如何執(zhí)行代碼。計(jì)算機(jī)真正能夠理解的是低級(jí)語(yǔ)言,它專門(mén)用來(lái)控制硬件。匯編語(yǔ)言就是低級(jí)語(yǔ)言,直接描述/控制?CPU?的運(yùn)行。如果你想了解?CPU?到底干了些什么,以及代碼的運(yùn)行步驟,就一定要學(xué)習(xí)匯編語(yǔ)言。
    2022-12-12
  • 匯編程序 查表求平方的實(shí)現(xiàn)

    匯編程序 查表求平方的實(shí)現(xiàn)

    這篇文章主要介紹了匯編程序 查表求平方的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用匯編語(yǔ)言實(shí)現(xiàn)if else 循環(huán)函數(shù)調(diào)用的具體方法

    使用匯編語(yǔ)言實(shí)現(xiàn)if else 循環(huán)函數(shù)調(diào)用的具體方法

    這篇文章主要介紹了使用匯編語(yǔ)言實(shí)現(xiàn)if else 循環(huán)函數(shù)調(diào)用的具體方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • UEFI開(kāi)發(fā)實(shí)戰(zhàn)用戶交互界面使用說(shuō)明UNI文件

    UEFI開(kāi)發(fā)實(shí)戰(zhàn)用戶交互界面使用說(shuō)明UNI文件

    這篇文章主要為大家介紹了UEFI開(kāi)發(fā)實(shí)戰(zhàn)用戶交互界面使用說(shuō)明UNI文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 匯編語(yǔ)言軟件延時(shí)1s的實(shí)現(xiàn)方法

    匯編語(yǔ)言軟件延時(shí)1s的實(shí)現(xiàn)方法

    這篇文章主要介紹了匯編語(yǔ)言軟件延時(shí)1s的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Debug的基本使用()

    Debug的基本使用()

    Debug是一個(gè)通過(guò)操作系統(tǒng)(os)對(duì)cpu寄存器進(jìn)行訪問(wèn)用于學(xué)習(xí)匯編的程序,但是如今的win10(64位)已經(jīng)不支持cmd打開(kāi)debug,但是我們可以通過(guò)DOSBOX模擬器對(duì)其進(jìn)行訪問(wèn)
    2023-08-08
  • VScode配置匯編語(yǔ)言環(huán)境的實(shí)現(xiàn)步驟

    VScode配置匯編語(yǔ)言環(huán)境的實(shí)現(xiàn)步驟

    本文主要介紹了VScode配置匯編語(yǔ)言環(huán)境的實(shí)現(xiàn)步驟,文中通過(guò)圖文的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 用匯編語(yǔ)言實(shí)現(xiàn)從1加到100的方法(1+2+...+100)

    用匯編語(yǔ)言實(shí)現(xiàn)從1加到100的方法(1+2+...+100)

    這篇文章主要介紹了用匯編語(yǔ)言實(shí)現(xiàn)從1加到100的方法(1+2+...+100),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編語(yǔ)言 跳轉(zhuǎn)指令與C語(yǔ)言的條件分支

    匯編語(yǔ)言 跳轉(zhuǎn)指令與C語(yǔ)言的條件分支

    這篇文章主要介紹了匯編語(yǔ)言 跳轉(zhuǎn)指令與C語(yǔ)言的條件分支,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 淺析ARMv8匯編指令adrp和adr

    淺析ARMv8匯編指令adrp和adr

    這篇文章給大家介紹ARMv8匯編指令adrp和adr的相關(guān)知識(shí),暫時(shí)不介紹alpha生成的指令,因此先來(lái)主要分析一下,arm架構(gòu)之所以少生成匯編指令的原因——adrp指令,感興趣的朋友跟隨小編一起看看吧
    2021-12-12

最新評(píng)論