ARM 汇编基础

news2024/10/6 22:34:05

一、ARM架构

ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:

  • 对内存只有读、写指令
  • 对于数据的运算是在CPU内部实现
  • 使用RISC指令的CPU复杂度小一点,易于设计

比如对于a=a+b这样的算式,需要经过下面4个步骤才可以实现:

在这里插入图片描述

细看这几个步骤,有些疑问:

  • 读a,那么a的值读出来后保存在CPU里面哪里?
  • 读b,那么b的值读出来后保存在CPU里面哪里?
  • a+b的结果又保存在哪里?

我们需要深入ARM处理器的内部。简单概括如下,我们先忽略各种CPU模式(系统模式、用户模式等等)。

算术逻辑单元(Arithmetic&logical Unit)是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分。
在这里插入图片描述


CPU运行时,先去Flash上取得指令,再执行指令:

  • 把内存a的值读入CPU寄存器R0
  • 把内存b的值读入CPU寄存器R1
  • 把R0、R1累加,存入R0
  • 把R0的值写入内存a

怎么理解Flash上的指令?看下一节。


一个片上系统的最小组成部分如下:

在这里插入图片描述


二、 汇编指令

当前只介绍5条汇编指令:

  • 读内存:Load,LDR
  • 写内存:Store,STR
  • 加减法:ADD, SUB
  • 入栈:PUSH,实质上就是写内存STR
  • 出栈:POP,实质上就是读内存LDR
  • 跳转:BL,即 Branch And Link

在这里插入图片描述


其他知识:

  • CPU内部有 R0、R1、……、R15 共16个寄存器
  • 某些寄存器有特殊作用
    • R13,别名SP,栈寄存器,保存着栈的地址
    • R14,别名LR,返回地址,保存着函数的返回地址
    • R15,别名PC,程序计数器,也就是当期程序运行到哪了

在这里插入图片描述


要读内存:读内存哪个地址?读到的数据保存在哪里?读多少字节?

  • LDR R0, [R1, #0x00]
    • 源地址:R1+0x00,注意:不是读R1,是把R1的值当做内存的地址
    • 目的:R0,CPU的寄存器
    • 长度:4字节,LDR指令就是读4字节,LDRH是读2字节,LDRB是读1字节

在这里插入图片描述


要写内存:写内存哪个地址?从哪里得到数据?写多少字节?

  • STR R0, [R1, #0x00]
    • 目的地址:R1+0x00,注意:不是写R1,是把R1的值当做内存的地址
    • 源:R0,CPU的寄存器
    • 长度:4字节,STR指令就是读4字节,STRH是读2字节,STRB是读1字节
      在这里插入图片描述

加减法指令,不涉及内存操作,只在 CPU 寄存器上操作。

在这里插入图片描述


入栈:把CPU的寄存器的值,写到内存上

  • PUSH {R3, LR}

    • 源:CPU的寄存器R3、LR的值
    • 目的:内存,内存哪里?使用CPU的 SP(stack pointer)寄存器指定内存地址
    • 长度:大括号里所有寄存器的数据长度,每个寄存器4字节
    • 注意:低编号的寄存器,保存在内存的低地址处 ,即:高标号寄存器写入高地址的栈里,低标号寄存器写入低地址的栈里
    • 执行结果如下

    在这里插入图片描述

在这里插入图片描述


出栈:把内存中的数值,写到CPU的寄存器

  • POP {R3, PC}
    • 源:内存,内存哪里?使用CPU的 SP(stack pointer)寄存器指定内存地址

    • 目的:CPU的寄存器R3、PC的值

    • 长度:大括号里所有寄存器的数据长度,每个寄存器4字节

    • 注意:内存的低地址处的数据,写到CPU低编号的寄存器,即:高标号寄存器的内容来自高地址的栈,低标号寄存器的内容来自低地址的栈

    • 执行结果如下

      在这里插入图片描述

在这里插入图片描述


LR(R14)寄存器

  • 子程序的返回地址:从子程序返回后,主程序继续执行的指令的地址称为子程序的返回地址
  • LR也叫链接寄存器,用于存放子程序的返回地址。在要进入子程序之前,先将子程序的返回地址存入LR

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebShell箱子简介与原理

今天继续给大家介绍渗透测试相关知识,本文主要内容是WebShell箱子简介与原理。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授…

【面试】【项目】谷粒商城

视频链接 项目调查 这项目是这么多免费视频里最好的了。但依旧是demo。 最好还是买慕课网上的实战课,那些老师都有丰富的开发经验,有经验跟没经验讲的课是完全不同的。 谷粒商城我觉得是不low的,我很菜,毕业一年半被多次辞退&a…

数据结构之-【排序】

目录 排序 ⚡️冒泡排序 ⚡️选择排序 ⚡️插入排序 ⚡️堆排序 ⚡️归并排序 ⚡️快速排序 🏳️‍🌈排序 将数字从小到大的顺序排列 🔴冒泡排序 「冒泡排序」重复"从序列右边开始比较相邻两个数字的大小,再根据结果交换两个…

国产蓝牙耳机哪个牌子好?国产蓝牙耳机质量排行榜

随着3.5 mm耳机插孔被淘汰,特别是5G时代,让手机的内部结构变得越来越小,要将耳机插口塞进一个新的插口,无疑是一件非常困难的事情,而随着蓝牙技术的不断进步,蓝牙耳机也逐渐成为了如今人们配戴手机的首选&a…

Revit中阀门在项目中不可用无法与管道连接?

一、Revit中阀门在项目中不可用的问题 在项目中放置阀门时,有时候不可用,会出现如图1所示问题,无法与管道连接。 出现上图显示问题是因为在编辑族的时候,阀门两边的连接件原心没有完全重合。打开编辑族界面,可以看到如…

怎么辨别哪些才是真的低代码开发平台?

怎么辨别哪些才是真的低代码开发平台?第一次看到这个问题时,我就知道为什么有人会这么问了,目前低代码市场龙蛇混杂,普通人很难分辨出“真”低代码。所以这个问题中“真正”二字最为重要,圈起来,下面我们正…

【产品新体验】CSDN开发云·云IDE使用教程

【产品新体验】CSDN开发云云IDE使用教程1、初识云IDE1.1 拉去git项目1.2 密钥管理2、整体分析云IDE产品介绍 云IDE使用教程 免费使用地址:点击【云IDE】,即可开始创建工作空间啦~ CSDN最新产品【云IDE】来啦!【云IDE】将为各位技术er一键秒级…

No6-3.从零搭建spring-cloud-alibaba微服务框架,实现资源端用户认证与授权等(三,no6-3)

代码地址与接口看总目录:【学习笔记】记录冷冷-pig项目的学习过程,大概包括Authorization Server、springcloud、Mybatis Plus~~~_清晨敲代码的博客-CSDN博客 之前只零碎的学习过spring-cloud-alibaba,并没有全面了解过,这次学习p…

【Python】入门,总结与拾遗

前言 根据我的实践经验来看,对于有编程基础(如C语言)的同学来说,python入门应该很简单,而且加上官方文档做得非常好,所以个人建议python的学习主要去参考官网。本博客主要是记录那些容易忽略的关键点以及对…

蓝桥杯单片机第七届省赛题详细讲解(温度记录器)

看之前强烈建议先自己做一遍!!!演示效果题目讲解代码main.cds1302.cds1302.honewire.conewire.h工程文件演示效果 题目讲解 首先我们从系统框图看起: 做题之前要做的是把系统框图里面的各个模块先提前调试好!&#x…

StarRocks 的学习笔记

StarRocks 的学习笔记 文章目录StarRocks 的学习笔记1. 介绍1.1 StarRocks 特性1.2 使用场景1.3 OLAP 多维分析1.4 实时数据仓库1.5 高并发查询1.6 统一分析2. 系统架构2.1 StarRocks架构2.2 StarRocks业务架构2.3 StarRocks 数据生态2.4 *数据管理3. 特性3.1 MPP分布式执行框架…

ES6中的set与map

文章目录1.set1.1创建set集合1.2 如何对set集合进行后续操作1.3 如何与数组进行相互转换1.4 如何遍历1.5set的应用2.map集合2.1 如何创建map2.2 如何进行后续操作2.3 如何与数组转换2.4 遍历一直以来,JS只能使用数组和对象来保存多个数据,缺乏像其他语言…

介绍document部分自带的方法及属性,场景使用例如倒计时等

适用场景页面不显示(不看)触发方法停止运行逻辑,页面显示(看)触发方法继续运行逻辑。 (例如倒计时) 操作手法触发,浏览器多页签切换时触发,或者当前页隐藏浏览器&#xf…

飞象星球落地舟山36所学校 双师课堂化解课后服务区域资源差异

傍晚的阳光正好,此时舟山二小北校区五年级学生周陈延正紧盯大屏幕,沉醉在《航天探秘》飞象星球双师素质课堂带来的知识奥义中。作为浙江极具特色的海岛城市,舟山正进行着有关课后服务领域的新探索,双师素质课堂便是“千岛之城”舟…

VSCODE联合ModelSim语法检错

Vscode联合ModelSim检错 一、Vscode配置 首先在 vs code 中安装支持 Verilog 的插件: 在 vs code 的 Extension 中搜索 Verilog,安装如下图所示的插件; 二、ModelSim语法检查器检查 Modelsim的安装破解本文不再赘述,可选的Mod…

【初阶数据结构】第一篇——时间复杂度和空间复杂度详解(C描述)

文章目录前言什么是数据结构?什么是算法?1. 算法效率1.1如何衡量一个算法的好坏1.2 算法的复杂度1.2 复杂度在校招中的考察2. 时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3 常见时间复杂度计算举例例1双重循环例2. 多未知数例3. 常数次循环例4…

【深度学习】卷积神经网络之双阶段目标检测|R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN、R-FCN

文章目录基本概念一、R-CNN1. 网络结构2. 训练流程3. 测试阶段5.RNN存在的问题二、SPP-Net1. 网络结构2. 基础知识共享卷积计算金字塔池化 Spatial Pyramid Pooling3. 训练流程4. 测试流程5. 存在问题三、 Fast R-CNN1. 网络结构2. 基础知识感兴趣区域池化层 (ROI pooling)多任…

别再被数据分析“割韭菜了”,光学python、BI没有用,上项目才行

前几天有个粉丝找我,说花699报了一门数据分析课程,还有实战项目,让我帮她看看她做的数据分析。项目的名称叫:豆瓣高分电影分析。她写了一大堆内容,我也没细看,截取几张可视化图表给大家,大家觉得…

嵌入式串口转CAN模块详细参数分析

引脚定义和尺寸 测试评估板 将模块插到评估板上,注意模块引脚标注要与评估板上插座引脚标注相对应,然后进行参数设置。特别的,也可以在模块集成到电路板上后,直接通过模块的CAN口来配置参数。 通过CAN通道配置参数 模块集成到用…

基于javaweb+mysql的就业管理系统设计和实现(java+springboot+ssm)

基于javawebmysql的就业管理系统设计和实现(javaspringbootssm) 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 功能说明 基于jav…