汇编指令
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 表示先读后增