新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM匯編程序設(shè)計之:匯編語言文件格式

        ARM匯編程序設(shè)計之:匯編語言文件格式

        作者: 時間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

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

        表10.11列出了匯編語言中的邏輯操作符。邏輯操作符進行兩個邏輯表達式之間的基本邏輯操作。操作的結(jié)果為{FALSE}或{TURE}。

        表10.11 邏輯操作符

        操作符

        使用

        說明

        :LAND:

        A:LAND:B

        A和B做邏輯與

        續(xù)表

        操作符

        使用

        說明

        :LEOR:

        A:LEOR:B

        A和B做邏輯異或

        :LOR:

        A:LOR:B

        A和B做邏輯或

        10.3.4匯編語言預(yù)定義寄存器和協(xié)處理器

        匯編器對的寄存器和協(xié)處理器進行了預(yù)定義(包括APCS對r0~r15寄存器的定義),所有的寄存器和協(xié)處理器名都是大小寫敏感的。

        1.預(yù)定義寄存器名

        下面列出了被匯編器預(yù)定義的寄存器名。

        ·r0~r15和R0~R15(15個通用寄存器)。

        ·a1~a4(參數(shù)、結(jié)果或臨時寄存器,同r0~r3)。

        ·v1~v8(變量寄存器,同r4~r11)。

        ·sb和SB(靜態(tài)基址寄存器,同r9)。

        ·sl和SL(棧頂指針寄存器,同r10)。

        ·fp和FP(幀指針寄存器,同r11)。

        ·ip和IP(過程調(diào)用中間臨時寄存器,同r12)。

        ·sp和SP(棧指針寄存器,同r13)。

        ·lr和LR(連接寄存器,同r14)。

        ·pc和PC(程序計數(shù)器,同r15)。

        2.預(yù)定義程序狀態(tài)寄存器名

        下面列出了ARM匯編器預(yù)定義的程序狀態(tài)寄存器的名稱。

        ·cpsr和CPSR(當(dāng)前程序狀態(tài)寄存器)。

        ·spsr和SPSR(保留程序狀態(tài)寄存器)。

        3.預(yù)定義的浮點寄存器名

        下面列出了ARM匯編器預(yù)定義的浮點運算寄存器。

        ·s0~s31和S0~S31(VFP單精度浮點運算寄存器)。

        ·d0~d15和D0~D15(VFP雙精度浮點運算寄存器)。

        注意

        FPA的寄存器f0~f7和F0~F7已不再使用。

        4.預(yù)定義的協(xié)處理器名

        下面列出了ARM匯編器預(yù)定義的協(xié)處理器名和協(xié)處理器寄存器名。

        ·p0~p15(預(yù)定義的協(xié)處理器0~15的名稱)。

        ·c0~c15(預(yù)定義的協(xié)處理器寄存器0~15的名稱)。

        10.3.5匯編語言內(nèi)置變量

        ARM匯編器中定義了一些內(nèi)置變量,這些內(nèi)置變量不能使用偽指令設(shè)置(如,SETA、SETL、SETS等),一般用于程序的條件匯編控制。

        下面的例子顯示了如何使用內(nèi)置變量控制程序的執(zhí)行流程。

        If{CONFIG}=16;若為Thumb代碼則執(zhí)行If后的語句

        ;codes

        else

        ;codes

        endif

        b;程序結(jié)束

        下面介紹由ARM匯編器預(yù)定義的內(nèi)置變量。

        ·{ARCHITECTURE}:選定的ARM體系結(jié)構(gòu)的值,如3,3M,4,4T。

        ·{AREANAME}:當(dāng)前段名。

        ·{ARMASM_VERSION}:ARM編譯器ARMASM的變量號。

        ·|ads$version|:ARM編譯器ARMASM的變量號,同{ARMASM_VERSION}。

        ·{CODESIZE}:如果當(dāng)前指令為ARM指令,該內(nèi)置變量取值為32,如果當(dāng)前指令為Thumb指令,該內(nèi)置變量取值為16,同{CONFIG}。

        ·{COMMANDLINE}:當(dāng)前命令行內(nèi)容。

        ·{CONFIG}:如果當(dāng)前指令為ARM指令,該內(nèi)置變量取值為32,如果當(dāng)前指令為Thumb指令,該內(nèi)置變量取值為16,同{CODESIZE}。

        ·{CPU}:所使用的CPU名稱。默認為ARM7TDMI。如果在編譯命令行中使用“-CPU”選項確定CPU類型,則該值為“GenericARM”。

        ·{ENDIAN}:如果編譯器在大端模式下,其值為“big”;如果在小端模式下,其值為“little”。

        ·{FPIC}:默認為{FALSE},如果設(shè)置了“/fpic”選項,其值為{TRUE}。

        ·{FPU}:所選fpu協(xié)處理器的名字。默認為“softVFP”。

        ·{INPUTFILE}:當(dāng)前源文件名。

        ·{INTER}:默認為{FALSE},如果設(shè)置了“/inter”選項,其值為{TRUE}。

        ·{LINENUM}:目前源文件行號。

        ·{NOSWST}:默認為{FALSE},如果設(shè)置了“/noswst”選項,其值為{TRUE}。

        ·{OPT}:保存當(dāng)前設(shè)置的列表選項。偽操作OPT用來保存當(dāng)前列表選項,改變選項值,或恢復(fù)原始值。

        ·{PC}或“.”:當(dāng)前程序地址值。

        ·{PCSTOREOFFSET}:指令STRpc,[...]和STMRb,{...,pc}與存儲的PC值之間的偏移量。

        ·{ROPI}:默認為{FALSE},如果設(shè)置了“/ropi”選項,其值為{TRUE}。

        ·{RWPI}:默認為{FALSE},如果設(shè)置了“/rwpi”選項,其值為{TRUE}。

        ·{SWST}:默認為{FALSE},如果設(shè)置了“/swst”選項,其值為{TRUE}。

        ·{VAR}或@:存儲區(qū)位置寄存器的當(dāng)前值。



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 射洪县| 翁牛特旗| 九台市| 鄂伦春自治旗| 黔西| 卢氏县| 青河县| 儋州市| 西乌珠穆沁旗| 张家口市| 盐城市| 星子县| 五莲县| 荣成市| 旌德县| 青州市| 青岛市| 禹城市| 当涂县| 杭锦后旗| 托克逊县| 宜宾县| 肥城市| 南安市| 图木舒克市| 德昌县| 漳州市| 留坝县| 承德县| 龙州县| 科技| 汝阳县| 惠水县| 曲周县| 阳东县| 清涧县| 新竹市| 神池县| 马鞍山市| 宁都县| 安吉县|