ARM汇编语言指令(1)
来源:互联网 发布:mac拔出u盘 编辑:程序博客网 时间:2024/06/07 00:04
- Handling Processor Exception
Exception
Description
Reset
复位中断,中断向量在0x0000处
Undefined Instruction
un-recognized executing instruction
Software Interrupt(SWI)
用户中断,提供了在用户模式下请求执行监控模式功能的方法,例如调用RTOS function
Prefetch Abort
用于地址非法,导致了处理器不能执行取址
Data Abort
到数据传输时,load或store地址非法
IRQ
外部中断发生(低电平有效)
FIQ
Fast Interrupt Requset发生(低电平有效)
通常情况下,应用运行于用户模式,但是异常处理需要运行于特权模式(即非用户模式),异常模式能够访问如下寄存器:
该模式下的r13或Stack Pointer(sp_mode)
该模式下的r14或Link Register(lr_mode)
该模式下的Saved Program Status Register(spsr_mode)
在FIQ模式下,还能够方位r8_FIQ-r12_FIQ。
- 中断优先级
Vector address
Exception type
Exception mode
Priority(1=H, 6=Low)
0x0
Reset
Supervisor(SVC)
1
0x4
Undefined Instruction
Undef
6
0x8
Software Interrupt(SWI)
Supervisor(SVC)
6
0xC
Prefetch Abort
Abort
5
0x10
Data Abort
Abort
2
0x14
Reserved
Not application
Not application
0x18
Interrupt(IRQ)
Interrupt(IRQ)
4
0x1C
Fast Interrupt(FIQ)
Fast Interrupt(FIQ)
3
- 进入异常处理
将CPSR拷贝到SPSR,在SPSR中保存the current mode,interrupt mask及condition flags。改变CPSR到合适的模式,map in the appropriate banked register for that mode。其它异常发生时,屏蔽IRQ;在FIQ和reset发生时,屏蔽FIQ。将中断返回地址存入到lr_mode。将PC指向中断向量表中指定的地址。
- 基本概念
ARM:Advanced RISC Machines
RISC:Reduced Instruction Set Computer(精简指令集)
ARM支持7种处理器模式,正常情况下,程序在用户模式下执行,当软件异常或硬件中断发生时,进入相应的处理器模式。
处理器模式
说明
Visible Thumb state registers
Visible ARM state registers
User用户
正常程序执行模式
R7..R0, LR, SP, PC, CPSR
R14..R0, PC, CPSR
FIQ
支持高速数据传送或通道处理
R7..R0,LR_fiq, SP_fiq,
PC, CPSR, SPSR_fiq
R7..R0, R14_fiq..R8_fiq,
PC, CPSR, SPSR_fiq
IRQ
通用中断处理
R7..R0,LR_irq, SP_irq,
PC, CPSR, SPSR_irq
R12..R0,R14_irq, R13_irq, PC, CPSR, SPSR_irq
Supervisor(svc)
操作系统保护模式
R7..R0,LR_svc, SP_svc, PC,
CPSR, SPSR_svc
R12..R0, R14_svc,R13_svc
PC, CPSR, SPSR_svc
Abort
实现虚拟存储/存储器保护
R7..R0,LR_abt, SP_abt, PC,
CPSR, SPSR_abt
R12..R0,R14_abt, R13_abt, PC, CPSR, SPSR_abt
Undefined
支持硬件辅助计算器的软件仿真
R7..R0,LR_und, SP_und,
PC, CPSR, SPSR_und
R12..R0,R14_und, R13_und, PC, CPSR
System
执行操作系统工作
R7..R0,LR, SP, PC, CPSR
R14..R0, PC, CPSR
通常情况下,程序执行于用户模式,如果发生外部中断IRQ,就进入IRQ处理器模式,这时使用分组寄存器r13_irq和r14_irq,而不是使用r13和r14。R15是程序计数器PC,它指向正在取指的指令而不是正在执行的指令。由于ARM7中的三条流水线,读取的PC指针,总是比当前执行的汇编代码的地址多8。
mov pc, pc
这条指令将使程序跳转到当前指令的下下条指令(即跳过一条指令)执行程序。
sub, pc, pc, #4
执行的是下一条指令
sub, pc, pc, #8
则是一条死循环
R14:当执行带链接分支的指令BL时,得到R15的副本
R13:作为堆栈指针(SP),通常在BOOT程序里把R13初始化为指向异常模式分配的堆栈。
对未定义模式堆栈进行初始化
UNDEFMODE DEFINE 0x1b(00011011)
MODEMASK DEFINE 0x1f(00001111)
NOINT DEFINE 0xc0(11000000)
mrs r0, cpsr
bic r0, r0, #MODEMASK ;把cpsr的低4位清零
orr r1, r0, #UNDEFMODE | NOINT
msr cpsr_cxsf, r1
ldr sp, =UndefStack ;把堆栈的位置送给SP
ARM处理器支持程序状态寄存器存取指令,用于程序状态寄存器和通用寄存器之间交换内容。
MRS:程序状态寄存器到通用寄存器的数据传递指令
MSR:通用寄存器到程序状态寄存器的数据传递指令
由于ARM用r14来保存子程序的返回地址而不需要调用堆栈获得,故ARM的子程序调用很快。
- ARM汇编语言指令(1)
- ARM汇编语言指令(1)
- ARM汇编语言指令(2)
- ARM汇编语言指令(2) .
- ARM汇编语言指令集(3)
- ARM汇编语言指令集(4)
- ARM汇编语言指令集(3) .
- ARM汇编语言指令集(4) .
- ARM汇编语言伪指令
- ARM汇编语言伪指令
- ARM汇编语言伪指令
- ARM汇编语言伪指令
- ARM汇编语言伪指令
- ARM汇编语言常用指令
- 常用ARM汇编语言伪指令
- 【转载】ARM汇编语言伪指令
- ARM汇编语言最常用指令
- arm中的汇编语言之ARM指令集
- Android开发讲座散记
- Wireshark抓包工具使用教程以及常用抓包规则
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
- ORACLE执行命令
- WinDbg查看函数内存地址
- ARM汇编语言指令(1)
- Incorrect string value异常——MySQL编码细说
- 动态表的SQL插入方法
- 国家对五险一金的交纳说明,太有用了,找都找不到
- 各位闲着没事就可以随便发些感想啊,quickly
- QT子窗口关闭浅记
- 《LINUX 、UNIX 设计思想》读后感,前六章
- 集成Spring后HibernateTemplate实现分页
- C#给自己写的方法添加注释提示