日韩av色在线_av不卡在线观看_亚洲国产精品第一页_在线看日本不卡_色成人综合网_国产丝袜在线视频_国产精成人品localhost_国产91富婆露脸刺激对白_韩国视频一区_国产精品人成电影

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 >
__asm__ __volatile__內(nèi)嵌匯編用法簡(jiǎn)述
時(shí)間:2018-08-16作者:華清遠(yuǎn)見(jiàn)

__asm__ __volatile__內(nèi)嵌匯編用法簡(jiǎn)述 在閱讀C/C++原碼時(shí)經(jīng)常會(huì)遇到內(nèi)聯(lián)匯編的情況,下面簡(jiǎn)要介紹下__asm__ __volatile__內(nèi)嵌匯編用法。因?yàn)槲覀內(nèi)A清遠(yuǎn)見(jiàn)教學(xué)平臺(tái)是ARM體系結(jié)構(gòu)的,所以下面的示例都是用ARM匯編。

帶有C/C++表達(dá)式的內(nèi)聯(lián)匯編格式為:

__asm__ __volatile__("Instruction List" : Output : Input : Clobber/Modify);

其中每項(xiàng)的概念及功能用法描述如下:

1、 __asm__

__asm__是GCC 關(guān)鍵字asm 的宏定義:

#define __asm__ asm

__asm__或asm 用來(lái)聲明一個(gè)內(nèi)聯(lián)匯編表達(dá)式,所以任何一個(gè)內(nèi)聯(lián)匯編表達(dá)式都是以它開(kāi)頭的,是必不可少的。

2、Instruction List

Instruction List 是匯編指令序列。它可以是空的,比如:__asm__ __volatile__(""); 或 __asm__ ("");都是完全合法的內(nèi)聯(lián)匯編表達(dá)式,只不過(guò)這兩條語(yǔ)句沒(méi)有什么意義。但并非所有Instruction List 為空的內(nèi)聯(lián)匯編表達(dá)式都是沒(méi)有意義的,比如:__asm__ ("":::"memory");

就非常有意義,它向GCC 聲明:“內(nèi)存作了改動(dòng)”,GCC 在編譯的時(shí)候,會(huì)將此因素考慮進(jìn)去。 當(dāng)在"Instruction List"中有多條指令的時(shí)候,可以在一對(duì)引號(hào)中列出全部指令,也可以將一條 或幾條指令放在一對(duì)引號(hào)中,所有指令放在多對(duì)引號(hào)中。如果是前者,可以將每一條指令放在一行,如果要將多條指令放在一行,則必須用分號(hào)(;)或換行符(\n)將它們分開(kāi). 綜上述:(1)每條指令都必須被雙引號(hào)括起來(lái) (2)兩條指令必須用換行或分號(hào)分開(kāi)。

例如: 在ARM系統(tǒng)結(jié)構(gòu)上關(guān)閉中斷的操作

int disable_interrupts (void) 
        { 
                unsigned long old,temp; 
                __asm__ __volatile__("mrs %0, cpsr\n" 
                                "orr %1, %0, #0x80\n" 
                                "msr cpsr_c, %1" 
                                : "=r" (old), "=r" (temp) 
                                : 
                                : "memory"); 
                return (old & 0x80) == 0; 
        }

3. __volatile__

__volatile__是GCC 關(guān)鍵字volatile 的宏定義

#define __volatile__ volatile

__volatile__或volatile 是可選的。如果用了它,則是向GCC 聲明不允許對(duì)該內(nèi)聯(lián)匯編優(yōu)化,否則當(dāng) 使用了優(yōu)化選項(xiàng)(-O)進(jìn)行編譯時(shí),GCC 將會(huì)根據(jù)自己的判斷決定是否將這個(gè)內(nèi)聯(lián)匯編表達(dá)式中的指令優(yōu)化掉。

4、 Output

Output 用來(lái)指定當(dāng)前內(nèi)聯(lián)匯編語(yǔ)句的輸出

例如:從arm協(xié)處理器p15中讀出C1值

static unsigned long read_p15_c1 (void) 
        { 
                unsigned long value; 
                __asm__ __volatile__( 
                                "mrc p15, 0, %0, c1, c0, 0 @ read control reg\n" 
                                : "=r" (value) @編譯器選擇一個(gè)R*寄存器 
                                : 
                                : "memory"); 
        #ifdef MMU_DEBUG 
                printf ("p15/c1 is = %08lx\n", value); 
        #endif 
                return value; 
        }

5、 Input

Input 域的內(nèi)容用來(lái)指定當(dāng)前內(nèi)聯(lián)匯編語(yǔ)句的輸入Output和Input中,格式為形如“constraint”(variable)的列表(逗號(hào)分隔)

例如:向arm協(xié)處理器p15中寫入C1值

static void write_p15_c1 (unsigned long value) 
        { 
        #ifdef MMU_DEBUG 
                printf ("write %08lx to p15/c1\n", value); 
        #endif 
                __asm__ __volatile__( 
                                "mcr p15, 0, %0, c1, c0, 0 @ write it back\n" 
                                : 
                                : "r" (value) @編譯器選擇一個(gè)R*寄存器 
                                : "memory"); 
                read_p15_c1 (); 
        } 

6.、Clobber/Modify

有時(shí)候,你想通知GCC當(dāng)前內(nèi)聯(lián)匯編語(yǔ)句可能會(huì)對(duì)某些寄存器或內(nèi)存進(jìn)行修改,希望GCC在編譯時(shí)能夠?qū)⑦@一點(diǎn)考慮進(jìn)去。那么你就可以在Clobber/Modify域聲明這些寄存器或內(nèi)存。這種情況一般發(fā)生在一個(gè)寄存器出現(xiàn)在"Instruction List",但卻不是由Input/Output操作表達(dá)式所指定的,也不是在一些Input/Output操作表達(dá)式使用"r"約束時(shí)由GCC 為其選擇的,同時(shí)此寄存器被"Instruction List"中的指令修改,而這個(gè)寄存器只是供當(dāng)前內(nèi)聯(lián)匯編臨時(shí)使用的情況。

例如:

__asm__ ("mov R0, #0x34" : : : "R0");

寄存器R0出現(xiàn)在"Instruction List中",并且被mov指令修改,但卻未被任何Input/Output操作表達(dá)式指定,所以你需要在Clobber/Modify域指定"R0",以讓GCC知道這一點(diǎn)。

因?yàn)槟阍贗nput/Output操作表達(dá)式所指定的寄存器,或當(dāng)你為一些Input/Output操作表達(dá)式使用"r"約束,讓GCC為你選擇一個(gè)寄存器時(shí),GCC對(duì)這些寄存器是非常清楚的——它知道這些寄存器是被修改的,你根本不需要在Clobber/Modify域再聲明它們。但除此之外, GCC對(duì)剩下的寄存器中哪些會(huì)被當(dāng)前的內(nèi)聯(lián)匯編修改一無(wú)所知。所以如果你真的在當(dāng)前內(nèi)聯(lián)匯編指令中修改了它們,那么就好在Clobber/Modify 中聲明它們,讓GCC針對(duì)這些寄存器做相應(yīng)的處理。否則有可能會(huì)造成寄存器的不一致,從而造成程序執(zhí)行錯(cuò)誤。

如果一個(gè)內(nèi)聯(lián)匯編語(yǔ)句的Clobber/Modify域存在"memory",那么GCC會(huì)保證在此內(nèi)聯(lián)匯編之前,如果某個(gè)內(nèi)存的內(nèi)容被裝入了寄存器,那么在這個(gè)內(nèi)聯(lián)匯編之后,如果需要使用這個(gè)內(nèi)存處的內(nèi)容,就會(huì)直接到這個(gè)內(nèi)存處重新讀取,而不是使用被存放在寄存器中的拷貝。因?yàn)檫@個(gè) 時(shí)候寄存器中的拷貝已經(jīng)很可能和內(nèi)存處的內(nèi)容不一致了。

這只是使用"memory"時(shí),GCC會(huì)保證做到的一點(diǎn),但這并不是全部。因?yàn)槭褂?quot;memory"是向GCC聲明內(nèi)存發(fā)生了變化,而內(nèi)存發(fā)生變化帶來(lái)的影響并不止這一點(diǎn)。

例如:

int main(int __argc, char* __argv[]) 
        { 
        int* __p = (int*)__argc; 
        (*__p) = 9999; 
        __asm__("":::"memory"); 
        if((*__p) == 9999) 
        return 5; 
        return (*__p); 
        }

本例中,如果沒(méi)有那條內(nèi)聯(lián)匯編語(yǔ)句,那個(gè)if語(yǔ)句的判斷條件就完全是一句廢話。GCC在優(yōu)化時(shí)會(huì)意識(shí)到這一點(diǎn),而直接只生成return 5的匯編代碼,而不會(huì)再生成if語(yǔ)句的相關(guān)代碼,而不會(huì)生成return (*__p)的相關(guān)代碼。但你加上了這條內(nèi)聯(lián)匯編語(yǔ)句,它除了聲明內(nèi)存變化之外,什么都沒(méi)有做。但GCC此時(shí)就不能簡(jiǎn)單的認(rèn)為它不需要判斷都知道 (*__p)一定與9999相等,它只有老老實(shí)實(shí)生成這條if語(yǔ)句的匯編代碼,一起相關(guān)的兩個(gè)return語(yǔ)句相關(guān)代碼。

另外在linux內(nèi)核中內(nèi)存屏障也是基于它實(shí)現(xiàn)的include/asm/system.h中

# define barrier() _asm__volatile_("": : :"memory")

主要是保證程序的執(zhí)行遵循順序一致性。呵呵,有的時(shí)候你寫代碼的順序,不一定是終執(zhí)行的順序,這個(gè)是處理器有關(guān)的。


發(fā)表評(píng)論

全國(guó)咨詢電話:400-611-6270,雙休日及節(jié)假日請(qǐng)致電值班手機(jī):15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號(hào),京公海網(wǎng)安備11010802025203號(hào)

国产日韩欧美成人| 亚洲做受高潮无遮挡| 一区二区三区黄色| 一区二区中文视频| 欧美a级在线| 小黄鸭精品aⅴ导航网站入口| 黄色三级电影网站| 亚洲av永久无码国产精品久久| 一级片手机在线观看| 国产毛片久久久久久国产毛片| 国产精品视频在线播放| 日韩精品福利网站| 欧美视频在线观看免费网址| 99亚偷拍自图区亚洲| 激情综合亚洲| 蜜臀av一区| 成人av免费电影网站| 日本人妖在线| 大陆一级毛片免费观看| 欧美自拍偷拍第一页| 日本少妇性高潮| 朝桐光av一区二区三区| 日韩激情免费视频| 欧美午夜欧美| 成人久久久久久| 欧美理论电影在线观看| 日韩丝袜美女视频| 高清在线一区| 2024最新电影免费在线观看 | 欧美精品少妇一区二区三区| 亚洲女人小视频在线观看| 黄一区二区三区| 欧美性久久久| 国产欧美一区二区精品久久久| 亚洲综合在线电影| 成人在线播放免费观看| 在线中文字幕资源| 激情亚洲色图| 美女免费视频网站| 欧美乱大交xxxx| 精品久久在线观看| 久久精品视频2| 精品小视频在线观看| 精品国产aaa| 白嫩情侣偷拍呻吟刺激| www.超碰97.com| 日韩久久一级片| 草草草视频在线观看| 日韩精品一线二线三线| 亚洲一区久久久| 国产精品久久久精品| 国内精品模特av私拍在线观看| www.日韩.com| 一区二区三区国产视频| 亚洲新声在线观看| 亚洲视频日韩精品| 亚洲欧美日韩国产中文| 亚洲美女在线看| 精品无码久久久久久国产| 日韩精品一区二区在线观看| 91精品国产色综合久久不卡电影 | 日韩在线一区二区三区| 黄色日韩在线| 综合日韩在线| 中文字幕一区二区三区久久网站| 久久精品不卡| 日韩欧美高清在线播放| 欧洲乱码伦视频免费| 亚洲最好看的视频| 真实原创一区二区影院| 免费成人网www| 精品国产乱码久久久久久果冻传媒 | 久久精品国产一区二区三区肥胖| 影音先锋中文字幕在线视频| 影音先锋中文字幕在线播放| 欧美三级黄视频| 夜夜夜操操操| 欧美hdsex| 97在线影院| 欧美孕妇孕交| 国产一级网站视频在线| 97电影在线| 在线看一级片| 欧美激情护士| 欧洲美女精品免费观看视频| 试看120秒一区二区三区| 国产精品99久久免费观看| 日韩欧美天堂| 91av精品| 日韩黄色免费电影| 国产盗摄一区二区三区| 91免费在线播放| 亚洲视频一区在线| 色婷婷精品大在线视频| 日韩视频一区二区在线观看| 国产小视频国产精品| 久久久久国产精品一区| 国产剧情久久久久久| 国产精品一国产精品最新章节| 亚洲第一综合| 91专区在线观看| 久久久久中文字幕亚洲精品 | 久久久噜噜噜久久人人看| 国产精品久久久久久久久图文区 | 人禽交欧美网站| 国产福利电影一区二区三区| 日本一区二区久久| 精品久久久久久久久久| 日韩一区二区免费视频| 色先锋资源久久综合5566| 4388成人网| 精品国产一二| 人妻少妇精品久久| 国产人妻精品午夜福利免费| 久久久久久久久久久久久女过产乱| 波多野结衣影片| 最近免费中文字幕mv视频| av第一福利大全导航| 免费福利在线观看| 欧美成人精品一区二区男人小说| 女同一区二区三区| 日韩免费成人网| 91超碰caoporn97人人| 在线视频一区二区免费| 日韩精品一区二区三区中文不卡 | 久久久久国产精品视频| 成年人视频大全| 亚洲这里只有精品| 亚洲一二三精品| 国产乱淫片视频| 再深点灬舒服灬太大了少妇| 性网站在线看| 中文字幕资源网在线观看免费| 女人抽搐喷水高潮国产精品| 天堂成人国产精品一区| 欧美韩国日本一区| 欧美日韩一区高清| 久久综合电影一区| 国产精品自拍首页| 超碰影院在线观看| 在线日韩国产网站| 日本wwwxxxx| 色婷五月综激情亚洲综合| 九色porny丨首页在线| 99国产精品久久一区二区三区| 精品电影一区| 亚洲国产精品99久久久久久久久| 欧美一级专区免费大片| 欧美最猛性xxxxx(亚洲精品)| 欧美一区二区三区四区在线观看地址| 国产91色在线观看| 国产在线综合网| 四虎中文字幕| 经典三级在线| 国产精品久久久久av蜜臀| 日本系列欧美系列| 亚洲午夜激情av| 色偷偷偷综合中文字幕;dd| 国产一区二区三区黄| 手机av在线网| 日本中文字幕在线观看视频| 青青操在线观看| 国产又色又爽又黄刺激在线视频| 欧洲福利电影| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产免费区一区二区三视频免费| 亚洲综合欧美| 亚洲成av人片一区二区三区| 日韩中文第一页| 秋霞久久久久久一区二区| 激情av中文字幕| 国产wwwxxx| 一级片免费在线观看| 澳门精品久久国产| 福利电影一区二区三区| 日韩一区二区视频| 97se国产在线视频| 中文字幕一区二区三区人妻在线视频 | 91免费国产在线| 日韩av影片在线观看| 91精品国产高清久久久久久91裸体| 超碰av在线免费观看| 精品无码一区二区三区的天堂| 天天操天天擦| 亚洲日本中文| 国产成人aaa| 亚洲第一福利网站| 久久久久久久久久久一区 | 狠狠色狠狠色综合网| 国产成人免费| 国产剧情在线观看一区二区| 精品日韩在线一区| 久久影院理伦片| 国产第一页精品| 日日夜夜天堂| 成人激情视屏| 国产成人精品亚洲777人妖| 精品国产3级a| 亚欧精品在线| 国产精品成人网站| 俄罗斯xxxx性全过程| 白嫩白嫩国产精品| 国产午夜三级一区二区三| 中文字幕无线精品亚洲乱码一区 | 日本免费资源| 欧美成人家庭影院| 懂色av中文字幕一区二区三区| 亚洲国产日韩欧美在线图片| 午夜欧美性电影| 国产精品成人久久| 特黄特色大片免费视频大全| 你懂的一区二区三区| 国产欧美日韩在线| 欧美激情视频播放| 亚洲最大天堂网| 影音先锋男人资源站在线观看| 婷婷色在线播放| 久久精品国产一区二区三| 精品国产乱码久久久久久蜜臀| 日韩久久不卡| 亚洲婷婷综合网| 二区在线视频| 亚洲影视在线| 亚洲精品99久久久久| 国产高清不卡无码视频| 国产熟女精品视频| 超碰97国产精品人人cao| 国产精品一区在线观看乱码| 最近中文字幕mv在线一区二区三区四区 | 亚洲精品视频在线观看视频| 国产一线二线三线女| 亚洲中文字幕一区二区| jizzjizz亚洲| 美女视频黄免费的久久| 在线播放国产一区中文字幕剧情欧美 | 日韩精品一区二区三区免费视频| 久久免费美女视频| 7m第一福利500精品视频| av影片在线播放| 网站免费满18成年在线观看| 日本一区福利在线| 色综合色狠狠综合色| 蜜桃成人在线| 亚洲v欧美v另类v综合v日韩v| 亚洲GV成人无码久久精品| 色网站免费在线观看| 麻豆91精品视频| 精品国产拍在线观看| www.成年人| 免费吸乳羞羞网站视频| 精品国产一区探花在线观看| 欧美日本一区二区| 黄网站色视频免费观看| 亚洲免费视频网| 欧美日韩大片| 亚洲人一二三区| 国产富婆一区二区三区| 久久国产精品系列| 中文字幕在线观看网站| av一区二区三区在线| 国产成人涩涩涩视频在线观看 | 国精产品一区一区三区视频| 久久久成人影院| 国产美女撒尿一区二区| 一本久久精品一区二区| 亚洲欧美电影在线观看| 亚洲福利在线观看视频| 亚洲二区av| 一本大道综合伊人精品热热 | 日本精品va在线观看| av在线播放中文字幕| 日本又骚又刺激的视频在线观看| 午夜亚洲一区| 久久久精品国产亚洲| 老司机免费视频| 理论片在线观看理伦片| 日韩电影免费在线观看网站| 欧美日韩国产二区| 永久免费av无码网站性色av| av在线之家电影网站| 91免费看视频| 精品人伦一区二区三区| 国产成人麻豆免费观看| 日韩电影av| 亚洲国产欧美日韩另类综合| 午夜啪啪免费视频| 影音先锋国产在线资源| 第一会所亚洲原创| 国产午夜精品全部视频播放| 亚洲自拍偷拍一区二区| 国产youjizz在线| 久久久久久久精| 欧美xxxx黑人又粗又长精品| 韩国中文字幕hd久久精品| 久久这里只有精品一区二区| 精品精品国产高清a毛片牛牛 | jizzjizz日本护士视频| 国产日韩一区二区三区在线| 欧美美女18p| 久久久久亚洲av片无码下载蜜桃| www视频在线观看| 五月开心婷婷久久| 久久久999免费视频| 天天操天天射天天色| 捆绑调教美女网站视频一区| 国产在线观看精品| 国产日本精品视频| 欧美激情在线免费| 亚洲欧美制服第一页| 中国美女黄色一级片| 免费污视频在线| 欧美一级本道电影免费专区| 精品成人佐山爱一区二区| 91精品人妻一区二区三区蜜桃2| 天堂а√在线8种子蜜桃视频| 成人av电影免费观看| 麻豆av一区二区| 国产亚洲精品一区二区在线观看| 国色天香一区二区| 日本精品免费观看| 国产精品视频无码| 亚洲精华一区二区三区| 最近2019中文免费高清视频观看www99| 免费看的黄色网| 色8久久影院午夜场| 91精品国产综合久久久久久 | 免费看美剧网站| 国内精品自线一区二区三区视频| 国产福利不卡| 九九精品视频在线观看九九| 久久狠狠一本精品综合网| 成人午夜一级二级三级| 亚洲综合天堂网| 国产一级一区二区| 91九色极品视频| 热99精品视频| 精品一区二区在线看| 麻豆久久久9性大片| 尤物视频在线观看视频| 国产激情一区二区三区四区| 亚洲国产婷婷香蕉久久久久久99| 青春草在线观看视频| 国产黄人亚洲片| 亚洲国产一区二区精品视频| 97国产视频| 中文字幕在线观看不卡| 欧美成人精品欧美一级乱| 国内在线精品| 欧美视频13p| 亚洲欧美在线不卡| av亚洲一区二区三区| 精品无人区太爽高潮在线播放| 国产一级黄色av| 日韩精品丝袜美腿| 97欧美精品一区二区三区| 国产偷拍一区二区| 黄色成人在线网址| 国产精品一级久久久| 可以免费看黄色的网站| 久久久影视传媒| 密臀av一区二区三区| 91cn在线观看| 日韩电影中文字幕一区| 日韩熟女精品一区二区三区| 波多野结衣在线观看一区二区| 国产成人精品久久久| 欧美成人3dxxxx| 成年人国产精品| 男女啪啪网站视频| 久草在线视频网站| 日韩黄在线观看| 中文字幕人妻色偷偷久久| 国内精品亚洲| 日本在线播放一区| 中文字幕欧美一区二区| 欧美日韩在线第一页| 免费看的黄色录像| 偷拍亚洲色图| 成人精品在线观看| 先锋成人影音| 亚洲高清免费在线| 国产精品久久久久久成人| 免费看av成人| 444亚洲人体| 免费99热在线观看| 偷拍日韩校园综合在线| 手机在线中文字幕| 日韩欧美一区二区三区免费看| 成人xxxxx色| 最近中文字幕mv2018在线高清| 欧美日韩国产精品专区 | 特黄特黄的视频| 欧美综合一区二区| 久久久久久久极品内射| 亚洲精品电影| 亚洲免费在线精品一区| 米奇777四色精品人人爽| 日韩电影网在线| 亚洲乱码在线观看| 成人短视频下载|