ARM汇编指令

1. ldr/str内存访问

 ldr ,x0,[x8,#4] 把x8+4指向的内存加载到x0
 str ,x0,[x8,#8]    把x0指向的内存存储到x8+8地址上.

 

2. mov指令

 mov r0,r1  //r1值赋值给r0

    mov r0,r1 ,lsl #3  //

 

3.加减指令

  add x0,x1,x2 // x0 = x1 + x2

       sub  x0,x1,x2 //x0 = x1-x2

 

4.比较指令

  cmp x0,x1 //比较指令,相等EQ,否则NQ

       tst  x0, 0x01 //测试指令,判度x0最低位是否为0,tst是作与(&)操作,结果为0,EQ生效,否则NQ

      teq  r0, r1 //判断r0是否等于r1, 等于EQ生效,否则NQ

     这三个指令,都影响CPSR的状态位(Z)

 5. 跳转指令

  bne   addr1 //cmp不相等时,跳转

       beq  addr2  //cmp相等时,跳转

6.逻辑操作

  and x0,x0,#0xF //   x0= x0&0xF

        orr   x0,x0,#0xF  //      x0 = 0x || 0xF

        eor  x0,x0,#0xF ///   亦或操作

7.入栈/出栈指令

STP x29, x30, [sp, #0x10] ; 入栈指令

LDP x29, x30, [sp, #0x10] ; 出栈指令

8. STM/LDM指令

格式:
LDM{cond}  mode  Rn{!}, reglist{^} //(load  much)多数据加载,将地址上的值加载到寄存器上
STM{cond}  mode  Rn{!}, reglist{^}//(store much)多数据存储,将寄存器的值存到地址上
其中:
 Rn:基址寄存器,装有传送数据的起始地址,Rn不允许为R15;
 !:表示最后的地址写回到Rn中;
 reglist:可包含多于一个寄存器范围,用“,”隔开,如{R1,R2,R6-R9},寄存器由小到大顺序排列;
 ^:不允许在用户模式和系统模式下运行,()

主要用途:现场保护、数据复制、参数传送等,共有8种模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下:
(1)IA:(Increase After) 每次传送后地址加4,其中的寄存器从左到右执行,例如:STMIA R0,{R1,LR} 先存R1,再存LR
(2)IB:(Increase Before)每次传送前地址加4,同上
(3)DA:(Decrease After)每次传送后地址减4,其中的寄存器从右到左执行,例如:STMDA R0,{R1,LR} 先存LR,再存R1
(4)DB:(Decrease Before)每次传送前地址减4,同上
(5)FD:  满递减堆栈 (每次传送前地址减4)
(6)FA:  满递增堆栈 (每次传送后地址减4)
(7)ED:  空递减堆栈 (每次传送前地址加4)
(8)EA:  空递增堆栈 (每次传送后地址加4)
注意:其中在数据块的传输中是STMDB和LDMIA对应,STMIA和LDMDB对应
而在堆栈操作是STMFD和LDMFD对应,STMFA和LDMFA对应

LDMIA R0! ,{R3-R9} ;加R0指向的地址上连续空间的数据,保存到R3-R9当中,!表示R0值更新
STMIA R1!,{R3-R9} ;将R3-R9的数据存储到R1指向的地址上,R1值更新

ldmia   sp, {r0 - pc}^ : 把堆栈内容恢复到ro- pc寄存器. "^" 表示把SPSR赋值给CPSR寄存器

9. MRS和MSR指令

MRS: 状态寄存器到通用寄存器的传送指令。
mrs  r0 cpsr //r0 = cpsr
MSR: 通用寄存器到状态寄存器的传送指令
msr cpsr r0 //cprs = r0

10 push和pop指令

push 和pop时ARMv8的入栈宏定义指令,用stp/ldp实现

   push x0,x1 //入栈

   pop  x0,x1 //出栈

11.CBZ 和 CBNZ
比较,为零则跳转;比较,为非零则跳转。
语法
CBZ Rn, label
CBNZ Rn, label

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值