当前位置:网站首页>ARM 64指令小记
ARM 64指令小记
2022-06-12 15:06:00 【FarmGuo】
1 状态寄存器CPSR
ARM64下,该寄存器为32位,高4位N、Z、C、V均为条件码标志位。
SUBS和ADDS影响CPSR,而SUB和ADD则不影响
2 TEST
属于逻辑运算指令,做与操作,结果影响CPSR
如果与运算结果为0那么Z标志位为1,反之为0
Test用来测试一个位,例如寄存器
test eax, 100b; b后缀意为二进制
jnz **; 如果eax右数第三个位为1,jnz将会跳转
3 CMP
属于算术运算指令,做减法,但与SUB指令不同的是SUB指令执行过以后,原来寄存器中的被减数丢了,被换成了减法的结果,CMP指令执行过以后,被减数、减数都保持原样不变。
CMP指令影响CPSR
当比较结果为0时,即相等,Z位置1。
arm下的条件跳转
表达式 英文 中文
bl.eq equal 等于
bl.ne not equal 不等于
bl.gt greater than 大于
bl.ge greater equal 大于等于
bl.lt less than 小于
bl.le less equal 小于等于
x86下的跳转
je equal 等于
jne not equal 不等于
jg greater 大于
jge greater equal 大于等于
jl less 小于
jle less equal 小于等于
call 为x86的跳转指令
bl 为arm的跳转指令
其他
adrp 指令,将pc低12位清零,然后将立即数左移12位进行相加
adrp x8, 10,此时pc 0x00000001026c4478
x8 = 0x00000001026c4000 + 0xa000 = 0x00000001026ce000
在第一次由adrp取得页的基址(也就是lable,此例中10),然后再加上偏移,获取最终值
blr Xm:跳转到由Xm目标寄存器指定的地址处,同时将下一条指令存放到X30(lr)寄存器中。例如:blr x20,即lr存放着blr Xm的下一条指令。
br Xm:跳转到由Xm目标寄存器指定的地址处。
bl label,跳转到标签(内部或外部,外部指的是C函数),同时将下一条指令存放到X30(lr)寄存器中。
__asm volatile ("br x8\n");
void mytest(int a, int b) {
}
__asm volatile ("bl _mytest\n");
stp x8, x9, [sp, #-32]! //把x8,x9 的值存到sp-32的地址后,sp=sp-32
stp x8, x9, [sp], #-0x10 //把x8,x9 的值存到sp的地址后,sp=sp+16
stp x8, x9, [sp, #16] //把x8,x9 的值存到sp+16的地址中
ldp x0, x1, [sp], #0x10 // 把sp的地址里面的内容读到x0,x1后,sp=sp+16
ldp x0, x1, [sp, #0x10]! // 把sp+16的里面的内容读到x0,x1后,sp=sp+16
ldp x19, x20, [sp, #16] // sp+16 地址的值分别放回x19 x20
sp和偏移在一个括号内的,地址是sp+偏移,后面跟!则操作完成后sp自动变化,否则不变。
sp单独一个括号的,地址是sp,操作完成后sp会自动变化。
asm volatile (
"adrp x0, [email protected]\n"
"add x0,x0,[email protected]\n"
);
将func的地址加载到x0寄存器中
cbz x0, LGetImpMiss // x0为 0则跳转到LGetImpMiss。只能内部跳转,不能跳到外部的C函数。
cbz: xt寄存器是否为0,为0则跳转到label处,跳转范围+/1 1MB
cbnz: xt寄存器是否为0,不为0则跳转到label处,跳转范围+/1 1MB
tbz: 测试寄存器中某位是否为0,为0则跳转到label处,跳转范围+/1 32KB
tbnz: 测试寄存器中某位是否为0,为0则跳转到label处,跳转范围+/1 32KB
边栏推荐
- C data type
- [system. Currenttimemillis()] current timestamp: the number of milliseconds that have elapsed since the current system time was 0:00:00 on January 1, 1970
- 學習是一件逆人性的事情(成為高手的內功心法)
- 【LDA】LDA主题模型笔记—主要是狄利克雷
- 安凯微电子冲刺科创板:年营收5亿 小米产业基金是股东
- Prompt that the program cannot access key files / directories when installing PS software. Error code: 41
- Module VIII
- IMU learning records
- Rust小技巧 - 通过FFI编程运行tensorrt模型
- Browser fingerprint interpretation
猜你喜欢
C 操作符
[LDA] basic knowledge notes - mainly AE and VAE
Array related content
JUnit test suite method sorting (method 2 is not easy to use)
Serialization and deserialization mechanism in terms of games
IMU learning records
[wp][beginner level] attack and defense world game
结构体示例
掌门教育被强制退市:上市仅一年时间 软银CMC损失惨重
Kinect2.0+ORBSLAM2_ with_ pointcloud_ map
随机推荐
C语言打开中文路径文件
Array related content
Qiming cloud sharing | demonstrate the switch through an example of the matter protocol to control the light on and off through the matter protocol
启明智显分享| 2.8寸手持中控屏应用方案
结构体示例
Seaborn的简述
ADSL
解决log4j2漏洞遭到挖矿、僵尸进程病毒攻击
C scanf函数
3D reconstruction system | L3 dual view motion recovery structure (SFM binocular SFM)
C escape character
Function related matters
TCP/IP 三次握手四次挥手(面试题)
[datetmeformatter] realize the conversion between localdatetime and text
Dataset and dataframe in sparksql
odom坐标系的理解
C 数据类型
阿裏、騰訊、拼多多垂範,產業互聯網的新邏輯漸顯
C常量,不能改变
C string