1、arm處理器模式
arm處理器模式共有7種執行模式
使用者模式(usr)
快速中斷模式(fiq)
外部中斷模式(irq)
特權模式(sve)
資料訪問中止模式(abt)
未定義指令中止模式(und)
系統模式(sys)
2、arm暫存器
arm處理器共有37個暫存器。其中包括:
31個通用暫存器,包括程式計數器(pc)在內。這些暫存器都是32位暫存器。
6個狀態暫存器。這些暫存器都是32位暫存器,但目前只使用了其中12位。
通用暫存器:
可以分為以下3類:
未備份暫存器,包括r0~r7。
備份暫存器,包括r8~r14。
程式計數器pc,即r15。
3、arm中匯程式設計序例項之---利用跳轉表實現程式跳轉 (p163頁)
;設定本段程式的名稱(jump)以及屬性
area jump,code,readonly
;跳轉表中的子程式個數
num equ 2
;程式執行的入口點
entry
start
;設定3個引數,然後呼叫子程式arithfunc,進行算術運算
mov r0,#0
mov r1,#3
mov r2,#2
;呼叫子程式arithfunc
bl arithfunc
stop;;
;;mov r0,#0x18
ldr r1,=0x20026
swi 0x123456
;子程式arithfunc入口點
arithfunc
;判斷選擇子程式的引數是否在有效範圍之內
cmp r0,#num
movhs pc,lr
;讀取跳轉表的基位址
adr r3,jumptable
;根據引數r0的值跳轉到相應的子程式
ldr pc,[r3,r0,lsl#2];;
;r0為0即選擇doadd或者為1即選擇dosub
;跳轉表jumptable中儲存了各個子程式的位址
jumptable
dcd doadd
dcd dosub
;子程式doadd執行加法操作
doadd
add r0,r1,r2
;從子程式doadd返回
mov pc,lr
;子程式dosub執行減法操作
dosub
sub r0,r1,r2
;從子程式ddosub返回
mov pc,lr
;結束彙編
end4、一些偽操作
①dcd用於分配一段字記憶體單元(分配的記憶體都是字對齊的),並用偽操作中的expr初始化之。&是dcd的同義詞。dcdu與dcd的不同之處在於dcdu分配的記憶體單元並不嚴格字對齊。
②space用於分配一塊記憶體單元,並用0初始化。%是space的同義詞。
示例:datastruc space 280 ;分配280位元組的記憶體單元,並將記憶體單元內容初始化成0
③arm中偽指令不是真正的arm指令或者thumb指令,這些偽指令在彙編編譯器對源程式進行彙編處理時被替換成對應的arm或者thumb指令(序列)。arm偽指令包括adr、adrl、ldr、和nop。
adr(小範圍的位址讀取偽指令)將基於pc的位址值或基於暫存器的位址值讀取到暫存器中。
adrl(中等範圍的位址讀取偽指令)將基於pc的位址值或基於暫存器的位址值讀取到暫存器中。
ldr(大範圍的位址讀取偽指令)將乙個32位常數或者乙個位址值讀取到暫存器中。
nop(空操作偽指令)在彙編時將被替換成arm中的空操作,比如可能為mov r0和r0等。它不影響cpsr中的條件標誌位。
ARM匯程式設計序學習
part1 匯程式設計序框架 一 完整框架 section.data 初始化的資料 section.bss 未初始化的資料 section.text global start start 入口 彙編 二 簡化框架 text global start start 彙編 注 以上簡化版為常用框架 par...
ARM學習之ARM匯程式設計序
在arm thumb 組合語言程式中以程式段為單位組織 段可以分為 段 code section 和資料段 data section 乙個匯程式設計序至少應該有乙個 段,當程式較長時,可以分割為多個 段和資料段,多個段在程式編譯鏈結時最終形成乙個可執行的映像檔案。可執行映像檔案的構成 鏈結器根據系統...
ARM匯程式設計序鑑賞 1
area asmembedeedfile code,readonly 定義一段可讀的 區域 export mulcountfunction 輸出函式 mulcountfunction import val 插入變數val mulcountfunction ldr r1,val 取val的暫存器位址,...