ARM V8 A32常用指令集

文章目录

记录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

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 批量数据存储指令

相关推荐
程序员JerrySUN11 小时前
别再把 HTTPS 和 OTA 看成两回事:一篇讲透 HTTPS 协议、安全通信机制与 Mender 升级加密链路的完整文章
android·java·开发语言·深度学习·流程图
j_xxx404_11 小时前
C++算法:一维/二维前缀和算法模板题
开发语言·数据结构·c++·算法
郝学胜-神的一滴12 小时前
系统设计与面向对象设计:两大设计思想的深度剖析
java·前端·c++·ue5·软件工程
蓝天智能12 小时前
QT实战:Qt6 字符编码避坑指南
开发语言·qt
xier_ran12 小时前
【第一周】关键词解释:倒数排名融合(Reciprocal Rank Fusion, RRF)算法
开发语言·python·算法
HelloWorld__来都来了12 小时前
如何用python爬取上市公司信息
开发语言·python
myloveasuka12 小时前
[Java]子类到底能继承父类中的哪些东西?继承中成员变量/方法访问特点---就近原则
java·开发语言
umeelove3512 小时前
vscode配置django环境并创建django项目(全图文操作)
java
x-cmd12 小时前
[260307] x-cmd v0.8.6:新增 gpt-5.4 模型支持,sudo/os/hostname/cpu 等模块文档更新
java·数据库·gpt·sudo·x-cmd·googel
PPPPickup12 小时前
深信服公司---java实习生后端一二面询问
java·后端·ai