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

news/2024/10/18 16:48:55/

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

文章目录

  • 【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句`a++`的执行过程
    • 一、3个操作指令
    • 二、CPU是怎么知道执行这三条操作指令的?
    • 2.2 寄存器

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

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

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也是一个通用寄存器,但在一些指令中它有特殊用途,比如在乘法和分支指令中。
R13SP寄存器栈寄存器;指向当前的栈顶位置。在函数调用和中断处理中,寄存器的值常常被推入(push)到堆栈中,或者从堆栈中弹出(pop)
R14LR寄存器返回地址;通常用于存储函数调用后的返回地址。以便返回到正确的位置上,继续执行。
R15PC寄存器**程序计数器;**它存储着下一条要执行的指令的地址。当CPU执行一条指令时,PC寄存器会自动更新为下一条指令的地址。

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



欢迎大家一起交流讨论。


http://www.ppmy.cn/news/1538807.html

相关文章

高防服务器为何有时难以防御CC攻击及其对策

高防服务器通常被用来抵御各种类型的DDoS攻击,包括CC(Challenge Collapsar)攻击。然而,在某些情况下,即使是配备了高级防护措施的高防服务器也可能难以完全防御CC攻击。本文将探讨导致这一现象的原因,并提供…

衡石分析平台系统-分析人员手册

应用创建​ 用户可以通过多种方式创建应用,不同场景下应用创建方法不同。 新建空白应用​ 新建空白应用是新建一个空的应用,应用中没有数据集和仪表盘。 点击应用创作页面右上方的新建应用,新建空白的分析应用和查询应用。 新建的空白应用…

如何创建诊断数据库模板(CDDT)

创建一个新的模板文件有两种方式: 1.修改现有模板形成自定义的模板 CANdelaStudio 21提供了基本范本,Vector_UDS_21.cddt,存放在C:\Users\Public\Documents\Vector\CANdelaStudio\21\Examples目录下。打开CANdelaStudio软件后,点击…

Java面试——场景题

1.如何分批处理数据? 1.使用LIMIT和OFFSET子句: 这是最常用的分批查询方法。例如,你可以使用以下SQL语句来分批查询数据: SELECT * FROM your_table LIMIT 1000 OFFSET 0; 分批查询到的数据在后端进行处理,达到分批…

代码训练营 day31|LeetCode 455,LeetCode 376,LeetCode 53

前言 这里记录一下陈菜菜的刷题记录,主要应对25秋招、春招 个人背景 211CS本CUHK计算机相关硕,一年车企软件开发经验 代码能力:有待提高 常用语言:C 系列文章目录 第31天 :第八章 贪心算法 part01 文章目录 前言系…

SQL NULL 值

SQL NULL 值 概述 在SQL(Structured Query Language)中,NULL值是一个特殊的标记,用于表示缺失或未知的值。理解NULL值的概念对于数据库设计和查询非常重要,因为它们可以影响查询的结果和性能。本文将详细介绍SQL中NU…

大数据笔记之 Hadoop 常用 Shell 命令(一)

文章目录 前言一、HDFS上的操作1.1 查看文件或文件夹1.2 修改文件或目录权限1.3 创建或删除文件夹1.4 移动或创建文件1.5 信息统计1.6 设置 hdfs 中文件的副本数量 二、在本地上传或下载的操作2.1 从本地上传文件到HDFS2.2 从HDFS下载文件到本地 总结 前言 前无言 一、HDFS上的…

树莓派应用--AI项目实战篇来啦-3.OpenCV 读取写入和显示图像

1. 介绍 在计算机视觉和图像处理领域,读取和显示图像是最基础且常见的操作之一,OpenCV作为一个强大的计算机视觉库,提供了丰富的功能来处理图像数据。 读取、显示和写入图像是图像处理和计算机视觉的基础,即使裁剪、调整大…