ARM中匯程式設計序例項小筆記

2021-06-21 02:57:18 字數 1865 閱讀 5759

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的暫存器位址,...