运行模式
-User(USR):用户模式
Linux系统用户进程,资源访问受限
-System(SYS):系统模式
Linux内核,共用寄存器,资源自由访问
-IRQ:一般中断模式
硬件产生中断信号
-FIQ:快速中断模式
时间紧急的中断,高速信号的传输、采集
-Supervisor(SVC):管理模式
默认模式:系统初始化、软中断
-Abort(ABT):数据访问终止模式
非法访问地址或寄存器、段错误
-Undef(UND):未定义指令模式
程序跑飞、篡改
-Monitor:用于用户安全扩展模式
-Hyp:用于虚拟化扩展
寄存器组
通用寄存器
r0~r3:用来传递函数参数、暂存数据
r4~r11:用来保存被调用函数的局部变量,暂存数据
r12:记录函数调用过程中上一次sp指针的值
r13(sp):函数堆栈寄存器
r14(lr):记录函数返回地址
r15(pc):程序计数器
程序状态寄存器
cpsr:该寄存器包含运算标志位,中断禁止位、当前运行模式标志等一些状态位以及一些控制位
spsr:发生异常切换模式时,将cpsr复制到发生异常的模式下的spsr
系统寄存器
cp15协处理器、内存、缓存、中断
AMR常用汇编指令
汇编格式:
label:instruction @ comment
-label:标记
-instruction:具体汇编指令
-comment:注释内容
常用段名:
-text:代码段
-.data:初始化的数据段
-.bss:未初始化的数据段
-.rodata:只读数据段
-.section:自定义段
.section .vector
常见伪操作:
-.global:定义全局标号
.global _start
-.align:字节对齐
.align 2
寄存器间数据传输:
mov:寄存器数据(或者是立即数)拷贝到另一个寄存器
mov r0,r1
mov r0,#0x12
mrs:读程序状态寄存器
mrs cpsr,r0
mrc:读cp15协处理器
mrc:写cp15寄存器
内存与寄存器数据传输:
-ldr:把内存数据(或者是立即数)加载到寄存器
ldr r0,=0x80000000
ldr r1,[r0]
-str:把寄存器数据写入到内存
ldr r0,=0x80000000
str r1,[r0]
压栈和出栈
push:把寄存器列表存入栈中
push (r0~r3,r12);
pop:从栈中恢复寄存器列表
pop {r0~r3,r12}
跳转
-b:跳转到目标地址
b main
-bl:跳转到目标地址,并把当前pc指针值保存在lr寄存器中
b1 main
算数运算指令:
-add:加法运算
add r1,r2,r3
add r1,r2
-sub:减法运算
sub r1,r2,r3
-mul:乘法运算
mul r1,r2,r3
-udiv:除法运算
udiv r1,r2,r3
逻辑运算
-and:与
and r1,r2,r3
and r1,r2
-orr:或
orr r1,r2,r3
-bic:位清除
bic r1,r2,r3