ARM彙編特殊符號 彙編符號引用

2021-05-02 03:06:31 字數 2748 閱讀 3067

特殊符號 ---- 對應指令 ---- 含義 ---- 示例

^ ---- map ---- 定義結構化記憶體表 ---- map 4096;記憶體表首位址為4096

# ---- field ---- 定義記憶體表中的資料,結合map指令使用 ---- 

map 4096

stacksvc field     256;定義從4096開始的256位元組為svc的堆疊空間。

% ---- space ---- 分配一塊記憶體,並用「0」初始化 ---- datastruc space 280;分配280位元組記憶體並初始化

[|]  ---- if else endif ---- 條件編譯,有選擇的確定需要編譯的**if,else,endif,可以巢狀使用 ---- 

if 邏輯表示式

指令或偽指令

else

指令或偽指令

endif

另外還有符號: $

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

gbls    str1

gbls    str2

str1    sets      「pen.」

str2    sets      「this is a $str1"

編譯後的結果是str2的值為this is a pen.

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

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

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

gbls   str1

gbls   b

gbla   num1

num1            seta   14

b                   sets   「changed」

str1             sets    「abc$$b$num1」

編譯結果str1的值為:abcb0000000e。

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

使用點"."來表示變數名的結束

gbls    str1

gbls    str2

str1    sets      「aaa」

str2    sets      「bbb$str1.ccc"

編譯結果str2值為bbbaaaccc

還有乙個例外:「%」

「%」除了表示space外,還可以在區域性標號中使用,具體意思見偽指令rout的使用示例:

◆rout

rout偽指令定義區域性標號的有效範圍,偽指令格式如下: rout。其中 name 所定義的作用範圍的名稱。

當沒有使用rout偽指令時,區域性標號的作用範圍為所在段;rout偽令的作用範圍在本rout偽指令和下乙個rout偽指令之間(指同一段中的rout偽指令)

偽指令應用舉例如下:

routinea rout                         ;定義區域性標號的有效範圍,名稱為routinea

......

3routinea                                ;routinea範圍內的區域性標號3

......

beq   %4routinea       ;若條件成立,跳轉到routinea範圍內的區域性標號 4

......

beq   %3routinea       ;若條件成立,跳轉到routinea範iq內的區域性標號 3

......

4routinea                                ;routinea範圍內的區域性標號4

......

otherstuff rout                      ;定義新的區域性標號的有效範圍

ads中arm組合語言程式設計的符號引用規範

error:undefined symbols ....

找到引用符號的彙編原始檔和定義符號的彙編原始檔仔細檢查和對比,符號沒有寫錯,而且在引用符號之前確實把符號使用import引入了進來。百思不得其解時,突然想到在定義符號的檔案中沒有對符號export。非常低階的錯誤。

在組合語言程式設計中,養成良好的程式設計習慣,形成良好的編碼風格是非常重要的。 這裡僅根據個人習慣和體會略談一下使用ads進行arm組合語言程式設計時的符號引用規則,主要是對不同性質的符號使用不同的引用辦法:

(1)對於暫存器位址定義以及通用的常量或符號定義(使用equ定義),可以按類定義在乙個.s彙編檔案中,在要使用這些定義的原始檔中可使用include將該.s彙編檔案包含進來

(2)對於**段的位址標號或函式入口位址標號(函式名),在**段或函式的定義處使用export輸出;在要呼叫該**段或函式的原始檔中使用import將符號引入。

一定要保證import和export是成對使用的,若不export則import無效,若只export而不import也無法引用符號。

彙編 特殊符號 解釋

算術運算子。巨集處理操作符。巨集擴充套件時不識別符號和字串中的形式引數,如果在形式引數前面加上乙個 記號,巨集匯程式設計序就能夠用實在引數代替這個形式引數了。位址計數器的值 記錄正在被匯程式設計序翻譯的語句位址。每個段均分配乙個計數器,段內定義的所有標號和變數的偏移位址就是當前彙編位址計數器的值。運...

ARM指令裡幾個特殊符號

華清遠見嵌入式學院 講師。總結一下arm指令裡幾個特殊符號的意義 特殊符號 對應指令 含義 dcb 分配一片連續的位元組儲存單元並用指定的資料初始化 dcd 分配一片連續的字儲存單元並用指定的資料初始化 space 分配一片連續的儲存單元 map 定義乙個結構化記憶體表的首位址 filed 定義乙個...

ARM指令裡幾個特殊符號

總結一下 arm指令裡幾個特殊符號的意義 特殊符號 對應指令含義 dcb 分配一片連續的位元組儲存單元並用指定的資料初始化 dcd 分配一片連續的字儲存單元並用指定的資料初始化 space 分配一片連續的儲存單元 map 定義乙個結構化記憶體表的首位址 filed 定義乙個結構化記憶體表的資料域 經...