目录

  • 1.控制转移指令
    • 1.1 条件跳转指令
    • 1.2 比较条件跳转指令
    • 1.3 多条件分支跳转指令
    • 1.4 无条件跳转指令

1.控制转移指令

  1. 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中描述过。

1.1 条件跳转指令

  1. 条件跳转指令一般和比较指令结合使用。在条件跳转指令执行前,一般先用比较指令进行栈顶元素的准备,然后进行条件跳转。
  2. 条件跳转指令:弹出栈顶元素,测试它是否满足某一条件,如果满足,则跳转到指定位置。
  3. 如下图表中所示,是条件跳转指令包括的指令。
  4. 注意:
    a) byteshortcharboolean都会转换成int类型的指令完成。
    b) 对于longfloatdouble类型的条件分支比较操作,会先执行相应类型的比较运算指令,返回一个整型值到操作数栈中,然后再使用int类型的条件跳转指令完成分支跳转。

例子:

  1. ifeq
  2. ifnonnull
  3. 比较指令与跳转指令混合使用例子
  4. 存在类型提升的情况

1.2 比较条件跳转指令

  1. 比较条件跳转指令是比较指令和跳转指令的结合体,它将比较和跳转两个步骤合二为一。
  2. 将栈顶的两个元素弹出,进行比较,如果比较的结果满足条件,则进行跳转。

    例子1

    例子2

1.3 多条件分支跳转指令

  1. 多条件分支跳转指令是专为switch-case语句设计的,主要有tableswitchlookupswitch两种。
  2. tableswitchlookupswitch的区别在于,tableswitch要求多个条件的分支值是连续的,查找效率更高(不需要搜索全部的case值,可以通过简单的计算直接定位);lookupswitch要求多个条件的分支的值不是连续的,查找效率更低(每次查找都需要搜索全部的case值)。



    tableswitch例子:

    lookupswitch例子:

    JDK7支持string类型的switch语句:
    需要注意的是,在将传入的参数与case值进行比较的时候,先比较的是两者的hash值是不是相等的,如果相等后面还会调用字符串的equals方法进行比较,如果不相等,则与lookupswitch中的下一个hash值进行比较。

1.4 无条件跳转指令

  1. 目前主要的无条件跳转指令就是goto

    例子:

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html

16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)相关推荐

  1. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(5) - 控制转移指令

    Control Transfer Instructions 控制转移指令支持无条件跳转jump,条件跳转conditional jump,循环loop,调用call与返回return操作,从而实现程序 ...

  2. java 控制转移指令_控制转移类指令

    条件转移指令Jcc根据指定的条件确定程序是否发生转移.如果满足条件则程序转移到目标地址去执行程序:不满足条件,则程序将顺序执行下一条指令. 其通用格式为: Jcc LABEL         ;条件满 ...

  3. RV32I控制转移指令的偏移量计算问题

    RV32I的控制转移指令可以分为无条件跳转(unconditional jumps)和条件分支(conditional branches).其中,无条件跳转(unconditional jumps)包 ...

  4. 30336控制转移指令

    1.控制转移指令  无条件转移指令 JMP  条件转移指令 JZ / JNZ . JE / JNE. JS / JNS. JO / JNO. JP / JNP. JB / JNB. JL / JN ...

  5. arm指令bne.w改成b,即无条件跳转

    近期逆向一个程序,需要把bne.w改成b,无条件跳转.由于ios逆向不像pc上,可以在od里直接改汇编指令,这篇文章给了我很大的帮助.通过memory write 修改后,验证可行后,再用ultrae ...

  6. goto语句_11. Go语言流程控制:goto 无条件跳转

    本文原文:http://golang.iswbm.com Github:https://github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如 ...

  7. STM32--汇编语言:子程呼叫与无条件跳转指令B、BL、BX和BLX

    1.B:无条件转移 B指令是最简单的跳转指令.一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行.注意,存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是绝对地址,它 ...

  8. 深入理解操作系统(10)第四章:处理器体系结构(2)Y86-64的顺序实现(包括:SEQ/指令的各阶段操作:取指,解码,执行,访存,回写,更新PC/序列指令/硬件结构/时序/阶段的实现/SEQ+)

    深入理解操作系统(10)第四章:处理器体系结构(2)Y86-64的顺序实现(包括:SEQ/指令的各阶段操作:取指,解码,执行,访存,回写,更新PC/序列指令/硬件结构/时序/阶段的实现/SEQ+) 1 ...

  9. 电脑跳线设置大全3(包括BIOS设置,各品牌硬盘,主板跳线设置等)

    电脑跳线设置大全3(包括BIOS设置,各品牌硬盘,主板跳线设置等) 跳线虽然类型种类繁多,但它主要存在于主板.硬盘.光驱这三大硬件中,在显卡.声卡等配件中比较少见.下面大家就跟着学习跳线吧. 主板跳线 ...

最新文章

  1. linux 大量的TIME_WAIT解决办法
  2. 0122互联网新闻 | 知乎短视频“即影”正式上线;天猫与故宫开启2019“天猫新文创”计划...
  3. delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
  4. 解读webpack的bundle.js
  5. r语言代码html,R语言学习笔记-内附实例及代码
  6. Mysql学习总结(63)——Mysql数据库架构方案选择与分析
  7. python爬虫爬取链家二手房信息
  8. 最短路径(加权有向图)
  9. 52道常见Python面试题,你都能答对吗?
  10. 编写函数 int min(int x ,int y,int z),实现求出三个数中的最小值。要求在main函数中输入三个整数,然后调用min函数,最后将求得的最小值输出。
  11. R语言画个中国地图使用shp文件
  12. sqlserver加上百分号_用一条sql语句显示数据百分比并加百分号
  13. 计算机红外,红外光谱
  14. 学无止境,我爱python
  15. 网易相册列表分析 (转)
  16. 计算机编程中向量,什么是节点向量
  17. 一文读懂贝叶斯原理(Bayes‘ theorem)
  18. Microsoft Windows Win32k本地提权漏洞分析
  19. php 读取word文档_如何使用PHP制作Microsoft Word文档
  20. Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法

热门文章

  1. 金碟软件资产负债表中JC,JD,DY,DC表示的是什么
  2. 教师资格中学计算机知识点,2017年教师资格证《信息技术》高频考点
  3. 《神经科学:探索脑》学习笔记(第23章 记忆系统)
  4. 杰理6905A芯片修改提示音
  5. 爬取链家北京租房数据并做简单分析
  6. 纯java语言做rpg游戏_【纯JAVA语言做个RPG游戏】2.游戏界面及角色移动的基本实现...
  7. Unity全局音量控制以及音量信息存储在本地
  8. [024] 11大Java开源中文分词器的使用方法和分词效果对比
  9. 深度学习中的优化函数
  10. 计算机安全法的发行日期,网络安全法实施时间,网络安全法是什么时候实施的?...