目录
- 基础汇编代码
- LDR(load)
- STR(store)
- B
- MOV(move)
- LDR(注意跟读内存的LDR不一样,格式不同)
- add(加)
- sub(减)
- BL(branch and Link)
- ldm 和 stm
- ldmia 和 stmdb
- CPU,R0~R15图解
基础汇编代码
LDR(load)
读内存 LDR R0,[R1]
假设R1的值=x,读取地址x的数据(4字节)保存到R0中
STR(store)
写内存命令 STR R0,[R1]
? 假设R1的值=x,把R0的值写入到地址X(4字节)
B
? 跳转的意思
MOV(move)
赋值 MOV R0,R1
? 把R1的值赋给R0,R0=R1
? mov R0,#0x100, R0=0x100
LDR(注意跟读内存的LDR不一样,格式不同)
? LOR R0,=0x12345678 //R0=0x12345678 伪指令后面跟的数可以是任意值
? LOR是伪指令,它会被拆分为几条真正的RAM指令
- 特别注意
MOV R0,#0x12345678 ---->是无错误的,ARM指令 32位,这里64位了
? 32位中,需要有某个位或某几位表示mov指令本身和R0本身,那么剩下的就不足32位了,就不能表示任意值了(如:0x12345678),只能表示简单值(如:0x100),一些简单的数值,也被称为立即值,所以为了能表示任意值,就引入了伪指令的概念
add(加)
? add r0,r1,#4 //ro = r1+4;
sub(减)
? sub r0,r1,#4 //r0=r1-4
BL(branch and Link)
? bl xxx //先跳转到xxx;再把返回地址保存在1r寄存器中
ldm 和 stm
? 2个指令的m 表示 many
- ldm:读内存,写入多个寄存器
- stm: 把多个寄存器的值写入内存
ldmia 和 stmdb
- 说明:
? 其他形式简单的描述指令的形式,意思分别是过后增加(Increment After)(ia)、预先增加(Increment Before)(ib)、过后减少(Decrement After)(da)、预先减少(Decrement Before)(db)
- stmdb的图解
stmdb sp!, {fp,ip,lr,pc}
sp!=> !作用让 sp=最终的,被修改的sp值 = 4080
- ldmia的图解
ldmia sp,{fp,sp,pc}
CPU,R0~R15图解
原文地址:https://www.cnblogs.com/panrongfeng/p/9501502.html
时间: 2024-07-31 22:03:11