RAM汇编指令的简单介绍

2023-10-26

一些常见的概念:

指令和伪指令:

指令和伪指令的本质区别:指令在编译后会生成机器码由CPU去执行,而伪指令只是指导编译的过程,本身不会生成机器码。伪指令是编译器提供的,在编译的过程中,编译器自己会去对伪指令做相应的处理。

什么是汇编指令:

汇编指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行,不同的平台汇编指令是不同的。

合法立即数和非法立即数

ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数

协处理器:

SOC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务。ARM设计上支持多达16个协处理器,但是一般SoC只实现其中的CP15.(cp:coprocessor)协处理器和MMUcache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理等有关。

指令后缀:

同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
B(byte)功能不变,操作长度变为8位
H(half word)功能不变,长度变为16位
S(signed)功能不变,操作数变为有符号
如 ldr ldrb ldrh ldrsb ldrsh
S(S标志)功能不变,影响CPSR标志位
如 mov和movs movs r0, #0

条件后缀:

条件后缀就是在指令后添加下面的后缀,指令只有在满足某些条件下才会执行,相当于C语言里的if语句。比如bleq flag:eq是相等的条件后缀,只有上一句的执行结果是相等,才会执行bleq flag,其他后缀类似。
在这里插入图片描述

常用的汇编语句:

说明:

因为汇编指令条数较多,每一句都去分析太耗时而且没有必要,大部分汇编语句都不常用也不会经常写汇编代码,这里只是对汇编语句进行分类和简单介绍,需要用到时再去查询具体用法。

数据处理指令:

数据传输指令 mov mvn
算术指令 add sub rsb adc sbc rsc
逻辑指令 and orr eor bic
比较指令 cmp cmn tst teq
乘法指令 mvl mla umull umlal smull smlal
前导零计数 clz

CPSR(程序状态寄存器)访问指令:

mrs & msr
mrs用来读psr,msr用来写psr
CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。

跳转指令:

b & bl & bx
b 直接跳转(就没打开算返回)
bl (branch and link),跳转前把返回地址放入lr中,以便返回,用于函数调用
bx跳转同时切换到ARM模式,一般用于异常处理的跳转。

访存指令和软中断指令:

1.ldr/str & ldm/stm & swp
单个字/半字/字节访问 ldr/str
多字批量访问 ldm/stm
2.swi(software interrupt)
软中断指令用来实现操作系统中系统调用

协处理器cp15的操作指令:

1.mcr & mrc
mrc用于读取CP15中的寄存器
mcr用于写入CP15中的寄存器
2.mrc和mcr的用法:
mcr{} p15, <opcode_1>, , , , {<opcode_2>}
opcode_1:对于cp15永远为0
Rd:ARM的普通寄存器
Crn:cp15的寄存器,合法值是c0~c15
Crm:cp15的寄存器,一般均设为c0
opcode_2:一般省略或为0

!的作用

感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。
ldmia r0!, {r2 - r3}
ldmia r0, {r2 - r3}
上面两个语句的区别:没有!的语句,执行完后r0寄存器里的值没有改变;有!的那句,执行完后r0寄存器里的值+8。

^的作用:

^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。
ldmfd sp!, {r0 - r6, pc}
ldmfd sp!, {r0 - r6, pc}^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RAM汇编指令的简单介绍 的相关文章

  • 数字电路的时序分析

    记录一下时序分析的学习 首先搞清楚以下时序分析时用到的名词 记录一下时序分析的学习 1 什么是setup time和hold time 为什么需要setup time和hold time 2 时序路径是什么 有哪些时序路径 3 如何分析时序
  • 单播与多播mac地址

    MAC 地址 Media Access Control Address 是一个用于识别网络设备的唯一标识符 每个网络设备都有一个独特的 MAC 地址 用于在局域网中进行通信 单播MAC地址 单播MAC地址用于单播通信 即一对一的通信模式 当
  • 33.输入捕获原理与配置

    输入捕获原理与配置 参考资料 STM32Fx开发板 STM32Fx开发指南 HAL库版本 第x章 输入捕获实验 STM32Fxx官方资料 STM32Fxx中文参考手册 第x章 通用定时器 笔记基于正点原子官方视频 视频连接https www
  • 【数据手册】LM1117L3芯片的使用

    1 特征 可调或固定输出 1A输出电流 低损耗 在1A输出电流时最大电压为1 3V 0 04 的线路调节 0 2 负载调节 100 热极限燃烧 快速瞬态响应 2 描述 LM1117系列正可调和固定调节器设计提供1A高电流效率 所有内部电路设
  • (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】

    Linux 进程 和 线程 的基本 编程 通讯 和 例程 注 杂记 系列为日常网搜资料的堆砌而积累成之 如有错误恭谢指出 标识为 原创 其实不完全是 只是多引用再整理和加上自己的理解 进行记录备查 大都引自网络 侵删 大量参考 100ask
  • 交叉编译(全志)

    文章目录 一 交叉编译概念 二 香橙派交叉编译 3 带WiringPi库的交叉编译 一 交叉编译概念 交叉编译 就是 在一种平台上编译 编译出来的程序 是放到别的平台上运行即编译的环境 和运行的环境不一样 属于交叉的 例 在进行嵌入式开发时
  • ARM——体系架构

    1 ARM简介 ARM是Advanced RISC Machines的缩写 它是一家微处理器行业的知名企业 该企业设计了大量高性能 廉价 耗能低的RISC 精简指令集 处理器 公司的特点是只设计芯片 而不生产 它将技术授权给世界上许多著名的
  • ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC

    1 计数器 计数器就是每隔一段固定的时间计数值就加一 于是我们可以根据计数值来计算时间 经过的时间 计数值x计数时间间隔 2 定时器 2 1 定时器介绍 定时器具有计时的功能 类似于我们手机自带的倒计时功能 比如我们先给定时器设置计时一小时
  • ARM常用汇编指令

    目录 一 汇编基本语法 1 汇编指令的最典型书写模式 二 常用汇编指令 1 push压栈指令 2 pop出栈指令 3 sub指令 4 add指令 5 movs数据传输指令 6 str指令 7 ldr指令 8 bl指令 9 MOVW指令 10
  • 01_I.MX6U芯片简介

    目录 I MX6芯片简介 Corterx A7架构简介 Cortex A处理器运行模型 Cortex A 寄存器组 IMX6U IO表示形式 I MX6芯片简介 ARM Cortex A7内核可达900 MHz 128 KB L2缓存 并行
  • linux 网络

    网络基础 协议的概念 什么是协议 从应用的角度出发 协议可理解为 规则 是数据传输和数据的解释的规则 假设 A B双方欲传输文件 规定 第一次 传输文件名 接收方接收到文件名 应答OK给传输方 第二次 发送文件的尺寸 接收方接收到该数据再次
  • linux的应用线程同步与驱动同步机制

    同步机制 在 Linux 应用程序和内核中的驱动程序中 有一些常见的同步机制用于实现线程或进程之间的同步和数据访问保护 下面是它们的一些主要机制 Linux 应用程序中的同步机制 互斥锁 Mutex 用于保护共享资源 确保只有一个线程可以访
  • ov5640 PLL时钟、图像大小、帧率寄存器配置

    不同像素和时钟的ov5640摄像头寄存器配置方法 配置摄像头寄存器 网上没有明说的 参考正点原子的文档进行介绍 像素大小配置 0x3801 0x3807 设置ISP大小 0 0 2631 1951 0x3808 0x380B 设置输出图像大
  • 开始前准备

    开始前准备 一 环境预览 二 安装Ubuntu 三 安装arm gcc工具链 四 Ubuntu构建LiteOS所需要的工具链 五 安装STM32CubeMX软件 六 串口调试助手下载 七 ST Link和USB转TTL串口调试工具 一 环境
  • 在ubuntu20.04上安装arm-linux-gcc 4.4.3

    1下载地址 http www friendlyelec com cn download asp 2 将 arm linux gcc 4 4 3 tar gz 拷贝到 bin目录 无法拷贝怎么办 出现这种情况是 Linux 拷贝文件时权限不够
  • 【电赛-软件】CCS安装教程

    CCS安装教程 下载 下载地址 下载地址 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img WhFWuuUy 1679146802762 ccspicture ccs download png 选择第二个CCSTU
  • ARM架构学习(二)——流水线

    本期主题 ARM流水线 往期地址 ARMv7架构学习 ARM流水线 1 流水线概念 2 指令的分解步骤 1 流水线概念 硬件资源总是有限的 有一个明显的方法能改善硬件资源的利用率 这就是pipeline 流水线 技术 其实就是在当前指令结束
  • <Linux开发>驱动开发 -之- Linux LCD 驱动

    Linux开发 驱动开发 之 Linux LCD 驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第一部分 Linux开发
  • 学 Linux 必会的 ARM 汇编指令

    学习 Linux 系统启动流程 必须熟悉几个汇编指令 总结给大家 这里不是最全的 只列出一些最常用的汇编指令 一 数据处理指令 1 数据传送指令 MOV指令 把一个寄存器的值 立即数 赋给另一个寄存器 或者将一个常量赋给寄存器 MOV指令的
  • 如何创建VPC并配置安全组以保护您的阿里云服务器

    将您的基础架构放在云上意味着您可以接触到全球的许多人 但是 这也意味着不怀好意的人可以访问您的服务 保护您的云网络非常重要 阿里云提供虚拟专用网络 VPC 这是一个安全隔离的私有云 将您的弹性计算服务 ECS 实例包含在公有云中 您可以通过

随机推荐

  • matlab 三法求矩阵权重(算数平均法求权重,几何平均法求权重,特征值法求权重)

    三法求矩阵权重 例子为3 3的矩阵 可根据需要修改 算数平均法求权重 clc clear judge 1 6 9 7 8 9 6 1 9 7 8 7 7 9 1 w zeros 3 3 for i 1 3 for j 1 3 w i j j
  • C 结构体字节对齐规则

    参考 https blog csdn net xiaoxiangyuhai article details 79192781
  • mysql数据库加密密码如何解密_MySQL加密和解密实例详解

    MySQL加密和解密实例详解 数据加密 解密在安全领域非常重要 对程序员而言 在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大 有多种前端加密算法可用于数据加密 解密 下面我向您推荐一种简单的数据库级别的数据加密 解密解决方案
  • merge与update区别---->你一定要看!

    merge与update区别 注 就因为这2个方法的区别还得我花了太多时间项目迟迟不能做完 但是让我解决了 学到了东西了 这是一段代码 public void updateData Object obj try tx this getSes
  • Mysql的七种join

    对于SQL的Join 在学习起来可能是比较乱的 我们知道 SQL的Join语法有很多inner的 有outer的 有left的 有时候 对于Select出来的结果集是什么样子有点不是很清楚 Coding Horror上有一篇文章 实在不清楚
  • C++技能系列 ( 5 ) - 详解函数入参/返回参使用(值传递/引用传递/指针传递/智能指针传递)

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待动动小手 点击关注哦 当你休息的时候 一定要想到别人还在奔跑 When you rest we must thi
  • C++学习(六十九)国产先看GPU

    在CPU处理器领域 国产已经涉足了ARM MIPS甚至X86等多种指令集架构 不论自研还是授权都已经有所成就 但在GPU领域 国内厂商面对AMD NVIDIA两座大山恐怕连影都追不上 GPU市场的门槛太高 所以国内搞GPU自主研发的公司也有
  • Spring boot升级为Spring cloud配置修改(服务注册和服务发现简单案例)

    一 Spring Boot 升级Spring Cloud 1 导入Spring Cloud相关jar包 修改pom xml文件 备注 可能不同的Spring Boot版本会对应不同的Spring Cloud版本号 以下配置的Spring B
  • Android学习笔记——列表和适配器

    文章目录 一 ArrayAdapter适配器 二 下拉列表 Spinner 三 XML文件的引用 四 列表视图 listview 五 网格视图 GridView 六 自定义适配器 总结 一 ArrayAdapter适配器 适配器的角色就是将
  • 漏洞深入分析-2021

    前言 随着cve 2021 40444的披露 随机引爆了全球的网络安全 虽然最近微软发布了补丁 但是cve 2021 40444的利用却越发猖狂 0x00 0day样本分析 拿到样本的第一时间 便在自己的沙箱环境下面运行了下 并且从网上下载
  • 操作系统课设之Linux 进程间通信

    前言 课程设计开始了 实验很有意思 写博客总结学到的知识 白嫖容易 创作不易 学到东西才是真 本文原创 创作不易 转载请注明 本文链接 个人博客 https ronglin fun archives 175 PDF链接 见博客网站 CSDN
  • ESP32 开发的坑 太多了,满地都是

    jlink 死活 不能正常工作 1 无法连接到gdb 2连接上了 也无法下载程序 Warn Failed to send data to device LIBUSB ERROR TIMEOUT OpenOCD Error Sending d
  • 算法 常见数学问题

    一 最大公约数 gcd int gcd int a int b if b 0 return a else return gcd b a b 非递归形式 int gcd int a int b int tmp while b 0 tmp a
  • ubuntu20下Qt5.14.2+OpenCV(含Contrib)-4.5.0环境搭建

    Qt若要能处理图片和视频 就必须安装OpenCV 而OpenCV中很多的高级功能如人脸识别等都包含在Contrib扩展模块中 需要将Contrib与OpenCV一起联合编译 目前所用这两个版本都是4 5 0版 一 下载OpenCV Open
  • hd630 黑苹果_黑苹果(hackintosh)技术整合指南

    更新 2019 5 15日 优化结构 去除了扩展 把他们合并到正文 把无关的东西扔后面 2019 4 10号 链接了本站大神翟海生的纯净安装教程 一位简书大佬解释和配置config文件的文章 非常详细 十分推荐 第一 常用的论坛 工具网站介
  • three.js加载管理器LoadingManager实现对纹理图片的加载监听

    一 加载管理器LoadingManager使用介绍 LoadingManager是three js中的加载管理器 用于监控和管理加载资源的过程 通过使用LoadingManager 我们可以在应用程序中方便地加载各种类型的数据 例如模型 纹
  • POJ 1811 Prime Test —— Miller_Rabin+Pollard_Rho

    http poj org problem id 1811 题意 给定一个64位整数 问是否为质数 如果不是 则输出其最小因子 分析 Miller Rabin素数判定 若不是 则Pollard Rho分解质因子 找到最小即可 Miller r
  • 【对比Java学Kotlin】作用域函数

    什么是作用域函数 首先 落脚点是函数 什么的函数呢 能在某个上下文对象 可能是普通对象 也可能是个 Unit 的作用域内执行代码的函数 这里的作用域和 Java 的作用域有所不同 Java 的作用域更多的是指一对闭合的 的内部区域 void
  • Oracle数据库环境变量配置+修改数据库密码

    1 设置环境变量 必须设置环境变量才可以用CMD命令访问Oracle数据库 1 1 首先找到你Oracle安装位置路径 C app Administrator product 11 2 0 dbhome 1 1 2 设置环境变量 1 2 1
  • RAM汇编指令的简单介绍

    一些常见的概念 指令和伪指令 指令和伪指令的本质区别 指令在编译后会生成机器码由CPU去执行 而伪指令只是指导编译的过程 本身不会生成机器码 伪指令是编译器提供的 在编译的过程中 编译器自己会去对伪指令做相应的处理 什么是汇编指令 汇编指令