ARM汇编

指令与伪指令

(汇编)指令是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

常用ARM指令2:cpsr访问指令

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汇编中的立即数

合法立即数与非法立即数
ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数

常用ARM指令5:软中断指令

swi(softwareinterrupt)

软中断指令用来实现操作系统中系统调用



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值