pstate的nzcv标志位

条件标志位 描述
N 负数标志(上次运算结果为负值,则N=1,否则N=0)
Z 上次运算结果为0
C 对于加法运算,无符号溢出,C=1, 其他不变
V 有符号溢出
条件码 后缀助记符 标志位 定义
0000 EQ Z=1 相等
0001 NE Z=0 不相等
0010 CS/HS C=1 无符号大于或者等于
0011 CC/LO C=0 无符号小于
0100 MI N=1 负值
0101 PL N=0 正值或0
0110 VS V=1 溢出
0111 VC V=0 无溢出
1000 HI C=1且Z=0 无符号大于
1001 LS C=0或Z=1 无符号小于或等于
1010 GE N和V相同 有符号大于或等于
1011 LT N和V不同 有符号小于
1100 GT Z=0且N等于V 有符号大于
1101 LE Z=1或N不等于V 有符号小于或等于
1110 AL 默认 无条件
1111 NV 无条件

比较指令

cmp: 比较两个数
cmn:负向比较(一个数与另一个数的二进制补码相比较)

cmp x1, x2 -->x1 - x2
cmn x1, x2 -->x1 + x2

测试代码:

/** compare lab01:test cmp and cmn*/
.global my_cmp_cmn_test
my_cmp_cmn_test:mov x1, 1mov x2, -3
1:cmn x1,x2add x2, x2, 1mrs x0,nzcvb.mi 1b  //MI:负数2:cmp x2,x1add x1,x1,1mrs x0, nzcvb.cs 2b  //cs:无符号大于等于ret

运行结果如下:

条件选择指令

CSEL: 条件选择指令
CSET:条件置位指令
CSINC:条件选择并增加指令

/* * cond = true, Xd = Xn* cond = flase, Xd = Xm*/
CSEL Xd, Xn, Xm, cond  CSEL Xd, cond  //cond=true, return 1; or return 0
/** compare lab2:*/
.global my_csel_test
my_csel_test:cmp x0,0sub x2, x1, 1add x3, x1, 2csel x4, x3, x2, eq  //eq, ==mov x0, x4ret

运行结果如下:

my_csel_test(3,6)

基本跳转指令

b: 无条件跳转,不返回;范围PC+/-128MB
b.cnd: 有条件跳转,不返回; 范围pc+/-1MB
bx: 跳转到寄存器指定的地址处,不返回

带返回地址的跳转指令

bl: 带返回地址(PC+4–>x30), 适用于调用子函数
返回地址:保存在X30中,父函数的PC+4
跳转范围:PC +/- 128MB

blx:跳转到寄存器指定地址处,返回地址(父函数PC+4)保存在X30

RET: 从子函数返回
ERET:从当前异常模式返回,通常用于模式切换
从当前的一场模式返回,它会从SPSR中恢复PSTATE, 从ELR中获取跳转地址,并返回该地址;

测试代码:

/** compare lab2:*/
.global my_csel_test
my_csel_test:cmp x0,0sub x2, x1, 1add x3, x1, 2csel x4, x3, x2, eq  //eq, ==mov x0, x4ret/** bl*/.global my_bl_testmy_bl_test:mov x8, x30mov x0, 1  // 函数嵌套调用,会冲掉x30里保存的返回地址,这里先做备份,在推出本函数时,恢复x30mov x1, 3bl my_csel_testmov x30,x8ret

比较并跳转指令

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

ARM64基础7:A64的比较和跳转指令相关推荐

  1. jsp基础语法【05】_跳转指令

    跳转的作用: 使用跳转指令可以将一个用户的请求,从一个页面传递到另外一个页面. 例如:用户登录QQ空间,如果用户名和密码正确的话就会跳转到空间首页,否则就会跳转到失败页. 跳转指令的语法: 不传递参数 ...

  2. ARMv8体系结构基础05:比较和跳转指令

    目录 1 比较与测试指令详解 1.1 CMP指令 1.1.1 概述 1.1.2 指令编码分析 1.2 CMN指令 1.2.1 概述 1.2.2 指令编码分析 1.3 TST指令 1.3.1 概述 1. ...

  3. ARM64基础0:ARM64架构简介

    如题,一些ARM64通用的架构知识 1.ARMv8特色: (1) 超大的物理地址空间(Large Physical Address),提供超过4GB物理内存的访问: (2) 64位宽的虚拟地址空间(6 ...

  4. java跳转控制语句有哪些_Java语言基础学习之流程控制语句和跳转控制语句实例分析...

    本文主要向大家介绍了Java语言基础学习之流程控制语句和跳转控制语句实例分析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.流程控制语句 在一个程序执行的过程中,各条语句的执行顺 ...

  5. arm64汇编b带条件跳转指令和bl跳转带返回ret指令

    文章目录 ret返回指令 B 跳转指令 BL 带返回的跳转指令 B指令可以接上后缀,用来和cmp比较后待条件的跳转 ret返回指令 cpu遇到ret之后,会把lr赋值给pc,这样cpu执行了pc里的地 ...

  6. ARM汇编之跳转指令

    ARM汇编语言之跳转指令 前言 ARM架构在当今主流的芯片中无论是MCU还是SOC都占有很大的市场,因此基于ARM架构的汇编语言对于嵌入式软件开发人员而言,其实也是一项必须掌握的基本功. " ...

  7. 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

    文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...

  8. 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

  9. 汇编--条件跳转指令

    条件跳转指令很多,支持根据有符号.无符号整数的比较以及对CPU状态标志的检查进行跳转的一系列指令. 根据特定的标志的 根据两操作数是否相等,或根据(E)CX的值是否相等 基于无符号操作数的比较结果的 ...

最新文章

  1. 数据采集技术python网络爬虫项目化教程_数据采集技术Python网络爬虫项目化教程 黄锐军课程资源.zip-KC17.pptx...
  2. zend studio报错
  3. Python数据结构与算法(第六天)
  4. win10环境下如何给visual studio 2013永久配置opencv3.1.0环境
  5. bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结
  6. 小数加分数怎样计算讲解_反渗透阻垢剂的加药量怎样计算?
  7. HMM:隐马尔科夫模型 - 预测和解码
  8. PMP-PMBOK(第六版)--49个过程ITTO记忆口诀(第一辑)
  9. 正宗eMule官方网站导航
  10. 即将奔三的90后,你们有多少存款
  11. Traceback (most recent call last): File “C:\ProgramData\Anaconda3\lib\site-packages\qtpy\QtWebEngine
  12. 设计模式---003代理模式(转载自我的老师 Alley-巷子)
  13. 垂涎欲滴的互联网灰色产业链!
  14. VMware系统启动假死,一直处于“繁忙”状态
  15. ​定了,北京时间 9 月 16 日凌晨 1 点见。
  16. Maven与Maven POM的区别
  17. esxi 内核 linux,大娃套小娃系列-ESXI虚拟机安装Debian系统实现Docker容器
  18. 装机——恢复系统 Windows 10 自带一键还原
  19. MySQL数据库13——插入数据(INSERT)
  20. C#中同一解决方案下,一个项目调用另一个项目中的窗体

热门文章

  1. 压力传感器的应用领域
  2. 目标检测常用评价指标及其计算方法
  3. csdn涨薪技术之Docker 使用教程
  4. HTML+CSS(详细版)
  5. 鲸探发布点评:8月3日发售4款数字藏品
  6. @程序员们,开发者官网惊喜上线,有奖答题等你挑战!
  7. CGB2106-Day11
  8. Electric Power Systems Research (EPSR) 的审稿周期
  9. 区块链之LevelDB
  10. 劳力士格林尼治多少价格_劳力士格林尼治型ll价格是多少