rtth之ARM基础知识

 

计算机怎么执行程序

1、在cpu、内存、flash三者之间相互合作    

cpu分两个部分:一个是负责存放各种中间变量之类的16个寄存器,另一个负责运算

内存:存放各种数据

flash:存放代码,用c语言编写,最后编译成机器码                        

 

CPU运行时,先去取得指令,再执行指令:

 ① 把内存a的值读入CPU寄存器R0

 ② 把内存b的值读入CPU寄存器R1

③ 把R0、R1累加,存入R0

 ④ 把R0的值写入内存a

下面是我们的cpu的全部寄存器的说明

 

汇编指令

加载/存储指令(LDR/STR)

加载指令LDR(读): LDR r0,[addrA] 意思是将地址addrA的内容加载(存放)到r0里面

存储指令STR(写): STR r0,[addrA] 意思是将r0中的值存储到地址addrA上

读写的话我们要注意三个地方

1、从哪里读

2、读到哪里

3、长度多少

LDR r0,[addrA]  :表示去地址为addrA的内存读取数据,放到R0中,LDR默认是4个byte

CPU执行LDR RO,[R3]的时候,先通过地址线找到地址R3代表的内存

再通过数据线读写数据

加法运算指令(ADD)

 加法运算指令(ADD): ADD r0,r1,r2 意思为:r0=r1+r2

减法运算指令(SUB): SUB r0,r1,r2 意思为:r0=r1-r

寄存器入栈/出栈指令(PUSH/POP)

.  寄存器入栈(PUSH): PUSH {r3,lr} 意思是将寄存器r3和pc写入内存栈

.  本质是写内存STR指令,高标号寄存器写入高地址的栈里,低标号寄存器写入低地址的栈里

. lr即r14,写入地址为 sp-4 的内存,然后:sp=sp-4

r3,写入地址为 sp-4 的内存,然后:sp=sp-4

个人理解:

sp指向最顶部

我们先把R0放到的Sp-4位置,再把栈顶指针sp指针减四下压,

下次我们要再压入一个的时候还是和上面一样,将R1放到sp-4,最后把栈顶指针sp减四下移

> - 寄存器出栈指令(POP): `POP {r3,pc}`  意思是取出内存栈的数据放入r3和pc中

>   * 本质是读内存LDR指令,高标号寄存器的内容来自高地址的栈,低标号寄存器的内容来自低地址的栈

>   * 读地址为`sp`的内存存入r3,然后:sp=sp+4

>   * 读地址为`sp`的内存存入pc,然后:sp=sp+4

个人理解:

sp指向如上图所示

我们想把R1推出栈,就让sp自己加4,就会吧R1顶出去

还想把R0推出去就继续sp自加4

字符串传送指令 movs

格式 :MOVS OPRD1,OPRD2

功能:OPRD1<----OPRD2

将右边的值复制给左边的值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值