【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句`a++`的执行过程

【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句a++的执行过程

文章目录

本文作为学习笔记,围绕的一条C语句进行讲解

参考:https://www.100ask.net/

c 复制代码
int a = 1;
a++; //a = a + 1

一、3个操作指令

  • a++ ==> a = a + 1这条非常简单的指令,会涉及到3个操作

    • 1、读取a
    • 2、累加操作
    • 3、写操作
  • 提出问题:读什么?写什么?变量a是什么东西?,存放在哪里?

    • 变量a,保存在内存里面,内存是一种设备,我们可以写数据进去,读数据出来。
    • 读取:cpu读地址addr A,将地址对应的data保存到cpu的寄存器中,
    • 累加:使得寄存器执行累加操作
    • 写:写地址,把寄存器数据写到 内存中的addr A里面

在CPU内部,有R0~R15这些寄存器,这些寄存器用来暂存数据



二、CPU是怎么知道执行这三条操作指令的?

2.1 CPU的架构

  • Keil 通常被用作一个工具链,用于将高级语言(如 C 或 C++)编写的程序转换成微控制器(MCU)可以执行的二进制文件。这个过程主要包括以下几个步骤:
    • 1、编译、使用 Keil 提供的 ARM Compiler,将源代码转换成 ==>汇编语言(.asm),然后进一步转换成机器码,
    • 2、链接 :链接器(Linker)将所有的机器码片段(包括不同源文件编译产生的代码)以及库函数链接成一个单一的二进制文件
    • 3、生成二进制文件 :链接后的输出是一个完整的二进制文件,( AXF (ARM eXtended Format)、HEXBIN 格式)。AXF 文件包含了程序的调试信息和符号信息,而 HEX 和 BIN 文件通常用于烧录。
    • 4、烧录 :使用 Keil 或其他专用的烧录工具,将生成的二进制文件烧录到微控制器的 Flash 闪存中。
    • 5、执行 :当微控制器 上电或复位后,其内置的引导加载程序 (Bootloader) 会从 Flash 闪存中读取这些二进制指令,并开始执行

Flash:断电后还可以保存数据

  • 烧录后,板子可以离开PC、编译器运行,与PC机和编译器没有任何关系。CPU做的任何事情,都是我们的程序告诉CPU去做的,比如:分配内存,分配堆、分配栈。没有什么第三方,没有什么系统、什么编译器、不涉及其他任何东西

2.2 寄存器

寄存器 别名 功能
R0 通用寄存器 通常用于存储临时数据、函数参数和局部变量等。
... ... ...
... ... ...
... ... ...
R12 ... 也是一个通用寄存器,但在一些指令中它有特殊用途,比如在乘法和分支指令中。
R13 SP寄存器 栈寄存器;指向当前的栈顶位置。在函数调用和中断处理中,寄存器的值常常被推入(push)到堆栈中,或者从堆栈中弹出(pop)
R14 LR寄存器 返回地址;通常用于存储函数调用后的返回地址。以便返回到正确的位置上,继续执行。
R15 PC寄存器 **程序计数器;**它存储着下一条要执行的指令的地址。当CPU执行一条指令时,PC寄存器会自动更新为下一条指令的地址。

R15 ==> PC寄存器:你想去执行某个函数的时候,可以把那个函数的地址扔给PC寄存器,CPU就会跳过去执行



欢迎大家一起交流讨论。

相关推荐
晚霞的不甘4 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
C++ 老炮儿的技术栈4 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
陌上花开缓缓归以4 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
代码改善世界5 小时前
CANN深度解构:中国AI系统软件的原创性突破与架构创新
大数据·人工智能·架构
wangjialelele5 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发
晚霞的不甘5 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
Tadas-Gao5 小时前
TCP粘包现象的深度解析:从协议本质到工程实践
网络·网络协议·云原生·架构·tcp
礼拜天没时间.6 小时前
深入Docker架构——C/S模式解析
linux·docker·容器·架构·centos
啊森要自信6 小时前
CANN runtime 深度解析:异构计算架构下运行时组件的性能保障与功能增强实现逻辑
深度学习·架构·transformer·cann
WindrunnerMax6 小时前
从零实现富文本编辑器#11-Immutable状态维护与增量渲染
前端·架构·前端框架