16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)
目录
- 1.控制转移指令
- 1.1 条件跳转指令
- 1.2 比较条件跳转指令
- 1.3 多条件分支跳转指令
- 1.4 无条件跳转指令
1.控制转移指令
- 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中描述过。
1.1 条件跳转指令
- 条件跳转指令一般和比较指令结合使用。在条件跳转指令执行前,一般先用比较指令进行栈顶元素的准备,然后进行条件跳转。
- 条件跳转指令:弹出栈顶元素,测试它是否满足某一条件,如果满足,则跳转到指定位置。
- 如下图表中所示,是条件跳转指令包括的指令。
- 注意:
a)byte
、short
、char
、boolean
都会转换成int
类型的指令完成。
b) 对于long
、float
、double
类型的条件分支比较操作,会先执行相应类型的比较运算指令,返回一个整型值到操作数栈中,然后再使用int
类型的条件跳转指令完成分支跳转。
例子:
ifeq
ifnonnull
- 比较指令与跳转指令混合使用例子
- 存在类型提升的情况
1.2 比较条件跳转指令
- 比较条件跳转指令是比较指令和跳转指令的结合体,它将比较和跳转两个步骤合二为一。
- 将栈顶的两个元素弹出,进行比较,如果比较的结果满足条件,则进行跳转。
例子1
:
例子2
:
1.3 多条件分支跳转指令
- 多条件分支跳转指令是专为
switch-case
语句设计的,主要有tableswitch
和lookupswitch
两种。 tableswitch
和lookupswitch
的区别在于,tableswitch
要求多个条件的分支值是连续的,查找效率更高(不需要搜索全部的case
值,可以通过简单的计算直接定位);lookupswitch
要求多个条件的分支的值不是连续的,查找效率更低(每次查找都需要搜索全部的case
值)。
tableswitch
例子:
lookupswitch
例子:
JDK7
支持string
类型的switch
语句:
需要注意的是,在将传入的参数与case
值进行比较的时候,先比较的是两者的hash
值是不是相等的,如果相等后面还会调用字符串的equals
方法进行比较,如果不相等,则与lookupswitch
中的下一个hash
值进行比较。
1.4 无条件跳转指令
- 目前主要的无条件跳转指令就是
goto
。
例子:
更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html
16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)相关推荐
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(5) - 控制转移指令
Control Transfer Instructions 控制转移指令支持无条件跳转jump,条件跳转conditional jump,循环loop,调用call与返回return操作,从而实现程序 ...
- java 控制转移指令_控制转移类指令
条件转移指令Jcc根据指定的条件确定程序是否发生转移.如果满足条件则程序转移到目标地址去执行程序:不满足条件,则程序将顺序执行下一条指令. 其通用格式为: Jcc LABEL ;条件满 ...
- RV32I控制转移指令的偏移量计算问题
RV32I的控制转移指令可以分为无条件跳转(unconditional jumps)和条件分支(conditional branches).其中,无条件跳转(unconditional jumps)包 ...
- 30336控制转移指令
1.控制转移指令 无条件转移指令 JMP 条件转移指令 JZ / JNZ . JE / JNE. JS / JNS. JO / JNO. JP / JNP. JB / JNB. JL / JN ...
- arm指令bne.w改成b,即无条件跳转
近期逆向一个程序,需要把bne.w改成b,无条件跳转.由于ios逆向不像pc上,可以在od里直接改汇编指令,这篇文章给了我很大的帮助.通过memory write 修改后,验证可行后,再用ultrae ...
- goto语句_11. Go语言流程控制:goto 无条件跳转
本文原文:http://golang.iswbm.com Github:https://github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如 ...
- STM32--汇编语言:子程呼叫与无条件跳转指令B、BL、BX和BLX
1.B:无条件转移 B指令是最简单的跳转指令.一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行.注意,存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是绝对地址,它 ...
- 深入理解操作系统(10)第四章:处理器体系结构(2)Y86-64的顺序实现(包括:SEQ/指令的各阶段操作:取指,解码,执行,访存,回写,更新PC/序列指令/硬件结构/时序/阶段的实现/SEQ+)
深入理解操作系统(10)第四章:处理器体系结构(2)Y86-64的顺序实现(包括:SEQ/指令的各阶段操作:取指,解码,执行,访存,回写,更新PC/序列指令/硬件结构/时序/阶段的实现/SEQ+) 1 ...
- 电脑跳线设置大全3(包括BIOS设置,各品牌硬盘,主板跳线设置等)
电脑跳线设置大全3(包括BIOS设置,各品牌硬盘,主板跳线设置等) 跳线虽然类型种类繁多,但它主要存在于主板.硬盘.光驱这三大硬件中,在显卡.声卡等配件中比较少见.下面大家就跟着学习跳线吧. 主板跳线 ...
最新文章
- linux 大量的TIME_WAIT解决办法
- 0122互联网新闻 | 知乎短视频“即影”正式上线;天猫与故宫开启2019“天猫新文创”计划...
- delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
- 解读webpack的bundle.js
- r语言代码html,R语言学习笔记-内附实例及代码
- Mysql学习总结(63)——Mysql数据库架构方案选择与分析
- python爬虫爬取链家二手房信息
- 最短路径(加权有向图)
- 52道常见Python面试题,你都能答对吗?
- 编写函数 int min(int x ,int y,int z),实现求出三个数中的最小值。要求在main函数中输入三个整数,然后调用min函数,最后将求得的最小值输出。
- R语言画个中国地图使用shp文件
- sqlserver加上百分号_用一条sql语句显示数据百分比并加百分号
- 计算机红外,红外光谱
- 学无止境,我爱python
- 网易相册列表分析 (转)
- 计算机编程中向量,什么是节点向量
- 一文读懂贝叶斯原理(Bayes‘ theorem)
- Microsoft Windows Win32k本地提权漏洞分析
- php 读取word文档_如何使用PHP制作Microsoft Word文档
- Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法
热门文章
- 金碟软件资产负债表中JC,JD,DY,DC表示的是什么
- 教师资格中学计算机知识点,2017年教师资格证《信息技术》高频考点
- 《神经科学:探索脑》学习笔记(第23章 记忆系统)
- 杰理6905A芯片修改提示音
- 爬取链家北京租房数据并做简单分析
- 纯java语言做rpg游戏_【纯JAVA语言做个RPG游戏】2.游戏界面及角色移动的基本实现...
- Unity全局音量控制以及音量信息存储在本地
- [024]	11大Java开源中文分词器的使用方法和分词效果对比
- 深度学习中的优化函数
- 计算机安全法的发行日期,网络安全法实施时间,网络安全法是什么时候实施的?...