ARM
ARM支持的數(shù)據(jù)格式:
- byte:8bit char
- hw:16bit short
- word:32bit int
- dw:64bit long long
* ARM(32bit) thumb(16bit)
* ARM處理器工作模式:
- user:唯一的非特權(quán)模式魔种,只能操作普通的寄存器
- system:特權(quán)模式年扩,使用和user一樣的寄存器散吵,PC
- FIQ:快速中斷
- IRQ:普通中斷
- SVC(Supervisor):復(fù)位蜜氨,軟中斷進(jìn)入的模式
- abort:取指(到內(nèi)存中取到指令)異常
- undef:指令未定義時(shí)會(huì)進(jìn)入這個(gè)模式
- monitor:監(jiān)控
* 除了system和user的模式都叫做異常模式
* r13 sp 堆棧指針(備份普通寄存器內(nèi)容)
- r14 lr 鏈接寄存器(備份PC)
- r15 pc 程序計(jì)數(shù)器(指向下一條執(zhí)行的指令)
一個(gè)函數(shù)的跳轉(zhuǎn):
- 將pc備份到lr
- 壓棧领斥,保存棧指針到sp
- 執(zhí)行新的函數(shù)
- 執(zhí)行完畢
- 從棧里恢復(fù)數(shù)據(jù)到寄存器
- 將lr恢復(fù)到pc
ARM核里有37個(gè)寄存器
- system+user公用17個(gè)寄存器
- FIQ獨(dú)立:r8 - r14 SPSR(用來備份cpsr) 8個(gè)
- IRQ獨(dú)立的:r13、 r14、 spsr
- SVC獨(dú)立的:r13、 r14跋破、 spsr
- undef獨(dú)立的:r13簸淀、 r14、 spsr
- abort獨(dú)立的:r13毒返、 r14租幕、 spsr
cpsr
- 31 n位 負(fù)數(shù)位
- 30 z 0
- 29 c 進(jìn)位位
- 28 v 溢出
- 24 j thumbee java字節(jié)碼
- 19-16 GE 大于或者等于
- 15-10 if then
- 9 e 大小端
- 7 i 禁止IRQ
- 6 f 禁止FIQ
- 5 T 進(jìn)入thumb狀態(tài)
* 異常處理:4大步3小步
- 1.拷貝cpsr到指定模式的spsr
- 2.設(shè)置cpsr
- a.改變狀態(tài)為ARM狀態(tài)
- b.改變處理器模式
- c.根據(jù)需要禁止中斷
- 3.保存pc到指定模式的lr
- 4.設(shè)置pc為響應(yīng)異常
從異常返回:
- 從spsr恢復(fù)到cpsr
- 從lr恢復(fù)到pc
B指令 簡(jiǎn)單的跳轉(zhuǎn) 范圍+—32M
BL帶鏈接的跳轉(zhuǎn)指令
- 跳轉(zhuǎn)之前將pc保存到lr 跳轉(zhuǎn)之后將lr恢復(fù)到pc