ARM 一些特殊符號

2021-01-15 電子產品世界
特殊符號對應指令含義

本文引用地址:http://www.eepw.com.cn/article/201611/316716.htm

特殊符號對應指令含義


= DCB 分配一片連續的字節存儲單元並用指定的數據初始化


&DCD 分配一片連續的字存儲單元並用指定的數據初始化


% SPACE 分配一片連續的存儲單元


^ MAP 定義一個結構化內存表的首地址


# FILED 定義一個結構化內存表的數據域


*EQU 為程序中的常量、標號等定義一個等效的字符名稱,

! 地址更新,結果寫回到Rn中,Rn不允許是R15


[ | ]相當於IFELSEENDIF

其他:

LDM中{∧}為可選後綴,當指令為LDM且寄存器列表中包含R15,選用該後綴時表示:除了正常的數據傳送之外,還將SPSR複製到 CPSR。同時,該後綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當前模式下的寄存器。

TST R1,#%1 // 用於測試在寄存器R1中是否設置了最低位(%表示二進位數

n $:如果在串變量前有一個$則在彙編時編譯器將用該串變量的數值取代該串變量,如:

GBLS STR1

GBLS STR2

STR1 SETS 「pen.」

STR2 SETS「This is a $STR1"

編譯後的結果是STR2的值為This is a pen.

如果$後是數字變量(與串變量區分),在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$後的數字變量。

如果$後是邏輯變量,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)。

如果程序中需要$,則用$$來表示,編譯器將不進行變量替換。

注意:在兩個豎線「|」之間的$並不表示進行變量替換,但如果「|」是在雙引號內,則將進行變量替換。

B . //表示程序進入死循環。.為location counter,可在源文件中指示當前地址。該符號可以被引用或賦值。

arm彙編程序中的符號

在arm彙編語言中,符號(symbols)可以代表地址(addresse)、變量(variables)和數字常量(numeric constants)。當符號代表地址時,又稱為標號(lable)。當標號以數字開頭時,其作用範圍為當前段(當前段沒有使用ROUT偽操作時),這種標號又稱為局部標號(lacal lable)。符號變量包括變量、數字常量、標號和局部標號。

1、變量

在程序中,變量的值在彙編處理過程中可能會發生改變。在arm彙編中變量有數字變量、邏輯變量和串變量3種類型。變量的類型在程序中是不可以改變的。

數字變量的取值範圍為數字常量和數字表達式所能表示的數值;邏輯變量的取值範圍為{true}和{flash};串變量的取值範圍為串表達式可以表達的範圍。

在arm彙編語言中,使用GBLA、GBLL及GBLS聲明全局變量;使用LCLA、LCLL及LCLS聲明局部變量;使用SETA、SETL及SETS為這些變量賦值。

2、數字常量

數字常量是32位的整數。在arm彙編語言中,使用EQU來定義數字常量。數字常量一經定義就不可修改。 進行大小比較時,認為數字常量都是無符號數。

3、彙編時變量的替換

如果在串變量前有一個$字符,在彙編時編譯器將用改串的數值來取代該串變量。

對於數字變量來說,如果該變量前面有一個$字符,在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$字符後的數字變量。

對於邏輯變量來說,如果該邏輯變量前面有一個$字符,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)

如果程序中需要字符$,則用$$來表示,編譯器將不進行變量替換,而是將$$當作$.通常情況下,包含在兩個豎線(|)之間的$並不表示進行變量替換。但是如果豎線(|)是在雙引號內,則將進行變量替換。

使用「.」來表示變量名稱的結束。

4、標號

標號是表示程序中的指令或者數據地址的符號。根據標號的生成方式可分為3種:基於PC的標號。基於PC的標號是位於目標指令前或者程序中數據定義偽操作前的標號。這種標號在彙編時將被處理成PC值加上(或減去)一個數字常量。常用於表示跳轉指令的目標地址,或者代碼段中所嵌入的少量數據。

基於寄存器的標號。基於寄存器的標號常用MAP和FIELD未定義操作,也可以該用EQU偽定義。這種標號在彙編時將被處理成寄存器的值加上(或減去)一個數據常量。常用於訪問數據段中的數據。

絕對地址。絕對地址是一個32位數據。它可以尋址2^32 -1,即直接可以尋址整個內存空間。

5、局部標號

局部標號主要在局部範圍內使用。它由兩部組成:開頭是一個0-99直接的數字,後面緊接一個通常表示該局部變量作用範圍的符號。

局部變量的作用範圍通常為當前段,也可以用偽操作ROUT來定義局部變量的作用範圍。

局部變量定義的語法格式如下:

N{routname},其中,N為0~99之間的數字。routname為符號,通常為該變量作用範圍的名稱(用ROUT偽操作定義的)。

局部變量引用的語法格式如下:

%{F|B}{A|T}N{routname}

其中,N為局部變量的數字號。

routname為當前作用範圍的名稱(用ROUT偽操作定義的)

%表示引用操作

F指示編譯器只向前搜索

B指示編譯器只向後搜索

A指示編譯器搜索宏的所有嵌套層次

T指示編譯器搜索宏的當前層次

如果F和B都沒有指定,編譯器先向前搜索,再向後搜索如果A和T都沒有指定,編譯器搜索所有從當前層次到宏的最高層次,比當前層次低的層次不再搜索。

如果指定了routname,編譯器向前搜索最近的ROUT偽操作,若routname與該ROUT偽操作定義的名稱不匹配,編譯器報告錯誤,彙編失敗。

arm彙編語言中的表達式

表達式是由符號、數值、單目或多目操作符以及括號組成的。

1、字符串表達式

字符串表達式由字符串、字符串變量、操作符以及括號組成。字符串的最大長度為512位元組,最小長度為0.下面介紹字符串表達式的組成元素。

字符串:由包含在雙引號內的一系列的字符組成。字符串的長度受到arm彙編語言語句長度的限制。當在字符串中包含美元符號$或者引號"時,用$$表示一個$,用""表示一個"。

字符串變量:用偽操作GBLS或者LCLS聲明,用SETS賦值。

操作符:

(1)LEN:返回字符串的長度

:LEN:A

其中,A為字符串變量(2)CHR:可以將0~255之間的整數作為含一個ASCII字符的字符串。當有些ASCII字符不方便放在字符串中時,可以使用CHR將其放在字符串表達式中。

:CHR:A

其中,A為某一字符的ASCII值(3)STR:將一個數字量或者邏輯表達式轉換成串。對於32位的數字量而言,STR將其轉換成8個十六進位數組成的串;對於邏輯表達式而言,STR將其轉換成字符串T或者F

:STR:A

其中,A為數字量或者邏輯表達式

(4)LEFT:返回一個字符串最左端一定長度的子串

A:LEFT:B

其中,A為源字符串,B為數字量,表示LEFT將返回的字符個數

(5)RIGHT:返回一個字符串最右端一定長度的子串

A:RIGHT:B

其中,A為源字符串,B為數字量,表示RIGHT將返回的字符個數(6)CC:用於連接兩個字符串。

A:CC:B

其中,A為第1個源字符串。B為第2個源字符串。CC操作符將字符串B連接在字符串A的後面。

2、數字表達式

數字表達式由數字常量、數字變量、操作符和括號組成

數字變量用偽操作GBLA或者LCLA聲明,用SETA賦值,它代表一個32位的數字量。

操作符:

(1)NOT:按位取反

:NOT:A

其中,A為一個32位數字量

(2)+、—、×、/及MOD算術操作符

A+B,A-B,A×B,A/B

A:MOD:B表示A除以B的餘數

(3)ROL,ROR,SHL,SHR移位

A:ROL:B將整數A循環左移B位

A:SHL:B將整數A左移B位

(4)AND、OR及EOR按位邏輯操作符

A:AND:B將數字表達式A和B按位作邏輯與操作

3、基於寄存器和基於PC的表達式

基於寄存器的表達式表示了某個寄存器的值加上(或者減去)一個數字表達式

基於PC的表達式表示了PC寄存器的值加上(或減去)一個數字表達式。基於PC的表達式通常由程序中的標號與一個數字表達式組成。相關的操作符:(1)BASE:返回基於寄存器的表達式中的寄存器編號。

:BASE:A A為基於寄存器的表達式

(2)INDEX:返回基於寄存器的表達式相對於其基址寄存器的偏移量。

:INDEX:A A為基於寄存器的表達式

(3)+、﹣:正負號,可以放在數字表達式或者基於PC的表達式前面。

+A(﹣A)A為基於PC的表達式或者數字表達式

4、邏輯表達式

由邏輯量、邏輯操作符、關係操作符以及括號組成,取值範圍為{FLASE}和{TRUE}關係操作符:用於表示兩個同類表達式之間的關係。關係操作符和它的兩個操作數組成一個邏輯表達式,其取值為{FALSE}或{TRUE}

如A=B表示A等於B

A/=B,A<>B表示A不等於B邏輯操作符:進行兩個邏輯表達式之間的基本邏輯操作。操作的結果為{FLASE}或{TRUE}

:LNOT:A邏輯表達式A的值取反

A:LAND:B邏輯表達式A和B邏輯與

5、其他的一些操作符

(1)?:返回定義符號A的代碼行所生成的可執行代碼的字節數?A其中,A為一個符號

(2)DEF:判斷某個符號是否已定義

:DEF:A

如果符號A已經定義,上述結果為{TRUE},否則為{FLASE}

(3)SB_OFFSET_19_12

:SB_OFFSET_19_12:label 其中,label為一個標號

返回(label-SB)的bits[19:12]

(4)SB_OFFSET_11_0

:SB_OFFSET_11_0:label

相關焦點

  • 關於ARM彙編裡的特殊符號
    在邊寫邊查資料的過程中,我又發現了別人的一些程序我看不懂。。。因為除了EQU、DCD等我基本不用偽指令。。。本文引用地址:http://www.eepw.com.cn/article/201611/317238.htm所以我開始看44B0 BootLoader的範例程序,可能是人家水平實在比較高,也可能是俺的水平確實有限,總之是有些地方看不怎麼懂,特別是一些個特殊符號,現特將那些個麻煩的符號總結下:特殊符號 | 對應指令 | 含義 | 示例
  • ARM彙編特殊符號 彙編符號引用
    特殊符號 ---- 對應指令 ---- 含義 ---- 示例^---- MAP----定義結構化內存表----MAP 4096;內存表首地址為4096#----FIELD----定義內存表中的數據,結合MAP指令使用----MAP 4096STACKSVC FIELD 256;定義從4096開始的256位元組為
  • ARM指令學習筆記
    雖說有些偽指令只是一些極其簡單的替換,但卻極大地方便我們編程。可以說它是以它是一種特殊的助記符。對於偽指令的學習也只是概念性的,沒法深刻,很多指令雖然知道意思但完全不知道哪兒用的著。有待今後的時間吧。總的來說,ARM指令有一下幾種1.符號定義偽指令全局變量聲明:GBLA、GBLL和GBLS。
  • 《DNF手遊》名字特殊符號怎麼打 名字特殊符號大全
    導 讀 dnf手遊名字特殊符號怎麼打?
  • 王者榮耀特殊符號大全2019 2019年王者榮耀特殊符號
    2019年王者榮耀特殊符號怎麼輸入到名字框?王者榮耀特殊符號怎麼複製進去?不少玩家玩家經常會遇到自己非常喜歡的符號,可是卻不知道怎麼打進去。下面,就隨18183小編來了解一下吧! 2019年王者榮耀特殊符號怎麼輸入到名字框?王者榮耀特殊符號怎麼複製進去?
  • 《dnf》手遊名字特殊符號怎麼輸入 特殊符號輸入方法
    導 讀 dnf手遊名字特殊符號怎麼打?
  • 王者榮耀特殊符號大全 名字特殊符號怎麼用
    在《王者榮耀》的遊戲當中,名字特殊符號可以讓各位玩家取一些比較特殊的名字!那麼哪些特殊的名字符號可以使用呢?一起來看看王者榮耀特殊符號大全吧!各位只要長按就可以複製自己喜歡的符號後,在遊戲內取名的時候就能使用了!
  • 英雄聯盟特殊符號名字大全 LOL特殊符號名字推薦
    比方說起名字,有些特殊符號可以用,有些卻是用不得。下面我們逐條講解,一起看看吧! 1、玩家可以通過搜狗輸入法,來輸入特殊符號,如:「火」能打成「灬」,「棍」能打成「丨」,「草」能打成「艹」,只要你能打得出來,基本上這些特殊符號都是可以用的; 2、偏旁也可以用來做特殊符號用:氵厶孓彳 廴 彐忄 扌 攵犭 疒 礻糹 艹虍 丿丶彡 丨 艹 巛 灬 3、還有一些搜狗的特殊符號可以用:*◇◆彡巛-▲_★△ 4、平假名和片假名也是被允許使用的
  • 《王者榮耀》帶翅膀的特殊符號匯總 帶翅膀的特殊符號有哪些
    導 讀 最近有很多小夥伴表示想要一些比較少見又稀有的帶翅膀的特殊符號,小夥伴們都知道有什麼特殊符號嗎?
  • 王者榮耀特殊符號怎麼打 特殊符號複製不了怎麼辦
    特殊符號複製不了怎麼辦呢?感興趣的小夥伴就和小編一起來看看吧! 王者榮耀特殊符號怎麼打上去?
  • 王者榮耀2020最新特殊符號大全 2020稀有特殊符號暱稱
    今天小編給大家帶來的是王者榮耀22020稀有特殊符號暱稱哦!想知道的小夥伴就和小編一起來看看吧!       王者榮耀名字特殊符號怎麼使用?
  • 《王者榮耀》特殊符號翅膀有什麼打法 特殊符號翅膀輸入方法一覽
    導 讀 王者榮耀特殊符號翅膀怎麼打?特殊符號翅膀輸入方法一覽。
  • 《DNF手遊》名字特殊符號可以用哪些 名字特殊符號大全
    導 讀 DNF手遊名字特殊符號怎麼打?
  • 2020最火的網名帶特殊符號 2020最火特殊符號遊戲名字
    2020最火的網名帶特殊符號怎麼搭配?2020最火特殊符號遊戲名字是什麼?隨著2020年到來,不少玩家都想取一個今年最火最熱最潮的遊戲名字!話不多說,下面,就隨琵琶網小編來了解一下!點擊下載】,免費領取(傳說皮膚、新英雄和體驗服白名單) 傳說皮膚和新英雄免費領:進入領取 體驗服白名單領取地址:點擊進入   一、2020最火的網名帶特殊符號推薦
  • 王者榮耀2021年特殊符號大全 最新最火的特殊符號合集
    王者榮耀2021年特殊符號有哪些?王者榮耀2021最火符號心形有哪些?王者榮耀2021最火符號心形怎麼使用?不少玩家都想知道2021年特殊符號大全!話不多說,下面,就隨琵琶網小編來了解一下!   王者榮耀心形符號怎麼打出來?   第一種辦法:如果你是安卓玩家,那麼可以通過複製粘貼的方式加到遊戲名字框裡,目前暫時不支持手機,可以通過電腦模擬器輸入生成。   第二種辦法:如果你是IOS玩家的話,那麼可以通過使用下載一些符號生成器,然後在裡面生成空白符號複製到遊戲中,在未被使用的情況下可用!
  • 數學符號大全:常用與特殊符號,不同符號的含義、讀法
    大家都知道,數學裡面會有很多很多的數學符號,各種常見的,如+ - × ÷ = ≠ ≈ / > < ≯ ≮ ≤ ≥ ∵ ∴ ∽ ≌ 等,這些相對簡單也比較容易念出來,而一些特殊的符號,很多同學甚至不知道它的讀音,現在小編將所有的數學符號都匯總整理了一遍,包括一些常用的數學符號
  • 《王者榮耀》名字特殊符號大全 名字特殊符號怎麼打
    王者榮耀名字特殊符號怎麼打?在王者榮耀中,遊戲名字是玩家在遊戲中的暱稱,所以很多玩家想要一些獨一無二的名字,或者是讓是印象深刻的名字,有玩家想知道名字特殊符號怎麼打,下面給大家介紹一下,一起來看看吧。王者榮耀名字特殊符號大全一、可用的王者榮耀名字特殊符號                 ★ ☆             ㄨ    ♂ ♀                                         二、愛心符號 三、手符號 四、西洋棋符號
  • 王者榮耀2020特殊符號大全 稀有特殊符號匯總
    今天小編給大家帶來的是王者榮耀稀有特殊符號匯總哦!想知道的小夥伴就和小編一起來看看吧!
  • 《DNF》手遊名字特殊符號怎麼複製 名字特殊符號複製方法介紹
    遊戲中很多玩家想取個性化的暱稱,加入合適的特殊符號是不錯的選擇。那麼dnf手遊特殊符號怎麼打呢?還... 《地下城與勇士》是採用2D橫版格鬥人氣網遊IP原作做的一款手遊,遊戲還未上線就受到了眾多老玩家的關注。遊戲中很多玩家想取個性化的暱稱,加入合適的特殊符號是不錯的選擇。
  • QQ炫舞手遊名字特殊符號怎麼打 特殊符號名字教程
    QQ炫舞手遊名字特殊符號怎麼打,由於方法其實是特別的簡單,也有不少玩家還不清楚,下面18183就簡單的講解下,以及帶來了一些特殊符號名字給大家參考哦。