ARM V8 A32常用指令集

news/2024/10/4 1:26:08/

文章目录

  • 1. 算术指令
    • 1.1 加法命令ADD\ADDS
    • 1.2 带进位加法命令ADC\ADCS
    • 1.3减法命令SUB\SUBC
    • 1.4带借位减法命令SBC\SBCS
  • 2.逻辑运算指令
    • 2.1逻辑与指令AND、ANDS
    • 2.2位清零指令BIC
    • 2.3逻辑或指令ORR\ORRS
    • 2.4逻辑异或指令
    • 2.5 逻辑左移LSL
    • 2.6逻辑右移LSR
  • 3.比较指令
    • 3.1直接比较指令CMP
    • 3.2负数比较指令CMN
  • 4.移动指令
    • 4.1MOV指令
    • 4.2MVN指令
  • 5.跳转指令
    • 5.1 B指令
    • 5.2 BL指令
    • 5.3 BX指令
    • 5.4 BLX指令
  • 6. 加载/存储指令
    • 6.1 LDR\LDRB\LDRH指令
    • 6.2 STR\STRB\STRH指令
  • 7. 批量数据加载/存储指令指令

记录ARM V8 A32常用指令集。

调试时常用的汇编命令:ADD\SUB\MOV\LDR\STR\BL\CMP等命令

具体可以参考官方文档:DUI0801C_armasm_user_guide

1. 算术指令

1.1 加法命令ADD\ADDS

在这里插入图片描述

1.2 带进位加法命令ADC\ADCS

在这里插入图片描述

1.3减法命令SUB\SUBC

在这里插入图片描述

1.4带借位减法命令SBC\SBCS

在这里插入图片描述

2.逻辑运算指令

2.1逻辑与指令AND、ANDS

在这里插入图片描述

2.2位清零指令BIC

在这里插入图片描述

2.3逻辑或指令ORR\ORRS

在这里插入图片描述

2.4逻辑异或指令

在这里插入图片描述

2.5 逻辑左移LSL

移位进来值补0
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/98d41fef2fb64cf09a74bef9b32b3e80.pn

2.6逻辑右移LSR

在这里插入图片描述

3.比较指令

3.1直接比较指令CMP

在这里插入图片描述

3.2负数比较指令CMN

在这里插入图片描述

4.移动指令

4.1MOV指令

在这里插入图片描述

4.2MVN指令

在这里插入图片描述

5.跳转指令

跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:
使用专门的跳转指令。
直接向程序计数器PC写入跳转地址值。
通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。
ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:
B 跳转指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令

5.1 B指令

在这里插入图片描述

5.2 BL指令

在这里插入图片描述

5.3 BX指令

在这里插入图片描述

5.4 BLX指令

在这里插入图片描述

6. 加载/存储指令

6.1 LDR\LDRB\LDRH指令

在这里插入图片描述
备注:LDR R,label 和 LDR R,=label的区别
LDR 是ARM中的指令,也是伪指令。
当用 LDR r, =imd // r 为寄存器, imd为立即数
LDR 是一条伪指令。编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn指令。
当imd能用mov或者mvn操作时,就将它翻译成一条mov或mvn指令。当imd大于mov或mvn能够操作的数时,编译器会将imd存在一个内存单元中,然后再用一条ldr指令加载这个内存单元的的值到寄存器中。
LDR r, label 和 LDR r, =label的区别:
LDR r, =label 会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。
例如label的值是 0x8000, LDR r, =label会将 0x8000加载到寄存器中,而LDR r, label则会将内存0x8000处的值加载到寄存器中。

6.2 STR\STRB\STRH指令

在这里插入图片描述

7. 批量数据加载/存储指令指令

LDM 批量数据加载指令
STM 批量数据存储指令
在这里插入图片描述


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

相关文章

华为仓颉语言入门(7):深入理解 do-while 循环及其应用

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 用法说明 do-while 表达式是一种控制循环的结构,它允许代码在每次循环之后进行条件判断。在这个表达式中,无论条件一开始是否满足,代码块都会被至少执行一次。 语法…

漫谈前端:2025年框架是该选vue还是react?

相信很多前端小伙伴都有过纠结的时候,开始一个项目的时候是该选vue还是react。很多情况下,都是根据团队现有框架延续,或者是自身数量度。渐渐的公司组件和规范全基于某一种框架,虽然很爽但Allin难掉头。本文就浅浅的比较下vue和re…

Spring Redis 使用总结

1.简介 Spring中常用Redis做数据库的缓存,第一次查询走数据库并缓存到redis,第二次查询由redis直接返回数据。 2.安装Redis mac安装: brew install redislinux安装: sudo apt-get install lsb-release curl gpg curl -fsSL …

【CSS】兼容处理

兼容前缀兼容查询 由于不同浏览器对CSS标准的支持程度不同,可能会导致在不同浏览器中出现样式差异。为了解决这个问题,需要采取一些措施来提高CSS的兼容性 兼容前缀 兼容前缀针对的浏览器-webkit-WebKit 内核浏览器,如:Safari 、…

#git 问题failed to resolve head as a valid ref

问题如下: 解决方法: 1、运行 git fsck --full 可以查看具体error信息,一般都是head索引问题 2、.git\refs\heads\xxx(当前分支)txt编辑器打开显示乱码,而不是hash编码 3、在.git\logs\refs\heads\xxx&a…

【代码随想录Day29】贪心算法Part03

134. 加油站 题目链接/文章讲解:代码随想录 视频讲解:贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {// 创建一…

基于深度学习的不遗忘训练

基于深度学习的不遗忘训练(也称为抗遗忘训练或持久性学习)是针对模型在学习新任务时可能会忘记已学习内容的一种解决方案。该方法旨在使深度学习模型在不断接收新信息的同时,保持对旧知识的记忆。以下是这一领域的主要内容和方法:…

OpenCV-图像拼接

文章目录 一、基本原理二、步骤三、代码实现1.定义函数2.读取图像3.图像配准(1).特征点检测(2).特征匹配 4.透视变换5.图像拼接 四、图像拼接的注意事项 图像拼接是一种将多张有重叠部分的图像合并成一张无缝的全景图或高分辨率图…