RT-thread学习基础——理解ARM架构和简明汇编教程

本文概述了CPU通过地址总线和数据总线访问内存的过程,特别关注ARM芯片的特性。介绍了LDR,STR,ADD,SUB等汇编指令的作用,以及PUSH和POP指令在堆栈管理中的运用,最后讲解了跳转指令BL在程序流程控制中的作用。
摘要由CSDN通过智能技术生成

今天看了韦东山老师的一些课程,有了一些总结

我们可以知道CPU是通过地址总线去访问设备or模块的,然后可以通过数据总线得到数据,对于ARM芯片而言,对内存只有读,写功能,所以如果要得到a=a+b这样的等式,需要先把a,b读出来,之后在CPU里进行相加运算后得到a+b,之后再写入到内存里。如果要更具体地去了解,可以看看这幅图。

就是我们要明确CPU里面会有运算单元和寄存器,我们读操作是将内存数据读到寄存器(即图上R0-R15)处,然后我们之后将a,b两个值在CPU里相加,之后把他们加起来的值保存在CPU的另一个寄存器里,这些操作是基于我们写的代码,我们用c语言写的代码会被处理成汇编语言存放在FLASH(闪存,用于存放一些CPU最常使用的代码)里。
需要理解LDR和STR和ADD和SUB这四个汇编指令。

例如:LDR R0,[R1]    ---这条指令说的是将R1所代表的值当成地址去读,例如如果R1=100,那我们就将地址为100处内存的值写入到我们的寄存器R0之中,注意不是直接将R1 的值写入R0,总之可以把'[]'符号当成取地址,R1的值其实代表的是地址值。此处不再赘述STR和ADD和SUB的具体意义了。


关于PUSH和POP指令,我们要先了解我们寄存器R13/R14/R15,R13是堆栈指针SP,栈的地址从上到下是由高到低的,我们令R13的值(即SP的值)等于最高位的栈地址xxx,之后我们执行PUSH{R0,R1},SP先执行SP=SP-4之后(执行-4的原因是因为首地址一般是所占内存的最低位),再将高标号的寄存器值(R1的值)放入栈里,之后再令SP=SP-4,再把R0的值放入栈里,总之PUSH会多次调用STR指令和SP,

POP就是会把栈里的值推出来,就例如我们刚刚把R0/R1放入栈里,我们要把R0的值推出栈,则先调用R0=[SP],把栈指针地址指向的值放入寄存器R0里,之后SP=SP+4到更高的地址处,之后再R1=[SP],再SP=SP+4【加减4 是因为栈地址之间相差4字节】
理解跳转指令BL,有两个作用.例如
BL A,
Bxxxxx
它会记录返回地址(即B处),这个地址保存在R14,之后执行A,执行完A后继续执行B

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值