秦皇岛哪里做网站,服务器在国外的网站,淘宝网站图片维护怎么做,oa系统办公软件排名本篇文章基于韦东山老师讲课笔记和自己理解编写。
RISC
ARM芯片属于精简指令集计算机(RISC#xff1a;Reduced Instruction Set Computing)#xff0c;它所用的指令比较简单#xff0c;有如下特点#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …本篇文章基于韦东山老师讲课笔记和自己理解编写。
RISC
ARM芯片属于精简指令集计算机(RISCReduced Instruction Set Computing)它所用的指令比较简单有如下特点 ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指令的CPU复杂度小一点易于设计
底层代码执行步骤 例如图中所示的运算a a b在RISC中要使用4条汇编指令 ① CPU从内存中读入a ② CPU从内存中读入b ③ CPU计算a b并写入到内存中 ④ 把结果写入内存
CPU、内存、flash
CPU用来做计算内存用来存数据flash用来存放程序
CPU如何知道自己要做什么呢 flash中的汇编指令告诉的。计算 a b时在CPU内部用什么来保存a、b、ab CPU内部都有R0、R1、……、R15寄存器它们可以用来“暂存”数据。读写操作通过什么实现 寄存器 和 数据的地址。 对于R13、R14、R15还另有用途 R13别名SP(Stack Pointer)栈指针用来保存栈的地址 R14别名LR(Link Register)用来保存返回地址 R15别名PC(Program Counter)程序计数器表示当前指令地址写入新值即可跳转 xPSR程序状态寄存器
了解汇编指令
《汇编语言(第3版) 》王爽著.pdf的书直接上传到我的Gitee仓库了有需要直接获取https://gitee.com/jingcheng11/embedded-data 数据传输的三大要素目的、源、长度。
读内存Load# 示例LDR R0, [R1, #4] ; 读地址R14, 得到的4字节数据存入R0长度 目的 源解释 长度LDR Load R读四字节 目的R0 源[R1, #4] 补充 LDR B读1个字节 B表示bit LDR H读1个字节 H表示half LDRD读8个字节 D表示double 写内存Stroe # 示例
STR R0, [R1, #4] ; 把R0的4字节数据写入地址R14
长度 源 目的可以这样记汇编指令的 读内存、写内存 读目的-----------源 写源-----------目的 箭头是从“源”指向“目的”只需要记住箭头方向即可。 加减 ADD R0, R1, R2 ; R0R1R2
ADD R0, R0, #1 ; R0R01
SUB R0, R1, R2 ; R0R1-R2
SUB R0, R0, #1 ; R0R0-1比较 CMP R0, R1 ; 结果保存在PSR(程序状态寄存器)CMP 表示compare比较R0、R1 跳转 B main ; Branch, 直接跳转
BL main ; Branch and Link, 先把返回地址保存在LR寄存器里再跳转B (Branch) 指令 这条指令用于无条件地跳转到指定的地址。当使用 B 指令时处理器会直接跳转到目标地址执行指令但是不会保存任何返回地址信息。这意味着如果你使用 B 指令跳转到一个子程序那么在子程序结束之后你将无法自动返回到调用点因为没有保存返回地址。 B 指令通常用于简单的程序流程控制比如循环或者条件分支的另一部分。 BL (Branch and Link) 指令 这条指令除了执行无条件跳转之外还会先将当前指令的下一条指令的地址即返回地址保存在链接寄存器Link RegisterLR中。LR 寄存器通常被用来存储调用子程序前的返回地址这样在子程序结束时可以通过 LDR PC, [LR] 或 POP {PC} 等指令从 LR 中恢复返回地址从而回到调用子程序之前的指令位置继续执行。 BL 指令常用于函数调用或当需要在执行完一段代码后返回到原处的情况。 总结来说B 指令不保存返回地址而 BL 指令在跳转前会保存返回地址到 LR 寄存器这使得 BL 更适合用于子程序调用而 B 更适用于不需要返回的简单跳转。 反汇编代码了解
让Keil生成反汇编 制作反汇编的指令如下
fromelf --text -a -c --outputxxx.dis xxx.axf反汇编