arm組合語言程式設計:arm組合語言源程式中的語句由指令、偽操作和巨集指令組成。arm指令已經在上一節介紹過了。
arm偽操作和巨集指令分類:
<1>符號定義偽操作
gbla:宣告乙個全域性的算術變數,並將其初始化為0。語法:gbla variable
gbll:宣告乙個全域性的邏輯變數,並將其初始化為false語法:gbll variable
gbls:宣告乙個全域性的串變數,並將其初始化為空串「」語法:gbls variable
lcla:宣告乙個區域性的算術變數,並將其初始化為0語法:lcla variable
lcll:宣告乙個區域性的邏輯變數,並將其初始化為false語法:lcll variable
lcls:宣告乙個區域性的串變數,並將其初始化為空串「」語法:lcls variable
seta:給乙個算術變數賦值語法:seta variable expr
setl:給乙個邏輯變數賦值語法:setl variable expr
sets:給乙個串變數賦值 語法:sets variable expr
rlist:為乙個通用暫存器列表定義名稱語法:name rlist
cn:為乙個協處理器的暫存器定義名稱語法:name cn expr
cp:為乙個協處理器定義名稱語法:name cp expr
<2>資料定義偽操作
ltorg:用於宣告乙個資料緩衝池的開始語法:ltorg
map:用於定義乙個結構化的記憶體表的首位址語法:map expr
field:用於定義乙個結構化的記憶體表中的資料域,#是field的同義詞語法: field expr
space:用於分配一塊記憶體單元,並用0初始化,%是space的同義詞語法: space expr
dcb:用於分配一段位元組記憶體單元,並用expr初始化,=是dcb的同義詞語法: dcb expr
dcd:用於分配一段字記憶體單元,並用expr初始化,&是dcd的同義詞語法: dcd expr
<3>彙編控制偽操作
if,else及endif:[是if偽操作的同義詞,|是else偽操作的同義詞,]是endif偽操作的同義詞。
while及wend:
macro及mend:語法:
macro
macroname ...}
;code
...;code
mend
mexit:用於從巨集中跳轉出去
<4>框架描述偽操作
code16:告訴彙編器後面的指令序列為16位的thumb指令語法:code16
code32:告訴彙編器後面的指令序列為32位的arm指令語法:code32
equ:為數字常量和程式中的標號定義乙個字元名稱,*是equ的同義詞。語法:name equ expr
area:用於定義乙個**段或者資料段。乙個大的程式可以包含多個**段和資料段。乙個匯程式設計序至少包含乙個段。 語法:area sectionname...
entry:指定程式的入口點。乙個程式中至少要有乙個entry,乙個原始檔中最多只能有乙個entry語法:entry
end:告訴彙編器已經到了源程式的結尾。每個匯程式設計序都包含end,以告知本源程式的結束。
align:通過新增補丁位元組,使得當前位置滿足一定的對齊方式。語法:align }
export:宣告乙個符號可以被其他檔案引用,相當於宣告了乙個全域性變數。語法:export symbol
import:告訴彙編器當前的符號不是在本原始檔中定義的,而是在其他原始檔中定義的,在本原始檔中可以引用該符號。不論本原始檔是否引用,該符號都將被加入到本原始檔的符號表中。語法:import symbol
extern:告訴彙編器當前的符號不是在本原始檔中定義的,而是在其他原始檔中定義的,在本原始檔中可以引用該符號。如果本原始檔實際上沒有引用該符號,它將不會被加入到本原始檔的符號表中。語法:extern symbol
get及include;將乙個原始檔包含到當前原始檔中,並將被包含的檔案在當前位置進行彙編處理。 語法:get filename
<5>資訊報告偽操作
assert:用於保證源程式被彙編時滿足相關條件,如果條件不滿足,assert偽操作報告錯誤型別並終止彙編。 語法:assert logical-expression
<6>雜項偽操作
arm組合語言偽指令:這些偽指令不是真正的arm或thumb指令,這些偽指令在彙編時被替換成對應的arm或thumb指令。
adr偽指令:小範圍的位址讀取指令,該指令將基於pc的位址或者基於暫存器的位址讀取到暫存器中。該指令在彙編時被替換成一條指令。
語法:adr register, expr
adrl偽指令:中等範圍的位址讀取指令,該指令將基於pc的位址或者基於暫存器的位址讀取到暫存器中。該指令在彙編時被替換成兩條指令。
語法:adrl register, expr
ldr偽指令:大範圍的位址讀取指令,該指令將乙個32位常數或位址值讀取到暫存器中。
語法:ldr register, =expr
nop:空操作指令
arm組合語言語句格式:如下:
symbol:符號
instrution:指令,在arm組合語言中,指令不能從一行的行頭開始,在一行語句中,指令的前面必須有空格或者符號
directive:偽操作
pseudo-instruction:偽指令
comment:語句注釋。在arm組合語言中,注釋以;開頭。
arm組合語言程式格式:arm組合語言以段(section)為單位組織原始檔,段又分為**段、資料段。乙個arm源程式至少需要乙個**段,大的程式可以包含多個**段和資料段。
ARM體系結構與程式設計
arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在全部模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每乙個暫存器相應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每乙個...
ARM體系結構與程式設計學習筆記2
1 arm指令分類 1 arm指令集可以分為跳轉指令,資料處理指令,程式狀態暫存器 psr 傳輸指令,load store指令,協處理指令和異常中斷產生指令 2 arm指令集字長為固定的32位,一條典型的arm指令編碼格式如下 opcode 指令助記符 如add表示演算法加操作指令 cond 執行條...
ARM體系結構與程式設計 1
arm處理器的7中執行模式 usr fiq irq svc abt und sys。arm處理器共37個暫存器 31個通用暫存器 未備份暫存器r0 r7,在所有模式下指的都是同乙個物理暫存器 備份暫存器r8 r12,每個暫存器對應兩個不同的物理暫存器。對於r13 sp 和r14 lr 來說,每個暫存...