指令与伪指令
•
(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。
•
(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。
ARM汇编特点
1、LDR/STR架构
•
ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。
•
ldr(load register)指令将内存内容加载入通用寄存器。
•
str(store register)指令将寄存器内容存入内存空间中。
•
ldr/str组合用来实现 ARM CPU和内存数据交换
2、8种寻址方式
•
寄存器寻址 mov r1, r2
•
立即寻址 mov r0, #0xFF00
•
寄存器移位寻址 mov r0, r1, lsl #3
•
寄存器间接寻址 ldr r1, [r2]
•
基址变址寻址 ldr r1, [r2, #4]
•
多寄存器寻址 ldmia r1!, {r2-r7, r12}
•
堆栈寻址 stmfd sp!, {r2-r7, lr}
•
相对寻址 flag:
beqflag
3、指令后缀
•
同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
•
B(byte)功能不变,操作长度变为8位
•
H(half word)功能不变,长度变为16位
•
S(signed)功能不变,操作数变为有符号
•
如ldr ldrb ldrh ldrsb ldrsh
•
S(S标志)功能不变,影响CPSR标志位
•
如mov和movs movs r0, #0
4、
条件执行后缀
5、多级指令流水线
常用ARM指令1:数据处理指令
•
数据传输指令 mov mvn
•
算术指令 add sub rsb adc sbc rsc
•
逻辑指令 and orr eor bic
•
比较指令 cmp cmn tst teq
•
乘法指令 mvl mla umull umlal smull smlal
•
前导零计数 clz
•
mrs& msr
•
mrs用来读psr,msr用来写psr
•
CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。
常用ARM指令3:跳转(分支)指令
•
b& bl & bx
•
b直接跳转(就没打开算返回)
•
blbranch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用
•
bx跳转同时切换到ARM模式,一般用于异常处理的跳转。
常用ARM指令4:访存指令
•
ldr/str& ldm/stm & swp
•
单个字/半字/字节访问 ldr/str
•
多字批量访问 ldm/stm
•
swpr1, r2, [r0]
•
swpr1, r1, [r0]
•
合法立即数与非法立即数
•
ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
•
合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数
•swi(softwareinterrupt)
•
软中断指令用来实现操作系统中系统调用