基于ARM深入分析C程序

0 基于韦东山b站视频教程

视频链接:

C语言的本质(基于ARM深入分析C程序)_哔哩哔哩_bilibili

【直播公开课】韦东山老师嵌入式C语言加强,全天8小时直播,吐血整理可以分集观看!_哔哩哔哩_bilibili

1 ARM通用寄存器及其用途

  • R0-R12:这些是通用寄存器,用于存储临时数据和执行算术逻辑操作。在函数调用时,R0-R3通常用作参数寄存器,而R4-R12用于局部变量和临时存储。

  • R13/SP:栈指针寄存器(Stack Pointer Register),用于指向当前栈顶的地址。栈是用于存储程序执行过程中的临时数据,如函数参数、局部变量和返回地址。

  • R14/LR:链接寄存器(Link Register),用于存储子程序调用后的返回地址。当一个函数被调用时,处理器可以将下一条指令的地址存入LR,以便在函数执行完毕后返回到调用点。

  • R15/PC:程序计数器(Program Counter),指向下一条将要执行的指令的地址。PC寄存器是控制流管理的关键部分,决定了程序的执行顺序。

2 ARM基础汇编指令

2.1 数据传输指令

MOV:将一个立即数或寄存器的值复制到另一个寄存器。

MOV R1, #10  ; 将立即数10赋值到寄存器R1
MOV R2, R1   ; 将寄存器R1的值复制到寄存器R2

LDR:从内存中加载数据到寄存器。

LDR R1, [R2]  ; 将寄存器R2指向的内存地址中的值加载到寄存器R1
LDR R0, [R1, #4]     ; 将R1寄存器值加上4作为地址,从内存中读取一个字(32位)到R0寄存器

STR:将寄存器中的数据存储到内存中。

STR R1, [R2]  ; 将寄存器R1的值存储到寄存器R2指向的内存地址
STR R2, [R3, #8]     ; 将R2寄存器的值写入到R3寄存器值加8所指向的内存地址

2.2 算术指令

ADD:将两个寄存器或一个寄存器和一个立即数的值相加,结果存储在目标寄存器中。

ADD R3, R1, R2  ; 将寄存器R1和R2的值相加,结果存储在寄存器R3
ADD R7, R8, #100     ; R7 <- R8 + 100

SUB:从第一个寄存器中减去第二个寄存器的值。

SUB R3, R1, R2  ; 将寄存器R1的值减去R2,结果存储在寄存器R3

MUL:两个寄存器值相乘。

MUL R3, R1, R2  ; 将寄存器R1和R2的值相乘,结果存储在寄存器R3

DIV:第一个寄存器除以第二个寄存器的值。

MOV R4, #2
MOV R5, #4
SDIV R6, R4, R5  ; 将寄存器R4的值除以R5,结果存储在寄存器R6

2.3 逻辑指令

AND:对两个寄存器进行按位与操作。

AND R3, R1, R2  ; 将寄存器R1和R2的值进行按位与操作,结果存储在寄存器R3

ORR:对两个寄存器进行按位或操作。

ORR R3, R1, R2  ; 将寄存器R1和R2的值进行按位或操作,结果存储在寄存器R3

EOR:对两个寄存器进行按位异或操作。

EOR R3, R1, R2  ; 将寄存器R1和R2的值进行按位异或操作,结果存储在寄存器R3

BIC:清除寄存器中指定的位。

BIC R3, R1, #0xFF  ; 清除寄存器R1的最低8位,结果存储在寄存器R3

2.4 数据移位指令

LSL (Logical Shift Left): 将一个寄存器中的值逻辑左移指定位数。

1LSL R0, R1, #3      ; R0 <- R1 << 3

LSR (Logical Shift Right): 将一个寄存器中的值逻辑右移指定位数。

1LSR R2, R3, #2      ; R2 <- R3 >> 2

2.5 比较和跳转指令

CMP:比较两个寄存器的值,并设置条件码。

CMP R1, R2  ; 比较寄存器R1和R2的值

B(或BL):无条件跳转到指定的地址(BL还会将返回地址保存在链接寄存器中)。

B Label  ; 无条件跳转到Label标签处
B 0x12345678     ; 无条件跳转到绝对地址0x12345678
BL subroutine     ; 调用子程序subroutine,返回地址保存在LR

BEQBNEBGTBLT等:根据条件码的值跳转到指定的地址。

BEQ Next  ; 如果相等,跳转到Next标签处
BNE Next  ; 如果不相等,跳转到Next标签处

CMP R0, R1        ; 比较R0和R1,更新条件标志
BGT label         ; 如果R0 > R1,则跳转到label

2.6 其他常用指令

NOP: 执行空操作,常用于占位、填充指令流水线或调试。

NOP                ; 执行一个空指令周期

PUSH/POP: 在栈上压入/弹出多个寄存器的值。

PUSH {R1, R2, R3}  ; 将R1、R2、R3的值依次压入栈
POP {R4, R5, R6}   ; 将栈顶的值依次弹出到R4、R5、R6

3 局部变量的分配与初始化

4 全局变量、静态变量初始化

5 栈和堆

6 函数

7 指针

8 结构体

9 联合体

10 位域

11 头文件

12 链表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行&#xff08;windows&#xff09; 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

YouTubeDNN模型

Deep Neural Networks for YouTube Recommendations YouTubeDNN模型是2016年的一篇文章&#xff0c;这篇文章给出了很多优化推荐系统中的工程性经验和trick&#xff0c;比如召回方面的"example age", “负采样”&#xff0c;“非对称消费&#xff0c;防止泄露”&…

MySQL/MariaDB 如何查看当前的用户

MySQL 的所有数据库用户信息是存储在 user 数据表中的。 可以在登录成功数据后运行 SQL&#xff1a; MariaDB [(none)]> select user,host from user;就可以查看到数据中的所有用户信息。 MariaDB [(none)]> select user,host from user; ERROR 1046 (3D000): No databa…

ReactJS中使用TypeScript

TypeScript TypeScript 实际上就是具有强类型的 JavaScript&#xff0c;可以对类型进行强校验&#xff0c;好处是代码阅读起来比较清晰&#xff0c;代码类型出现问题时&#xff0c;在编译时就可以发现&#xff0c;而不会在运行时由于类型的错误而导致报错。但是&#xff0c;从…

OpenHarmony实战开发-如何实现自定义绘制 (XComponent)

XComponent组件作为一种绘制组件&#xff0c;通常用于满足开发者较为复杂的自定义绘制需求&#xff0c;例如相机预览流的显示和游戏画面的绘制。 其可通过指定其type字段来实现不同的功能&#xff0c;主要有两个“surface”和“component”字段可供选择。 对于“surface”类型…

图像处理ASIC设计方法 笔记19 连通域标记ASIC系统设计

目录 核心的模块有:标记ASIC的工作流程如下:该芯片的系统结构具有如下特点:P131 第6章 连通域标记与轮廓跟踪 本章节讲述了多值分割图像连通域标记芯片的系统设计 多值分割图像连通域标记芯片(以下简称"标记芯片",也称"标记 ASIC"),完成图像连通域标…

OpenHarmony南向开发—如何快速上手GN

背景 最近在研究鸿蒙操作系统的开源项目OpenHarmony&#xff0c;该项目使用了GNNinja工具链进行配置&#xff0c;编译&#xff0c;于是开始研究GN如何使用。 本文的所有信息均来自GN官网和本人个人体会。 GN快速入门 使用GN GN的主要功能是根据配置文件&#xff08;.gn, BU…

什么ISP是住宅IP,和普通IP有什么区别?

ISP&#xff08;Internet Service Provider&#xff09;即互联网服务提供商&#xff0c;是向广大用户综合提供互联网接入业务、信息业务和增值业务的电信运营商。住宅IP&#xff0c;也称为家庭IP&#xff0c;是指由ISP分配给家庭或个人用户的IP地址。这些IP地址是真实的&#x…

Eclipse 如何导入一个 Maven 项目

如果你的项目是 Maven 项目的话&#xff0c;导入的时候需要使用 Import&#xff0c;而不能使用打开项目的方式。 选择导入 选择导入 Maven 项目 然后选择 Maven 项目&#xff0c;开始导入。 选择目录后导入 然后选择你需要导入的目录后&#xff0c;单击导入。 Eclipse 如何导…

短视频生成背景文字工具(前端工具)

过年这两天有些无聊就刷刷抖音&#xff0c;刷着刷着自己也蠢蠢欲动&#xff0c;想发上几个&#xff0c;可是却找不到合适自己的模板。由于个人喜欢一些古诗文之类的&#xff0c;所以自己简单的编写了一个小工具&#xff0c;如下图&#xff1a; 当设置好了之后&#xff0c;将浏…

STM32 HAL库F103系列之IIC实验

IIC总线协议 IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 总线就是传输数据通道 协议就是传输数据的规则 IIC总线结构图 ① 由时钟线SCL和数据线SDA组成&#xff0c;并且都接上拉电阻…

机器学习:深入解析SVM的核心概念(问题与解答篇)【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量 在这个线性方程中&#xff…

Apache Seata如何解决TCC 模式的幂等、悬挂和空回滚问题

title: 阿里 Seata 新版本终于解决了 TCC 模式的幂等、悬挂和空回滚问题 author: 朱晋君 keywords: [Seata、TCC、幂等、悬挂、空回滚] description: Seata 在 1.5.1 版本解决了 TCC 模式的幂等、悬挂和空回滚问题&#xff0c;这篇文章主要讲解 Seata 是怎么解决的。 今天来聊一…

SQLite尽如此轻量

众所周知&#xff0c;SQLite是个轻量级数据库&#xff0c;适用于中小型服务应用等&#xff0c;在我真正使用的时候才发现&#xff0c;它虽然轻量&#xff0c;但不知道它却如此轻量。 下载 官网&#xff1a; SQLite Download Page 安装 1、将下载好的两个压缩包同时解压到一个…

【Vue3+Tres 三维开发】02-Debug

预览 介绍 Debug 这里主要是讲在三维中的调试,同以前threejs中使用的lil-gui类似,TRESJS也提供了一套可视化参数调试的插件。使用方式和之前的组件相似。 使用 通过导入useTweakPane 即可 import { useTweakPane, OrbitControls } from "@tresjs/cientos"const {…

大数据面试题 —— Spark数据倾斜及其解决方案

目录 1 调优概述2 数据倾斜发生时的现象3 数据倾斜发生的原理4 如何定位导致数据倾斜的代码4.1 某个 task 执行特别慢的情况4.2 某个 task 莫名其妙内存溢出的情况5 查看导致数据倾斜的 key 的数据分布情况6 数据倾斜的解决方案6.1 使用 Hive ETL 预处理数据6.2 过滤少数导致倾…

Xcode 15构建问题

构建时出现的异常&#xff1a; 解决方式&#xff1a; 将ENABLE_USER_SCRIPT_SANDBOXING设为“no”即可&#xff01;

【Linux命令行艺术】1. 初见命令行

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

基于自注意力机制的长短期记忆神经网络(LSTM-SelfAttention)的回归预测

提示&#xff1a;MATLAB版本需要R2023a以上 基于自注意力机制的长短期记忆神经网络&#xff08;LSTM-SelfAttention&#xff09;是一种用于时序数据预测的模型。这个模型结合了两个不同的结构&#xff0c;即长短期记忆网络&#xff08;LSTM&#xff09;和自注意力机制&#xff…

ddos云服务器有哪些防御方法和优势

本文将介绍云服务器遇到DDoS攻击的应对方法&#xff0c;包括流量清洗、负载均衡、防火墙设置和CDN加速等。同时&#xff0c;文章还介绍了ddos云服务器的防御优势&#xff0c;包括高防护能力、自动化防御、实时监控和报警以及弹性扩展等。通过这些防御方法和ddos云服务器的应用&…
最新文章