新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM Cortex-M3 學習筆記(4-1)

        ARM Cortex-M3 學習筆記(4-1)

        作者: 時間:2016-11-20 來源:網絡 收藏
        最近在學ARM Cortex-M3,找了本號稱很經典的書“An Definitive Guide to The ARM Cortex-M3”在看。這個系列學習筆記其實就是在學習這本書的過程中做的讀書筆記。

        本文引用地址:http://www.104case.com/article/201611/318829.htm

        第四章 指令系統

        基本語法

        這里介紹的匯編語法是ARM匯編器的語法,如果采用其他的匯編器,比如gcc中的as,語法是不同的。

        匯編指令的典型模式如下所示:

        Label

        opcode operand1, operand2, … ;comment

        標號是可選的,如果有,它必須頂格寫,標號后面不需要“:”。

        操作碼是指令的助記符,它的前面必須有至少一個空白符。

        立即數必須以“#”開頭,16進制數字表示與C語言的方法相同,比如:

        MOV R0, #0x12 ; R0 ? 0x12

        使用EQU指示字來定義常數:

        NVIC_IRQ_SETEN0 EQU 0xE000E100 ; 注意:常數定義必須頂格寫

        NVIC_IRQ0_ENABLE EQU 0x1

        LDR R0, =NVIC_IRQ_SETEN0 ;在這里的LDR是個偽指令,它會被匯編器轉換成

        ;一條“相對PC的加載指令”

        MOV R1, #NVIC_IRQ0_ENABLE ; 把立即數傳送到R1中

        DCI 可以在匯編代碼中插入1 個half word (2個字節),通常用這條指令插入匯編器不支持的指令。

        DCB來定義一串字節常數

        DCD來定義一串32位整數

        比如下面的例子:

        LDR R3, =MY_NUMBER ; R3= MY_NUMBER

        LDR R4, [R3] ; R4= *R3

        LDR R0, =HELLO_TEXT ; R0= HELLO_TEXT

        BL PrintText ; 呼叫PrintText以顯示字符串,R0傳遞參數

        MY_NUMBER

        DCD 0x12345678

        HELLO_TEXT

        DCB ”Hellon”,0

        指令后綴

        后綴

        含義

        S

        要求更新APSR中的相關標志,例如:

        ADDS R0, R1 ; 根據加法的結果更新APSR中的標志

        EQ,NE,LT,GT等

        有條件地執行指令。

        EQ=Euqal, NE= Not Equal, LT= Less Than, GT= Greater Than,例如:

        BEQ

        統一匯編語言(UAL)

        與Thumb-2指令集同時出現的還有新的匯編語法(統一匯編語言)。利用統一匯編語言的語法,我們可以方便的選擇當前的語句是被編譯為16位的指令還是編譯為32位的指令。

        ADD R0, R1 ; 使用傳統的Thumb語法

        ADD R0, R0, R1 ; 引入UAL后允許的等效寫法(R0=R0+R1)

        如果使用傳統的Thumb語法,有些指令會默認地更新APSR。

        如果使用UAL語法,則必須指定S后綴才會更新。例如:

        AND R0, R1 ;傳統的Thumb語法

        ANDS R0, R0, R1 ;等值的UAL語法(必須有S后綴)

        .W(Wide)后綴指定32位指令,.N后綴制定采用16位指令。如果沒有給出后綴,匯編器會先試著用16位指令以給代碼瘦身,如果不行再使用32位指令。例如:

        ADDS R0, #1 ;匯編器將為了節省空間而使用16位指令

        ADDS.N R0, #1 ;指定使用16位指令(N=Narrow)

        ADDS.W R0, #1 ;指定使用32位指令(W=Wide)

        32位的Thumb-2指令可以half word 對齊。不用word對齊使得代碼中混用16位指令和32位指令變得很容易。

        了。



        關鍵詞: ARMCortex-M

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿图什市| 南通市| 饶阳县| 大连市| 长治县| 钟祥市| 乌兰县| 林州市| 马山县| 博乐市| 新乡市| 来凤县| 尼玛县| 潼关县| 南华县| 和政县| 天全县| 临漳县| 马尔康县| 莱州市| 嘉祥县| 津市市| 大宁县| 甘德县| 修文县| 蕉岭县| 成安县| 台东县| 石首市| 汾阳市| 建始县| 三河市| 汝南县| 兴文县| 和田市| 大庆市| 中牟县| 始兴县| 清镇市| 洛扎县| 越西县|