在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > GNU ARM匯編入門

            GNU ARM匯編入門

            作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
            任何匯編行都是如下結構:
            [
            [<標簽>:] [<指令>} @ 注釋
            GNU ARM 匯編中,任何以冒號結尾的都被認為是一個標簽,而不一定非要在一行的開始。下面是一個簡單的例子,這段匯編程序定義了一個"add"的函數(shù),該函數(shù)返回兩個參數(shù)的和:
            .section .text, “x”
            .global add @ give the symbol add external linkage
            add:
            ADD r0, r0, r1 @ add input arguments
            MOV pc, lr @ return from subroutine
            @ end of program
            GNU ARM匯編偽指令
            下面列出了一些GNU ARM匯編偽指令,并給出了相應說明。
            .ascii “” 在匯編中定義字符串并為之分配存儲空間(與armasm中的DCB功能類似)。
            .asciz “” 和.ascii類似, 但不分配存儲空間。
            .balign {, {,} }
            以某種排列方式在內(nèi)存中填充數(shù)值。(該指令與armasm中的ALIGN類似)。
            power_of_2表示排列方式,其值可為4,8,16或32,單位是byte;
            fill_value是要填充的值;
            max_padding最大的填充界限,請求填充的bytes數(shù)超過該值,將被忽略。
            .byte {,} … 定義一個或多個Byte,并為之分配空間(與armasm的DCB類似)。
            .code 設定指令寬度,16表示Thumb,32表示ARM assembly
            (和armasm中的CODE16,CODE32相同)。
            .if
            .else
            .endif
            預編譯宏(與armasm中的IF ELSE ENDIF相同)。
            .end 匯編文件結束標志,常常省略不用。
            .endm 宏結束標志。
            .exitm 宏跳出。
            .macro {} … {,}
            定義一段名為name的宏,arg_xxx為參數(shù)。
            必須有對應的.endm結尾。
            可以使用.exitm從中間跳出宏。(與armasm中的MACRO, MEND, MEXIT相同)。
            在使用宏參數(shù)時必須這樣使用:“”。
            例如:
            [CODE].macro SHIFTLEFT a, b
            .if b < 0
            MOV a, a, ASR #-b
            .exitm
            .endif
            MOV a, a, LSL #b
            .endm
            .rept 循環(huán)執(zhí)行.endr前的代碼段number_of_times次。
            (與armasm中的WEN相似)
            .irp {,} {,} …
            循環(huán)執(zhí)行.endr前的代碼段,param依次取后面給出的值。
            在循環(huán)執(zhí)行的代碼段中必須以“ ”表示參數(shù)。
            .endr 結束循環(huán)(與armasm中的WEND相似).
            .equ , 為一個標號賦值,類似C中的#define。(與armasm中的EQU相同)
            .err 編譯錯誤報告,將引起編譯的終止。
            .global 全局聲明標志,這樣聲明的標號將可以被外部使用。(與armasm中的EXPORT相同)。
            .hword {,} …
            插入一個16-bit的數(shù)據(jù)隊列。(與armasm中的DCW相同)
            .ifdef 如果 被定義,該快代碼將被編譯。以 .endif結束。
            .ifndef 如果 未被定義,該快代碼將被編譯。以 .endif結束。
            .include “” 包含文件。(與armasm中的INCLUDE 或者C中的#i nclude一樣)
            .req
            定義一個寄存器,.req的左邊是定義的寄存器名,右邊是使用的真正使用的寄存器。
            (與armasm中的RN類似)
            例如:acc .req r0
            [CODE].section {,””}
            開始一個新的代碼或數(shù)據(jù)段。.text, 代碼段;.data, 初始化數(shù)據(jù)段;.bss, 未初始化數(shù)據(jù)段。
            這些段都有缺省的標志(flags),聯(lián)接器可以識別這些標志。(與armasm中的AREA相同)。
            下面是ELF格式允許的段標志
            <標志> 含義
            a 允許段
            w 可寫段
            x 執(zhí)行段
            .set , 變量賦值。(與armasm中的SETA相同)
            .space {,}
            分配number_of_bytes字節(jié)的數(shù)據(jù)空間,并填充其值為fill_byte,若未指定該值,缺省填充0。
            (與armasm中的SPACE功能相同)
            .word {,} …
            插入一個32-bit的數(shù)據(jù)隊列。(與armasm中的DCD功能相同)
            GNU ARM匯編特殊字符和語法
            代碼行中的注釋符號: ‘@’
            整行注釋符號: ‘#’
            語句分離符號: ‘;’
            直接操作數(shù)前綴: ‘#’ 或 ‘$’
            .arm 以arm格式編譯,同code32
            .thumb 以thumb格式編譯,同code16
            .code16 以thumb格式編譯
            .code32 以arm格式編譯
            參考資料:
            文件: assembler-intro.pdf
            文件: GNU-ARM-Assy-Quick-Ref.pdf


            關鍵詞: GNUARM匯編入

            評論


            技術專區(qū)

            關閉