<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM指令中特殊符號意義

ARM指令中特殊符號意義

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
特殊符號 對應指令 含義
= DCB 分配一片連續的字節存儲單元并用指定的數據初始化
& DCD 分配一片連續的字存儲單元并用指定的數據初始化
% SPACE 分配一片連續的存儲單元
^ MAP 定義一個(gè)結構化內存表的首地址
# FILED 定義一個(gè)結構化內存表的數據域(經(jīng)常和MAP一使
用,一個(gè)定義起始地址,一個(gè)定義長(cháng)度)
* EQU 為程序中的常量、標號等定義一個(gè)等效的字符名稱(chēng),
! 地址更新,結果寫(xiě)回到Rn中,Rn不允許是R15
[ | ] 相當于IF ELSE ENDIF
其他:
LDM中{∧}為可選后綴,當指令為L(cháng)DM且寄存器列表中包含R15,選用該后綴時(shí)表示:除了正常的數據傳送之外,還將SPSR復制到CPSR。同時(shí),該后綴還表示傳入或傳出的是用戶(hù)模式下的寄存器,而不是當前模式下的寄存器。
TST R1,#%1 // 用于測試在寄存器R1中是否設置了最低位(%表示二進(jìn)制數
n

$:如果在串變量前有一個(gè)$則在匯編時(shí)編譯器將用該串變量的數值取代該串變量,如:

本文引用地址:http://dyxdggzs.com/article/201611/318732.htm
GBLS STR1
GBLS STR2
STR1 SETS “pen.”
STR2 SETS “This is a $STR1"
編譯后的結果是STR2的值為T(mén)his is a pen.
如果$后是數字變量(與串變量區分),在匯編時(shí)編譯器將該數字變量的數值轉換成十六進(jìn)制的串,然后用該十六進(jìn)制的串取代$后的數字變量。
如果$后是邏輯變量,在匯編時(shí)編譯器將該邏輯變量替換成它的取值(T或者F)。
如果程序中需要$,則用$$來(lái)表示,編譯器將不進(jìn)行變量替換。
注意:在兩個(gè)豎線(xiàn)“|”之間的$并不表示進(jìn)行變量替換,但如果“|”是在雙引號內,則將進(jìn)行變量替換。
B .//表示程序進(jìn)入死循環(huán)。.為location counter,可在源文件中指示當前地址。該符號可以被引用或賦值。
ARM匯編程序中的符號
在A(yíng)RM匯編語(yǔ)言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時(shí),又稱(chēng)為標號(lable)。當標號以數字開(kāi)頭時(shí),其作用范圍為當前段(當前段沒(méi)有使用ROUT偽操作時(shí)),這種標號又稱(chēng)為局部標號(lacal lable)。符號變量包括變量、數字常量、標號和局部標號。
1、變量
在程序中,變量的值在匯編處理過(guò)程中可能會(huì )發(fā)生改變。在A(yíng)RM匯編中變量有數字變量、邏輯變量和串變量3種類(lèi)型。變量的類(lèi)型在程序中是不可以改變的。
數字變量的取值范圍為數字常量和數字表達式所能表示的數值;邏輯變量的取值范圍為{true}和{flash};串變量的取值范圍為串表達式可以表達的范圍。
在A(yíng)RM匯編語(yǔ)言中,使用GBLA、GBLL及GBLS聲明全局變量;使用LCLA、LCLL及LCLS聲明局部變量;使用SETA、SETL及SETS為這些變量賦值。
2、數字常量
數字常量是32位的整數。在A(yíng)RM匯編語(yǔ)言中,使用EQU來(lái)定義數字常量。數字常量一經(jīng)定義就不可修改。 進(jìn)行大小比較時(shí),認為數字常量都是無(wú)符號數。
3、匯編時(shí)變量的替換
如果在串變量前有一個(gè)$字符,在匯編時(shí)編譯器將用改串的數值來(lái)取代該串變量。
對于數字變量來(lái)說(shuō),如果該變量前面有一個(gè)$字符,在匯編時(shí)編譯器將該數字變量的數值轉換成十六進(jìn)制的串,然后用該十六進(jìn)制的串取代$字符后的數字變量。
對于邏輯變量來(lái)說(shuō),如果該邏輯變量前面有一個(gè)$字符,在匯編時(shí)編譯器將該邏輯變量替換成它的取值(T或者F)
如果程序中需要字符$,則用$$來(lái)表示,編譯器將不進(jìn)行變量替換,而是將$$當作$.
通常情況下,包含在兩個(gè)豎線(xiàn)(|)之間的$并不表示進(jìn)行變量替換。但是如果豎線(xiàn)(|)是在雙引號內,則將進(jìn)行變量替換。
使用“.”來(lái)表示變量名稱(chēng)的結束。
4、標號
標號是表示程序中的指令或者數據地址的符號。根據標號的生成方式可分為3種:
基于PC的標號?;赑C的標號是位于目標指令前或者程序中數據定義偽操作前的標號。這種標號在匯編時(shí)將被處理成PC值加上(或減去)一個(gè)數字常量。常用于表示跳轉指令的目標地址,或者代碼段中所嵌入的少量數據。
基于寄存器的標號?;诩拇嫫鞯臉颂柍S肕AP和FIELD未定義操作,也可以該用EQU偽定義。這種標號在匯編時(shí)將被處理成寄存器的值加上(或減去)一個(gè)數據常量。常用于訪(fǎng)問(wèn)數據段中的數據。
絕對地址。絕對地址是一個(gè)32位數據。它可以尋址2^32 -1,即直接可以尋址整個(gè)內存空間。
5、局部標號
局部標號主要在局部范圍內使用。它由兩部組成:開(kāi)頭是一個(gè)0-99直接的數字,后面緊接一個(gè)通常表示該局部變量作用范圍的符號。
局部變量的作用范圍通常為當前段,也可以用偽操作ROUT來(lái)定義局部變量的作用范圍。
局部變量定義的語(yǔ)法格式如下:
N{routname},其中,N為0~99之間的數字。routname為符號,通常為該變量作用范圍的名稱(chēng)(用ROUT偽操作定義的)。
局部變量引用的語(yǔ)法格式如下:
%{F|B}{A|T}N{routname}
其中,N為局部變量的數字號。
routname 為當前作用范圍的名稱(chēng)(用ROUT偽操作定義的)
%表示引用操作
F指示編譯器只向前搜索
B指示編譯器只向后搜索
A指示編譯器搜索宏的所有嵌套層次
T指示編譯器搜索宏的當前層次
如果F和B都沒(méi)有指定,編譯器先向前搜索,再向后搜索
如果A和T都沒(méi)有指定,編譯器搜索所有從當前層次到宏的最高層次,比當前層次低的層次不再搜索。
如果指定了routname,編譯器向前搜索最近的ROUT偽操作,若routname與該ROUT偽操作定義的名稱(chēng)不匹配,編譯器報告錯誤,匯編失敗。
ARM匯編語(yǔ)言中的表達式
表達式是由符號、數值、單目或多目操作符以及括號組成的。
1、字符串表達式
字符串表達式由字符串、字符串變量、操作符以及括號組成。字符串的最大長(cháng)度為512字節,最小長(cháng)度為0.下面介紹字符串表達式的組成元素。
字符串:由包含在雙引號內的一系列的字符組成。字符串的長(cháng)度受到ARM匯編語(yǔ)言語(yǔ)句長(cháng)度的限制。當在字符串中包含美元符號$或者引號"時(shí),用$$表示一個(gè)$,用""表示一個(gè)"。
字符串變量:用偽操作GBLS或者LCLS聲明,用SETS賦值。
操作符:
(1)LEN:返回字符串的長(cháng)度
:LEN:A
其中,A為字符串變量
(2)CHR:可以將0~255之間的整數作為含一個(gè)ASCII字符的字符串。當有些ASCII字符不方便放在字符串中時(shí),可以使用CHR將其放在字符串表達式中。
:CHR:A
其中,A為某一字符的ASCII值
(3)STR:將一個(gè)數字量或者邏輯表達式轉換成串。對于32位的數字量而言,STR將其轉換成8個(gè)十六進(jìn)制數組成的串;對于邏輯表達式而言,STR將其轉換成字符串T或者F
:STR:A
其中,A為數字量或者邏輯表達式
(4)LEFT:返回一個(gè)字符串最左端一定長(cháng)度的子串
A:LEFT:B
其中,A為源字符串,B為數字量,表示LEFT將返回的字符個(gè)數
(5)RIGHT:返回一個(gè)字符串最右端一定長(cháng)度的子串
A:RIGHT:B
其中,A為源字符串,B為數字量,表示RIGHT將返回的字符個(gè)數
(6)CC:用于連接兩個(gè)字符串。
A:CC:B
其中,A為第1個(gè)源字符串。B為第2個(gè)源字符串。CC操作符將字符串B連接在字符串A的后面。
2、數字表達式
數字表達式由數字常量、數字變量、操作符和括號組成
數字變量用偽操作GBLA或者LCLA聲明,用SETA賦值,它代表一個(gè)32位的數字量。
操作符:
(1)NOT:按位取反
:NOT:A
其中,A為一個(gè)32位數字量
(2)+、—、×、/及MOD算術(shù)操作符
A+B,A-B,A×B,A/B
A:MOD:B表示A除以B的余數
(3)ROL,ROR,SHL,SHR移位
A:ROL:B將整數A循環(huán)左移B位
A:SHL:B將整數A左移B位
(4)AND、OR及EOR按位邏輯操作符
A:AND:B將數字表達式A和B按位作邏輯與操作
3、基于寄存器和基于PC的表達式
基于寄存器的表達式表示了某個(gè)寄存器的值加上(或者減去)一個(gè)數字表達式
基于PC的表達式表示了PC寄存器的值加上(或減去)一個(gè)數字表達式?;赑C的表達式通常由程序中的標號與一個(gè)數字表達式組成。相關(guān)的操作符:
(1)BASE:返回基于寄存器的表達式中的寄存器編號。
:BASE:A A為基于寄存器的表達式
(2)INDEX:返回基于寄存器的表達式相對于其基址寄存器的偏移量。
:INDEX:A A為基于寄存器的表達式
(3)+、﹣:正負號,可以放在數字表達式或者基于PC的表達式前面。
+A(﹣A) A為基于PC的表達式或者數字表達式
4、邏輯表達式
由邏輯量、邏輯操作符、關(guān)系操作符以及括號組成,取值范圍為{FLASE}和{TRUE}
關(guān)系操作符:用于表示兩個(gè)同類(lèi)表達式之間的關(guān)系。關(guān)系操作符和它的兩個(gè)操作數組成一個(gè)邏輯表達式,其取值為{FALSE}或{TRUE}
如A=B 表示A等于B
A/=B,A<>B表示A不等于B
邏輯操作符:進(jìn)行兩個(gè)邏輯表達式之間的基本邏輯操作。操作的結果為{FLASE}或{TRUE}
:LNOT:A 邏輯表達式A的值取反
A:LAND:B邏輯表達式A和B邏輯與
5、其他的一些操作符
(1)?:返回定義符號A的代碼行所生成的可執行代碼的字節數
?A
其中,A為一個(gè)符號
(2)DEF:判斷某個(gè)符號是否已定義
:DEF:A
如果符號A已經(jīng)定義,上述結果為{TRUE},否則為{FLASE}
(3)SB_OFFSET_19_12
:SB_OFFSET_19_12:label 其中,label為一個(gè)標號
返回(label-SB)的bits[19:12]
(4)SB_OFFSET_11_0
:SB_OFFSET_11_0:label


關(guān)鍵詞: ARM指令特殊符

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>