在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計應(yīng)用 > ARM匯編偽指令詳解(3)

            ARM匯編偽指令詳解(3)

            作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏

            匯編控制( Assembly Control )偽指令
            匯編控制偽指令用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽指令包括以下幾條:
            — IF 、 ELSE 、 ENDIF
            — WHILE 、 WEND
            — MACRO 、 MEND
            — MEXIT

            本文引用地址:http://www.biyoush.com/article/201611/319392.htm


            1、 IF、ELSE、ENDIF
            語法格式:
            IF 邏輯表達式
            指令序列 1
            ELSE
            指令序列 2
            ENDIF
            IF 、 ELSE 、 ENDIF 偽指令能根據(jù)條件的成立與否決定是否執(zhí)行某個指令序列。當(dāng) IF 后面的邏輯表

            達式為真,則執(zhí)行指令序列 1 ,否則執(zhí)行指令序列 2 。其中, ELSE 及指令序列 2 可以沒有,此時,當(dāng)

            IF 后面的邏輯表達式為真,則執(zhí)行指令序列 1 ,否則繼續(xù)執(zhí)行后面的指令。
            IF 、 ELSE 、 ENDIF 偽指令可以嵌套使用。
            使用示例:
            GBLL Test ;聲明一個全局的邏輯變量,變量名為 Test……
            IF Test = TRUE
            指令序列 1
            ELSE
            指令序列 2
            ENDIF

            2、 WHILE、WEND
            語法格式:
            WHILE 邏輯表達式
            指令序列
            WEND
            WHILE 、 WEND 偽指令能根據(jù)條件的成立與否決定是否循環(huán)執(zhí)行某個指令序列。當(dāng) WHILE 后面的邏輯

            表達式為真,則執(zhí)行指令序列,該指令序列執(zhí)行完畢后,再判斷邏輯表達式的值,若為真則繼續(xù)執(zhí)行,一直

            到邏輯表達式的值為假。
            WHILE 、 WEND 偽指令可以嵌套使用。
            使用示例:
            GBLA Counter ;聲明一個全局的數(shù)學(xué)變量,變量名為 Counter
            Counter SETA 3 ;由變量Counter 控制循環(huán)次數(shù)
            ……
            WHILE Counter < 10
            指令序列
            WEND

            3、 MACRO、MEND
            語法格式:
            $ 標號 宏名 $ 參數(shù) 1 , $ 參數(shù) 2 ,……
            指令序列
            MEND
            MACRO 、 MEND 偽指令可以將一段代碼定義為一個整體,稱為宏指令,然后就可以在程序中通過宏指令

            多次調(diào)用該段代碼。其中, $ 標號在宏指令被展開時,標號會被替換為用戶定義的符號,宏指令可以使用

            一個或多個參數(shù),當(dāng)宏指令被展開時,這些參數(shù)被相應(yīng)的值替換。
            宏指令的使用方式和功能與子程序有些相似,子程序可以提供模塊化的程序設(shè)計、節(jié)省存儲空間并提高

            運行速度。但在使用子程序結(jié)構(gòu)時需要保護現(xiàn)場,從而增加了系統(tǒng)的開銷,因此,在代碼較短且需要傳遞的

            參數(shù)較多時,可以使用宏指令代替子程序。
            包含在 MACRO 和 MEND 之間的指令序列稱為宏定義體,在宏定義體的第一行應(yīng)聲明宏的原型(包含宏

            名、所需的參數(shù)),然后就可以在匯編程序中通過宏名來調(diào)用該指令序列。在源程序被編譯時,匯編器將宏

            調(diào)用展開,用宏定義中的指令序列代替程序中的宏調(diào)用,并將實際參數(shù)的值傳遞給宏定義中的形式參數(shù)。


            MACRO 、 MEND 偽指令可以嵌套使用。

            4、 MEXIT
            語法格式:
            MEXIT
            MEXIT 用于從宏定義中跳轉(zhuǎn)出去。

            其他常用的偽指令
            還有一些其他的偽指令,在匯編程序中經(jīng)常會被使用,包括以下幾條:
            — AREA
            — ALIGN
            — CODE16 、 CODE32
            — ENTRY
            — END
            — EQU
            — EXPORT (或 GLOBAL )
            — IMPORT
            — EXTERN
            — GET (或 INCLUDE )
            — INCBIN
            — RN
            — ROUT


            1、 AREA
            語法格式:
            AREA 段名屬性 1 ,屬性 2 ,……
            AREA 偽指令用于定義一個代碼段或數(shù)據(jù)段。其中,段名若以數(shù)字開頭,則該段名需用 “ | ” 括起來

            ,如 |1_test| 。
            屬性字段表示該代碼段(或數(shù)據(jù)段)的相關(guān)屬性,多個屬性用逗號分隔。常用的屬性如下:
            — CODE 屬性:用于定義代碼段,默認為 READONLY 。
            — DATA 屬性:用于定義數(shù)據(jù)段,默認為 READWRITE 。
            — READONLY 屬性:指定本段為只讀,代碼段默認為 READONLY 。
            — READWRITE 屬性:指定本段為可讀可寫,數(shù)據(jù)段的默認屬性為 READWRITE 。
            — ALIGN 屬性:使用方式為 ALIGN 表達式。在默認時, ELF (可執(zhí)行連接文件)的代碼段和數(shù)據(jù)段

            是按字對齊的,表達式的取值范圍為 0 ~ 31 ,相應(yīng)的對齊方式為 2 表達式次方。
            — COMMON 屬性:該屬性定義一個通用的段,不包含任何的用戶代碼和數(shù)據(jù)。各源文件中同名的

            COMMON 段共享同一段存儲單元。
            一個匯編語言程序至少要包含一個段,當(dāng)程序太長時,也可以將程序分為多個代碼段和數(shù)據(jù)段。
            使用示例:
            AREA Init , CODE , READONLY
            該偽指令定義了一個代碼段,段名為 Init ,屬性為只讀

            2、 ALIGN
            語法格式:
            ALIGN { 表達式 { ,偏移量 }}
            ALIGN 偽指令可通過添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對其方式 | 。其中,表達式的值用

            于指定對齊方式,可能的取值為 2 的冪,如 1 、 2 、 4 、 8 、 16 等。若未指定表達式,則將當(dāng)前位

            置對齊到下一個字的位置。偏移量也為一個數(shù)字表達式,若使用該字段,則當(dāng)前位置的對齊方式為: 2 的

            表達式次冪+偏移量。
            使用示例:
            AREA Init , CODE , READONLY , ALIEN = 3 ;指定后面的指令為 8 字節(jié)對齊。
            指令序列
            END

            3、 CODE16、CODE32
            語法格式:
            CODE16 (或 CODE32 )
            CODE16 偽指令通知編譯器,其后的指令序列為 16 位的 Thumb 指令。
            CODE32 偽指令通知編譯器,其后的指令序列為 32 位的 ARM 指令。
            若在匯編源程序中同時包含 ARM 指令和 Thumb 指令時,可用 CODE16 偽指令通知編譯器其后的指令序

            列為 16 位的 Thumb 指令, CODE32 偽指令通知編譯器其后的指令序列為 32 位的 ARM 指令。因此,在使

            用 ARM 指令和 Thumb 指令混合編程的代碼里,可用這兩條偽指令進行切換,但注意他們只通知編譯器其后

            指令的類型,并不能對處理器進行狀態(tài)的切換。
            使用示例:
            AREA Init , CODE , READONLY
            ……
            CODE32 ;通知編譯器其后的指令為 32 位的 ARM 指令
            LDR R0 ,= NEXT + 1 ;將跳轉(zhuǎn)地址放入寄存器 R0
            BX R0 ;程序跳轉(zhuǎn)到新的位置執(zhí)行,并將處理器切換到 Thumb 工作狀態(tài)
            ……
            CODE16 ;通知編譯器其后的指令為 16 位的 Thumb 指令
            NEXT LDR R3,=0x3FF
            ……
            END ;程序結(jié)束

            4、 ENTRY
            語法格式:
            ENTRY
            ENTRY 偽指令用于指定匯編程序的入口點。在一個完整的匯編程序中至少要有一個 ENTRY (也可以有

            多個,當(dāng)有多個 ENTRY 時,程序的真正入口點由鏈接器指定),但在一個源文件里最多只能有一個 ENTRY

            (可以沒有)。
            使用示例:
            AREA Init , CODE , READONLY
            ENTRY ;指定應(yīng)用程序的入口點
            ……

            5、 END
            語法格式:
            END
            END 偽指令用于通知編譯器已經(jīng)到了源程序的結(jié)尾。
            使用示例:
            AREA Init , CODE , READONLY
            ……
            END ;指定應(yīng)用程序的結(jié)尾

            6、 EQU
            語法格式:
            名稱 EQU 表達式 { ,類型 }
            EQU 偽指令用于為程序中的常量、標號等定義一個等效的字符名稱,類似于 C 語言中的# define 。


            其中 EQU 可用 “ * ” 代替。
            名稱為 EQU 偽指令定義的字符名稱,當(dāng)表達式為 32 位的常量時,可以指定表達式的數(shù)據(jù)類型,可以

            有以下三種類型:
            CODE16 、 CODE32 和 DATA
            使用示例:
            Test EQU 50 ;定義標號 Test 的值為 50
            Addr EQU 0x55 , CODE32 ;定義 Addr 的值為 0x55 ,且該處為 32 位的 ARM 指令。

            7、 EXPORT(或GLOBAL)
            語法格式:
            EXPORT 標號 {[WEAK]}
            EXPORT 偽指令用于在程序中聲明一個全局的標號,該標號可在其他的文件中引用。 EXPORT可用

            GLOBAL 代替。標號在程序中區(qū)分大小寫, [WEAK] 選項聲明其他的同名標號優(yōu)先于該標號被引用。
            使用示例:
            AREA Init , CODE , READONLY
            EXPORT Stest ;聲明一個可全局引用的標號Stest……
            END

            8、 IMPORT
            語法格式:
            IMPORT 標號 {[WEAK]}
            IMPORT 偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當(dāng)前源文件中引用,而且

            無論當(dāng)前源文件是否引用該標號,該標號均會被加入到當(dāng)前源文件的符號表中。
            標號在程序中區(qū)分大小寫, [WEAK] 選項表示當(dāng)所有的源文件都沒有定義這樣一個標號時,編譯器也不

            給出錯誤信息,在多數(shù)情況下將該標號置為 0 ,若該標號為 B 或 BL 指令引用,則將 B 或 BL指令置為

            NOP 操作。
            使用示例:
            AREA Init , CODE , READONLY
            IMPORT Main ;通知編譯器當(dāng)前文件要引用標號Main,但Main 在其他源文件中定義……
            END

            9、 EXTERN
            語法格式:
            EXTERN 標號 {[WEAK]}
            EXTERN 偽指令用于通知編譯器要使用的標號在其他的源文件中定義,但要在當(dāng)前源文件中引用,如果

            當(dāng)前源文件實際并未引用該標號,該標號就不會被加入到當(dāng)前源文件的符號表中。標號在程序中區(qū)分大小寫

            , [WEAK] 選項表示當(dāng)所有的源文件都沒有定義這樣一個標號時,編譯器也不給出錯誤信息,在多數(shù)情況下

            將該標號置為 0 ,若該標號為 B 或 BL 指令引用,則將 B 或 BL指令置為 NOP 操作。
            使用示例:
            AREA Init , CODE , READONLY
            EXTERN Main ;通知編譯器當(dāng)前文件要引用標號Main,但Main 在其他源文件中定義……
            END

            10、 GET(或INCLUDE)
            語法格式:
            GET 文件名
            GET 偽指令用于將一個源文件包含到當(dāng)前的源文件中,并將被包含的源文件在當(dāng)前位置進行匯編處理。

            可以使用 INCLUDE 代替 GET 。
            匯編程序中常用的方法是在某源文件中定義一些宏指令,用 EQU 定義常量的符號名稱,用 MAP和

            FIELD 定義結(jié)構(gòu)化的數(shù)據(jù)類型,然后用 GET 偽指令將這個源文件包含到其他的源文件中。使用方法與 C 語

            言中的 “ include ” 相似。
            GET 偽指令只能用于包含源文件,包含目標文件需要使用 INCBIN 偽指令
            使用示例:
            AREA Init , CODE , READONLY
            GET a1.s ;通知編譯器當(dāng)前源文件包含源文件a1.s
            GE T C:a2.s ;通知編譯器當(dāng)前源文件包含源文件C: a2.s ……
            END

            11、 INCBIN
            語法格式:
            INCBIN 文件名
            INCBIN 偽指令用于將一個目標文件或數(shù)據(jù)文件包含到當(dāng)前的源文件中,被包含的文件不作任何變動的

            存放在當(dāng)前文件中,編譯器從其后開始繼續(xù)處理。
            使用示例:
            AREA Init , CODE , READONLY
            INCBIN a1.dat ;通知編譯器當(dāng)前源文件包含文件a1.dat
            INCBIN C:a2.txt ;通知編譯器當(dāng)前源文件包含文件C:a2.txt……
            END

            12、 RN
            語法格式:
            名稱 RN 表達式
            RN 偽指令用于給一個寄存器定義一個別名。采用這種方式可以方便程序員記憶該寄存器的功能。其中

            ,名稱為給寄存器定義的別名,表達式為寄存器的編碼。
            使用示例:
            Temp RN R0 ;將R0 定義一個別名Temp

            13、 ROUT
            語法格式:
            { 名稱 } ROUT
            ROUT 偽指令用于給一個局部變量定義作用范圍。在程序中未使用該偽指令時,局部變量的作用范圍為

            所在的 AREA ,而使用 ROUT 后,局部變量的作為范圍為當(dāng)前 ROUT 和下一個 ROUT 之間。




            關(guān)鍵詞: ARM匯編偽指

            評論


            技術(shù)專區(qū)

            關(guān)閉