?? arm.txt
字號:
Chapter 1 ARM概述
處理器模式
用戶模式(User,usr) 正常程序執行的模式
快速中斷模式(FIQ,fiq) 高速數據傳輸和通道處理
外部中斷模式(IRQ,irq) 用戶通常的中斷處理
特權模式(SUPERVISOR,sve) OS使用的一種保護模式
數據訪問中止模式(ABORT,abt) 用戶虛擬存儲和存儲保護
未定義指令模式(Undefined,und) 用于通過軟件支持硬件協處理器
系統模式(System,sys) 運行特權級的操作系統任務
寄存器介紹
ARM處理器一共有37個寄存器
31個通用寄存器 32bit
6個狀態寄存器 32bit
每一種處理器模式都包含一組相應的寄存器,任意時刻有15個寄存器(R0-R14),1 or 2個狀態寄存器,1 個PC 可見.
通用寄存器
未備份寄存器(unbanked register):
R0-R7 所有的處理器模式都使用同一個處理器,模式切換時有可能造成數據破壞
沒有任何特殊用途,隨意使用
備份寄存器(banked register)
R8-R12 每一個寄存器對應2個物理寄存器(還一個專用于快速中斷模式)
R13R14 每一個寄存器對應6個物理寄存器(usr and sys 共用一個,其他每個模式都有專用)
R13通常用來保存棧指針
R14 = 鏈接寄存器 = LR
當通過BL或BLX調用子程序時,R14被置成該子程序的返回地址,在子程序中,當把R14復制到PC中時,程序即返回.
當異常中斷發生時,該模式的R14被置為該模式將要返回的地址,對于有些模式,R14的值可能與將返回的地址有一
個常數偏移值.
R14也可以作為通用寄存器使用.
程序計數器PC=R15
PC值 = 當前指令地址 + 8BYTE = 當前指令的下兩條指令的地址(字對齊,bit0 and bit1總是為0);
有關R15注意事項的討論:
<-待補->
程序狀態寄存器
CPSR 當前程序狀態寄存器,任何模式下都可以訪問.
CPSR格式 _____________________________________________
31|30|29|28|27| 26 |7|6|5|4 |3 |2 |1 |0 |
N |Z |C |V |Q |DNM(RAZ)|I|F|T|M4|M3|M2|M1|M0|
條件標志位 N(negative) Z(zero) C(carry) V(overflow)
N 補碼表示的有符號數暈眩時,N=1表示結果為負,N=0表示結果為正或者0;
Z =1表示運算結果為0,=1表示結果為負
C =1 加法指令中上溢出,減法指令中下溢出,移位指令中最后一次溢出位的數值
V 符號位溢出
Q標志位 DSP指令是否發生溢出(ARMv5以上)
控制位 低8位I,F,T,M[4:0],異常中斷時這些位才發生變化,特權級模式下,軟件可以修改
這些位.
中斷禁止位 I=1時,禁止IRQ中斷,F=1時,禁止FIQ中斷.
T控制位 =0表示執行ARM指令,=1表示執行Thumb指令.(ARM版本相關)
M控制位 控制處理器模式
0b10000 = User
0b10001 = FIQ
0b10010 = IRQ
0b10011 = Supervisor
0b10111 = Abort
0b11011 = Undifined
0b11111 = System
CPSR其他位 未定義,用于擴展.
ARM中異常中斷的種類
復位 處理器復位引腳有效時產生復位中斷,程序跳轉到復位中斷處理程序執行.
未定義指令 處理器或者協處理器認為當前指令未定義時產生該中斷,可用來仿真浮點向量運算.
軟件中斷 用戶自定義的中斷,usr下調用特權級指令,RTOS中可實現系統功能調用.
指令預取中止 處理器預取指令地址不存在或者該地址不允許訪問.
數據訪問中止 數據地址不存在或者不允許訪問
外部請求中斷 處理器外部中斷引腳有效,CPSR的I位置0時產生該中斷,系統外設使用該中斷請求
處理器服務.
快速請求中斷 處理器外部快速請求中斷引腳有效,CPSR的F位置0時產生該中斷.
異常中斷的相應過程
保存處理器當前的狀態 copy CPSR -> SPSR_<MODE>
設置CPSR中相應的位
將LR_<MODE>設置成返回地址
PC設置成該異常中斷的中斷向量地址.
從中斷中返回
copy SPSR_<MODE> -> CPSR
copy LR_<MODE> -> PC
復位中斷部需要返回.
ARM體系的存儲空間
使用單一平板地址空間,大小為2^32BYTE.
地址空間可以看作2^30個32bit的單元,這些單元的地址可以被4整除,低2位為0b00.地址address的數據包括
address+0 address+1 address+2 address+3四個BYTE的數據.
地址空間也可以看作2^31個16bit的單元...(ARMv4以上)
Notice:字 = 32bit,半字 = 16bit,字節 = 8bit.
存儲器格式
略
非對齊的存儲訪問操作
<-待補->
指令預取和自修改代碼
<-待補->
Chapter 2 ARM指令分類及其尋址方式
ARM指令的分類 跳轉,數據處理,PSR傳輸,Load/Store,協處理器指令和異常中斷產生指令
編碼格式 ______________________________________________________
|31 28|27 25|24 21|20|19 16|15 12|11 8|7 0 |
|cond |0 0 1 |opcode|S | Rn | Rd |shifter_operand|
語法格式 <opcode>{<cond>}{S} <Rd>,<Rn>,<shifter_operand>
opcode 指令助記符
cond 指令執行的條件
S 是否影響CPSR值
Rd 目標寄存器
Rn 第一個操作數的寄存器
shifter_operand 第二個操作數
ARM指令的條件碼域
<-待補->
數據處理指令的操作數尋址方式
立即數方式 每個立即數由一個8bit的常數循環右移偶數位得到,循環右移的位數由一個四位的
二進制數的兩倍表示.
<immediate> = imm_8 >> (2 * rotate_imm)
if <immediate> between 0,0xFF,imm_8 = <immediate>,rotate_imm = 0
or 匯編編譯器選擇使rotate_imm最小的編碼方式.
寄存器方式 略
寄存器移位方式 略
字及無符號字節的Load/Store指令尋址方式
Chapter 3 ARM指令集介紹
<-待補->
Chapter 4 ARM匯編語言程序設計
符號定義偽操作
GBLA GBLL GBLS 聲明全局變量并將其初始化
LCLA LCLL LCLS 聲明局部變量并將其初始化
SETA SETL SETS 給變量賦值
RLIST 為通用寄存器列表定義名稱
CN 為協處理器的寄存器定義名稱
CP 為協處理器定義名稱
DN SN 為VFP的寄存器定義名稱
FN 為FPA的浮點寄存器定義名稱
數據定義偽操作
LTORG 聲明一個數據緩沖池(literal pool)的開始
MAP 定義一個結構化的內存表的首地址
FIELD 結構化內存表中的一個數據域
SPACE 分配一塊內存單元并用0初始化
DCB 分配一段字節內存單元,并用指定的值初始化
DCD,DCDU 分配一段字的內存單元并用指定的值初始化
DCDO 分配一段字的內存單,并將單個單元的內容初始化成該單元相對于靜態基址寄存器的偏移量
DCFD,DCFDU 分配一段雙字的內存單,用雙精度浮點數據初始化
DCFS,DCFSU 分配一段字的內存單,用單精度浮點數據初始化
DCI 分配一段字節的內存單元,用指定的數據初始化,指定內存單元中存儲的是代碼而不是數據
DCQ,DCQU 分配一段雙字的內存單元并用64bit的數據初始化
DCW,DCWU 分配一段半字的內存單元并用指定的數據初始化
DATA 在代碼段中使用數據.(不推薦使用)
匯編控制偽操作
<-待補->
其他偽操作
<-待補->
ARM匯編語言偽指令
ADR 將基于PC的地址值或基于寄存器的地址值讀取到寄存器中.
ADRL 同上,讀取的地址范圍更大.
LDR 將一個32位的常數或者地址值讀入寄存器
NOP 空操作
ARM匯編語言格式
<-待補->
ARM匯編語言程序格式
<-待補->
Chapter 5 ARM存儲體系
ARM中用于存儲管理的協處理器CP15
訪問CP15寄存器的指令
MCR ARM Registers -> CP15 Registers Data Transport
MRC CP15 Registers -> ARM Registers Data Transport
MCR and MRC only for System mode.if you want to access CP15's Register in User
mode,you'd better use SWI call which defined by OS.
CP15's Registers
No. Basic in MMU in PU
0 ID(Read) ID&Cache Type
1 控制位 各種控制位
2 存儲保護和控制 地址轉換表基地址 Cachability控制位
....
存儲管理單元MMU
<-待補->
MMU中的地址變換過程
<-待補->
快表的操作
<-待補->
高速緩沖以及寫緩沖區
<-待補->
快速上下文切換
<-待補->
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -