ARM 汇编指令集1_2

news2025/1/20 22:41:16

一、两个概念:指令与伪指令

  • (汇编)指令,是 CPU 机器指令的助记符,经过编译后会得到一串10组成的机器码可以由 CPU 读取执行
  • (汇编)伪指令,本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码

二、两种不同风格的 ARM 指令

  • ARM 官方的 ARM 汇编风格:指令一般用大写、Windows 中 IDE 开发环境(如 ADS、MDK 等)常用。如: LDR R0, [R1]
  • GNU 风格的 ARM 汇编:指令一般用小写字母、linux 中常用。如:ldr r0, [r1]

注意:

  • 汇编指令对应于 CPU 执行的机器码,不管是 Windows 风格,还是 GNU 风格,都是一样的(只是大小写区别);
  • 伪指令属于编译环境的一部分,取决于编译环境。因此 Windows 风格和 GNU 风格的伪指令,是完全不同的;

三、ARM 汇编特点

汇编特点1:LDR/STR架构

  • ARM 采用 RISC 架构,CPU 本身不能直接读取内存,而需要先将内存中内容加载入 CPU 中的通用寄存器中,才能被 CPU 处理。
  • ldr(load register)指令将内存内容加载入通用寄存器
  • str(store register)指令将寄存器内容存入内存空间
  • ldr/str 组合用来实现 ARM CPU 和内存数据的交换。

汇编特点2:8 种寻址方式

mov 指令的操作数,是寄存器与寄存器之间

  • 寄存器寻址 mov r1, r2
  • 立即寻址 mov r0, #0xFF00
  • 寄存器移位寻址 mov r0, r1, lsl #3

ld,st 指令的操作数,是寄存器与内存空间之间

  • 寄存器间接寻址 ldr r1, [r2] @ r2代表内存空间的地址
  • 基址变址寻址 ldr r1, [r2, #4] @ r2 + 4 ,代表内存空间的地址
  • 多寄存器寻址 ldmia r1!, {r2-r7, r12} @ r1 保存的内存地址作为起始地址, 相当于一个数组,将数组的值存放到{r2-r7, r12} 6 个寄存器组当中
  • 堆栈寻址 stmfd sp!, {r2-r7, lr} @ 同上,将 sp 寄存器保存的内存地址开始,连续取出内存内容,放到 {r2-r7, lr} 寄存器组当中
  • 相对寻址 beq flag
    flag:
    其中 flag: 是标号,相当于 C语言中 goto 语句将要跳转到的标号位置。

汇编特点3:指令后缀

同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:

  • B(byte)功能不变,操作长度变为8位;

  • H(half word)功能不变,长度变为16位;

    ARM 汇编默认是 32 bit 指令,默认处理的也是 32 bit 数据。当你一次不想处理 32 bit 数据,就可以使用 B 或者 H,如:ldr ldrb ldrh。

  • S(signed)功能不变,操作数变为有符号;
    如 ldrsb ldrsh。

  • S(S标志)功能不变,影响CPSR标志位;
    如 mov 和 movs movs r0, #0


汇编特点4:条件执行后缀

在这里插入图片描述

mov r0, r1		@ 相当于C语言中的r0 = r1;
moveq r0, r1	@ 如果eq后缀成立,则直接执行mov r0, r1;如果eq不成立则本句代码直接作废,相当于没有
			    @ 类似于C语言中 if (eq){r0 = r1;}

条件后缀执行注意2点:
1、条件后缀是否成立,不是取决于本句代码,而是取决于这句代码之前的代码运行后的结果。
2、条件后缀决定了本句代码是否被执行,而不会影响上一句和下一句代码是否被执行。


ARM汇编特点 5:多级指令流水线

  • 为增加处理器指令流的速度,ARM 使用多级流水线.,下图为 3 级流水线工作原理示意图。(S5PV210 使用13 级流水线,ARM11 为 8 级)
    • 允许多个操作同时处理,而非顺序执行。

在这里插入图片描述

  • PC指向正被取指的指令,而非正在执行的指令

B站朱友鹏老师.

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

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

相关文章

版本控制利器——changelog

问题描述 当前,我们项目需要进行版本的确定,人工审核代码已接近尾声,但为了防止后续继续出现该问题,我希望能够做到在每次push到master时,更新changelog 将每一个版本的commit记录下来,类似于下列 解决…

K8s 集成 Jenkins 部署Go Web项目

风离不摆烂学习日志 Day9 K8s 集成 Jenkins 部署Go Web项目 Dockerfile FROM golang:alpine as builder # 需要go环境 MAINTAINER fl1906WORKDIR /work # 源 RUN go env -w GOPROXYhttps://goproxy.cn && go env -w CGO_ENABLED0 && go env -w GO111MODULEon C…

Splunk UBA 从 Ldap 成功导入 HR 数据

1: 今天在配置Splunk UBA 的HRdata 和asset data 的时候,都要用到ldap, 所以还非要装add-on:\ add-on 的名字: Splunk Supporting Add-on for Active Directory (SA-LDAPSearch) (SA-LDAPSearch) 这个add-on 的配置: Configure the Splunk Supporting Add-on for Activ…

使用腾讯云cos搭建图片服务器

背景 当我们能不希望把图片上传到自己的服务器时,可以采用腾讯云cos帮我们免费代图片,我们只需要在自己的数据库里保存一个图片地址就行了 二、注册账号免费试用 1、注册腾讯云账号 按照腾讯云的注册方式,注册自己的账号 2、实名认证 选择个…

blender boxCutter插件

boxCutter可以用来进行bool运算 打开boxCutter 方法1:物体模式在舞台左侧选择boxCutter图标 方法2:物体模式按N,在舞台右侧的侧边栏里选择boxCutter 方法3 物体模式alta 打开BoxCutter后,舞台上方,N键的弹出菜单&…

进行 Spring 6 迁移的最佳方式

介绍 在本文中,我们将了解如何将现有应用程序迁移到Spring 6以及如何充分利用此升级。 本文中的提示基于我在Hypersistence Optimizer和高性能 Java Persistence 项目中添加对 Spring 6 的支持所做的工作。 爪哇 17 首先,Spring 6 将最低 Java 版本提…

2022.11.27 学习周报

文章目录摘要文献阅读1.题目2.摘要3.介绍4.基于后向传播算法的多时间尺度RNN4.1 循环神经网络(RNN)4.2 基于多时间尺度的RNN预测模型5.实验5.1 数据简介5.2 数据分析5.3 评价指标5.4 实验结果6.结论深度学习1.循环神经网络(RNN)1.…

Flutter 5 大本地数据库解决方案

Flutter 5 大本地数据库解决方案 原文 https://levelup.gitconnected.com/top-5-local-database-solutions-for-flutter-development-6351cd494070 前言 这里列出了最流行的数据库解决方案以及代码示例。 选择正确的数据管理系统对于提高效率和可 extension 性以及影响可用性和…

3DConvCaps:3DUNet与卷积胶囊编码器用于医学图像分割

摘要 卷积神经网络需要大量的训练数据,无法处理物体的姿态和变形。此外其中的池化层也倾向于丢弃位置等重要的信息。CNN对旋转和仿射变换非常敏感。 胶囊网络是最近出现的一种新型体系结构,其通过动态路由和卷积步长代替池化层,在部分整体表…

steam搬砖项目的核心内容解答

大家好,我是阿阳 如果你有个几千块钱积蓄,想做点小生意,又不知道做啥,那我建议你来做steam搬砖,steam搬砖是什么呢?steam搬砖怎么赚钱的呢?你听我一步步跟你说来 steam搬砖是什么呢&#xff1f…

详解GMM高斯混合模型EM模型

一般讲到GMM就会讲到EM。 我不过多的介绍EM算法。这里只是举一些例子来看看真实的GMM怎么用EM算的。 一、GMM的作用 记住GMM的作用,就是聚类! 二、GMM有hard和soft两种 hard-GMM和soft-GMM是为了对标k-means和soft k-means。在中文互联网上搜索到的GM…

【SVM分类】基于matlab哈里斯鹰算法优化支持向量机SVM分类【含Matlab源码 2243期】

⛄一、哈里斯鹰算法简介 HHO算法用数学公式来模拟现实中哈里斯鹰在不同机制下捕捉猎物的策略.在HHO中,哈里斯鹰是候选解,猎物随迭代逼近最优解.HHO算法包括两个阶段:全局探索阶段、局部开采阶段。 1 全局探索阶段 在这一阶段中,哈…

springboot thymeleaf使用

导入依赖 <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.11.RELEASE</version> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <a…

springboot集成swagger并更换主题

前言 swagger对于web一个开发人员&#xff0c;可以说是非常熟悉的了&#xff0c;之前都是用的公司搭好的框架拿来就用&#xff0c;自己也没有研究过&#xff0c;最近想搞一个自己拿来练手的基础框架&#xff0c;因此来记录一下springboot集成swagger的过程和注意事项。 swagg…

云南白药正在度过“中年危机”

​文丨熔财经 作者|kinki 今年&#xff0c;正是云南白药创制的120周年&#xff0c;虽然是一个百年老字号品牌&#xff0c;但在过去的数年间&#xff0c;云南白药在新品研制、跨界发展乃至品牌推广上都做了不少新尝试。今年&#xff0c;云南白药更提出了“141”战略&#xff0…

备战 2023 春招,P7大咖位手打 26 大后端面试专题神技,1500+题解析助力offer

年过后&#xff0c;不少人已经蓄势待发&#xff0c;信心满满地准备投递简历&#xff0c;到处面试&#xff0c;在不同的 Offer 之中择优而栖。 与此同时&#xff0c;也有人会悔恨自己这半年进步不大&#xff0c;每天噼里啪啦敲代码&#xff0c;但面对那些不能再熟悉的 Java 面试…

分布式解决方案 Percolator--详解

Percolator简介 Google在2012年将Percolator的架构设计作为论文发表&#xff0c;其目的是构建于BigTalbe的基础上&#xff0c;主要用于网页搜索索引等服务。由于BigTable只支持单行级别的事务&#xff0c;不支持多行事务等更复杂的事务&#xff0c;因此Percolator的诞生就是为了…

数据增强:Simple Questions Generate Named Entity Recognition Datasets

数据增强的方式一般是无标注数据集的情形的一种解决方式&#xff0c;今天的讲座报告中对这问题做了梳理。11.27学术报告文章&#xff0c;应该是韩旭的报告。 文章目录问题背景一、论文核心二、文章内容三、experiments总结问题背景 还是在于方法的创新&#xff0c;虽然是数据增…

Centos7下安装Oracle11g

1. 下载安装包 由于Oracle官网上无法下载Oracle数据库之前的版本&#xff0c;可以在 Oracle Software Delivery Cloud 里搜索oracle database 11g 或者百度网盘下载链接&#xff1a;https://pan.baidu.com/s/1r57xI5fSVba_Q3biCj06yg 提取码&#xff1a;xk30 2. 创建运行ora…

【BSC】使用Python玩转PancakeSwap(入门篇)

需求 最近我们需要在BSC上实现代币的自动化兑换&#xff0c;比如自动把BNB兑换成USDT&#xff0c;自动把USDT兑换成CAKE等其它代币&#xff0c;同时也要监视价格&#xff0c;在价格合适的时候再兑换代币。而PancakeSwap正是BSC上最大的去中心化平台&#xff0c;我们已经学会了…