汇编语言
介绍:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
ARM体系的CPU有两种工作状态:
1. ARM状态:处理器执行32位的字对齐的ARM指令;
2. Thumb状态:处理器执行16位的、半字对齐的Thumb指令;
在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容
ARM寄存器:
ARM体系7种基本模式:
1、用户模式(Usr):用于正常执行程序;
2、快速中断模式(FIQ):用于高速数据传输;
3、外部中断模式(IRQ):用于通常的中断处理;
4、管理模式(svc):操作系统使用的保护模式;
5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;
6、系统模式(sys):运行具有特权的操作系统任务;
7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件;
通用寄存器:
r0-r7 是所有模式公用的
r8 - r12 (user, system,svc, irq,undefine,abort公用, fiq有自己单独的r8-r12)
sp,栈指针(指向栈顶)
lr,链接寄存器(保存返回地址)
pc,程序计数器(指向取指令地址)
ARM过程调用规范(APCS):
r0 a1
r1 a2
r2 a3
r3 a4
r4 v1
r5 v2
r6 v3
r7 v4
r8 v5
r9 v6
r10 v7
r11 v8
r12 ip
r13 sp
r14 lr
r15 pc
r0-r3,用来传递参数,过程返回时不需要恢复r0-r3的值。r0用来作返回值。
r4-r11,用来保存局部变量,需要备份,过程返回时要恢复原来的值。
ip,在APCS中常用来作为临时变量保存某个值。
sp,栈指针,指向栈顶。
lr,链接寄存器,用来保存过程调用的返回地址。比如,mov lr, pc
pc,程序计数器
伪指令:
.global 全局符号
.section 声明段
.align N 2^N对齐
.word 存放一个word数据
.byte 一个字节
.ascii 存放字符(无字符串结束标志'\0')
.asciz 存放字符串
stm/ldm栈操作相关后缀:
ea: 增空
fa: 增满
ed: 减空
fd: 减满
条件后缀{cond}
lt,小于
le,小于等于
eq,等于
ne,不等于
gt,大于
ge,大于等于
load/store指令:
ldr r0, [r1] //r0 = *r1
ldr r0, [r1, #4] //r0 = *(r1+4)
ldr r0, [r1, #4]! //r0 = *(r1+4), r1 += 4
ldr r0, [r1], #4 //r0 = *r1, r1 += 4
ldr(4字节)/ldrh(2字节)/ldrb(1字节)
str/strh/strb