ARM匯編程序設(shè)計(jì)之:匯編語言文件格式
表10.11列出了匯編語言中的邏輯操作符。邏輯操作符進(jìn)行兩個(gè)邏輯表達(dá)式之間的基本邏輯操作。操作的結(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é)處理器
ARM匯編器對ARM的寄存器和協(xié)處理器進(jìn)行了預(yù)定義(包括APCS對r0~r15寄存器的定義),所有的寄存器和協(xié)處理器名都是大小寫敏感的。
1.預(yù)定義寄存器名
下面列出了被ARM匯編器預(yù)定義的寄存器名。
·r0~r15和R0~R15(15個(gè)通用寄存器)。
·a1~a4(參數(shù)、結(jié)果或臨時(shí)寄存器,同r0~r3)。
·v1~v8(變量寄存器,同r4~r11)。
·sb和SB(靜態(tài)基址寄存器,同r9)。
·sl和SL(棧頂指針寄存器,同r10)。
·fp和FP(幀指針寄存器,同r11)。
·ip和IP(過程調(diào)用中間臨時(shí)寄存器,同r12)。
·sp和SP(棧指針寄存器,同r13)。
·lr和LR(連接寄存器,同r14)。
·pc和PC(程序計(jì)數(shù)器,同r15)。
2.預(yù)定義程序狀態(tài)寄存器名
下面列出了ARM匯編器預(yù)定義的程序狀態(tài)寄存器的名稱。
·cpsr和CPSR(當(dāng)前程序狀態(tài)寄存器)。
·spsr和SPSR(保留程序狀態(tài)寄存器)。
3.預(yù)定義的浮點(diǎn)寄存器名
下面列出了ARM匯編器預(yù)定義的浮點(diǎn)運(yùn)算寄存器。
·s0~s31和S0~S31(VFP單精度浮點(diǎn)運(yùn)算寄存器)。
·d0~d15和D0~D15(VFP雙精度浮點(diǎn)運(yùn)算寄存器)。
注意 | 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名稱。默認(rèn)為ARM7TDMI。如果在編譯命令行中使用“-CPU”選項(xiàng)確定CPU類型,則該值為“GenericARM”。
·{ENDIAN}:如果編譯器在大端模式下,其值為“big”;如果在小端模式下,其值為“little”。
·{FPIC}:默認(rèn)為{FALSE},如果設(shè)置了“/fpic”選項(xiàng),其值為{TRUE}。
·{FPU}:所選fpu協(xié)處理器的名字。默認(rèn)為“softVFP”。
·{INPUTFILE}:當(dāng)前源文件名。
·{INTER}:默認(rèn)為{FALSE},如果設(shè)置了“/inter”選項(xiàng),其值為{TRUE}。
·{LINENUM}:目前源文件行號。
·{NOSWST}:默認(rèn)為{FALSE},如果設(shè)置了“/noswst”選項(xiàng),其值為{TRUE}。
·{OPT}:保存當(dāng)前設(shè)置的列表選項(xiàng)。偽操作OPT用來保存當(dāng)前列表選項(xiàng),改變選項(xiàng)值,或恢復(fù)原始值。
·{PC}或“.”:當(dāng)前程序地址值。
·{PCSTOREOFFSET}:指令STRpc,[...]和STMRb,{...,pc}與存儲(chǔ)的PC值之間的偏移量。
·{ROPI}:默認(rèn)為{FALSE},如果設(shè)置了“/ropi”選項(xiàng),其值為{TRUE}。
·{RWPI}:默認(rèn)為{FALSE},如果設(shè)置了“/rwpi”選項(xiàng),其值為{TRUE}。
·{SWST}:默認(rèn)為{FALSE},如果設(shè)置了“/swst”選項(xiàng),其值為{TRUE}。
·{VAR}或@:存儲(chǔ)區(qū)位置寄存器的當(dāng)前值。
評論