汇编

汇编指令

1.LDR (load):读内存

LDR R0,[R1]  

假设R1为x,读取地址x 上的值(4字节),保存到R0中

2.STR(store):写内存

STR RO,[R1]

假设R1为x,把R0的值写到地址为x 的内存上

3.B:跳转

4.MOV(move)

MOV RO,[R1]

把R1 的值复制给R0,即 R0=R1

mov R0,#0x100

即 R0=0x100

5.伪指令

LDR RO,=0X12345678

该指令会被拆分成几条真正的arm指令,最终结果为 RO=0X12345678;

MOV RO,#0X12345678 

这种做法是错误的,arm指令为32位,其中 MOV 以及 R0 就要占用一定字节,剩余字节不足以保存0x12345678,所以该指令只能用于简单的数,称为立即数。

6.add :加

ADD R0,R1,#4     ;即为R0=R1+4

7.SUB :减

SUB R0,R1,#4		;R0=R1+4
SUB R0,R1,R2		;R0=R1+R2

8.BL (brarch and link)

BL xxx

1.跳到xxx命令
2.把返回地址保存到lr寄存器(返回地址为下一条指令的地址)

9.LDM(load many):读取内存,写入多个寄存器

在这里插入图片描述

stmdb sp!,{fp,ip,lr,pc}

1.db 表示先减后存
2.{fp,ip,lr,pc} 按照高编号寄存器存在高地址
3.执行过程,假设sp=4096 ,则第一步 先减 sp = sp-4 =4092,第二步,后存:4092~4095放pc的值(pc 寄存器的寄存器编号最高,所以先存pc寄存器的值),以此类推。。。
4.sp! :感叹号!表示 sp=最终的,被修改过的sp值,若不加,则sp还是为原来的值

10.STM(store many):把多个寄存器的值写入内存

ldmia spp,{fp,sp,pc}

ia 表示先读后增

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值