失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 第六篇:汇编基础指令讲解

第六篇:汇编基础指令讲解

时间:2018-12-11 05:17:39

相关推荐

第六篇:汇编基础指令讲解

目录

基础汇编代码LDR(load)STR(store)BMOV(move)LDR(注意跟读内存的LDR不一样,格式不同)add(加)sub(减)BL(branch and Link)ldm 和 stmldmia 和 stmdbCPU,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图解

如果觉得《第六篇:汇编基础指令讲解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。