ARM64汇编常用的指令分为以下几类类型
1、数据处理指令
2、加载/存储指令
3、条件执行指令
4、堆栈操作指令
5、分支指令
6、中断和异常指令
7、返回指令
了解完他们的类型之后我就来了解一下他们的用途
数据处理指令的用途是什么?
数据处理指令主要用于对寄存器中的数据进行各种算术、逻辑、移位等操作
常见的数据处理指令包括算术指令、逻辑指令、移位指令、比较指令
常见的算术指令有ADD、SUB、MUL、NEG等
他们的作用如下
ADD:加法
将两个寄存器的值相加,并将结果存入目标寄存器。
SUB:减法
将一个寄存器的值从另一个寄存器中减去,并将结果存入目标寄存器。
MUL:乘法
将两个寄存器的值相乘,并将结果存入目标寄存器。
NEG:取负
取寄存器中的值的负数,并存入目标寄存器。
=======================================================================
常见的逻辑指令有AND、ORR、EOR、EOR、BIC、MOV等
AND:按位与
对两个寄存器的值执行按位与操作,并将结果存入目标寄存器。
ORR:按位或
对两个寄存器的值执行按位或操作,并将结果存入目标寄存器。
EOR:按位异或
对两个寄存器的值执行按位异或操作,并将结果存入目标寄存器。
BIC:按位清除
对两个寄存器的值执行按位与非操作,将结果存入目标寄存器。
MOV:数据传送
将一个寄存器的值复制到另一个寄存器,或者将一个常数加载到寄存器。
=======================================================================
常见的移位指令有LSL、LSR、ASR、ROR等
LSL:逻辑左移
将寄存器中的值按位向左移动指定的位数,空位用零填充。
LSR:逻辑右移
将寄存器中的值按位向右移动指定的位数,空位用零填充。
ASR:算术右移
将寄存器中的值按位向右移动指定的位数,空位用符号位填充。
ROR:循环右移
将寄存器中的值循环向右移动指定的位数,即移位时溢出的位会被放到低位。
=======================================================================
常见的比较指令有CMP、CMN等
CMP:比较
将两个寄存器的值相减,但不保存结果,只更新条件标志。
CMN:比较并加
将两个寄存器的值相加,并更新条件标志。
加载/存储指令的用途是什么?
加载和存储指令用于在内存与寄存器之间进行数据的传输。
加载指令:将内存中的数据加载到寄存器。
存储指令:将寄存器中的数据存储到内存。
常见的加载指令有LDR、LDRB、LDRH、LDM
LDR:加载寄存器
将内存中的数据加载到目标寄存器。
LDRB:加载寄存器字节
将内存中的一个字节加载到目标寄存器。
LDRH:加载寄存器半字
将内存中的半字加载到目标寄存器。
LDM:加载多个寄存器
将内存中的多个数据加载到多个寄存器中。
=======================================================================
常见的存储指令有STR、STRB、STRH、STM
STR:存储寄存器
将目标寄存器中的数据存储到内存中。
STRB:存储寄存器字节
将目标寄存器中的一个字节存储到内存中。
STRH:存储寄存器半字
将目标寄存器中的半字存储到内存中。
STM:存储多个寄存器
将多个寄存器中的数据存储到内存中。
条件执行指令的用途是什么?
条件执行指令通常用于根据特定的条件来决定是否执行某条指令
常见的条件执行指令有B、BEQ、BNE、BGT、BLT等
B:无条件跳转
执行跳转到指定的标签位置。
BEQ:等于
如果零标志为1,跳转到指定位置。
BNE:不等于
如果零标志为0,跳转到指定位置。
BGT:大于
如果负标志与溢出标志相等,且零标志为0,跳转到指定位置
BLT:小于
如果负标志与溢出标志不同,跳转到指定位置
堆栈操作指令的用途是什么?
堆栈操作指令的主要目的是帮助保存和恢复函数调用过程中的上下文信息如返回地址、局部变量、寄存器值等
常见的堆栈操作指令有PUSH、POP等
PUSH:将寄存器压入堆栈
将指定寄存器的值压入堆栈,堆栈指针自动向低地址方向移动。
POP:从堆栈弹出寄存器
从堆栈中弹出数据并将其恢复到指定的寄存器,堆栈指针自动向高地址方向移动。
分支指令的用途是什么?
分支指令的用途是控制程序的执行流程。
常见的分支指令有B、BL、BX等
B:无条件跳转
将程序控制跳转到指定的地址,执行从该地址开始的指令。
BL:带链接的无条件跳转
将程序控制跳转到指定地址,并将返回地址存储在链接寄存器中。
BX:跳转并切换指令集
根据寄存器的值进行跳转,并可以切换ARM或THUMB指令集模式。
中断和异常指令的用途是什么?
中断和异常指令的用途主要是处理程序执行过程中的特殊情况或事件
中断:响应外部事件或内部事件,打断程序的正常执行,处理紧急任务。
异常:处理程序执行中的错误或特殊情况,如非法操作、内存访问错误等。
常见的中断和异常指令有SWI、IRQ、FIQ、UND、DABT等
SWI:软件中断
触发中断处理程序,通常用于系统调用或触发异常处理。
IRQ:中断请求
由外部硬件设备触发,通知CPU需要处理外部事件。
FIQ:快速中断请求
比普通中断有更高的优先级,处理速度较快,通常用于需要快速响应的事件。
UND:未定义指令异常
当处理器遇到无法识别的指令时触发,表示程序出现错误或非法操作。
DABT:数据中止异常
发生内存访问错误时触发,如非法访问或权限问题。
返回指令的用途是什么?
返回指令的主要用途是让程序从一个函数或子程序返回到调用它的地方。
常见的返回指令有RET等
RET:结束返回
从子程序返回,恢复栈中保存的返回地址。
好了,以上就是ARM64汇编常用指令的讲解了
还没有评论,来说两句吧...