算数指令

  1. 作用:
    算术指令用于对两个操作数栈上的值进行某种特定运算,并把结果重新压入操作数栈。

  2. 分类:
    大体上算术指令可以分为两种:对整型数据进行运算的指令与对浮点类型数据进行运算的指令。

  3. byte、short、char 和boolean类型说明
    在每一大类中,都有针对Java虚拟机具体数据类型的专用算术指令。但没有直接支持byte、short、 char和boolean类型的算术指令,对于这些数据的运算,都使用int类型的指令来处理。此外,在处理boolean、byte、 short和char类型的数组时,也会转换为使用对应的int类型的字节码指令来处理。

  1. 运算时的溢出
    数据运算可能会导致溢出,例如两个很大的正整数相加,结果可能是一个负数。其实Java虚拟机规范并无明确规定过整型数据溢出的具体结果,仅规定了在处理整型数据时,只有除法指令以及求余指令中当出现除数为0时会导致虚拟机抛出异常ArithmeticException。
  2. 运算模式
  • 向最接近数舍入模式:JVM要求在进行浮点数计算时,所有的运算结果都必须舍入到适当的精度,非精确结果必须舍入为可被表示的最接近的精确值,如果有两种可表示的形式与该值一样接近,将优先选择最低有效位为零的;
  • 向零舍入模式:将浮点数转换为整数时,采用该模式,该模式将在目标数值类型中选择一个最接近但是不大于原值的数字作为最精确的舍入结果;
  1. NaN值使用
    当一个操作产生溢出时,将会使用有符号的无穷大表示,如果某个操作结果没有明确的数学定义的话,将会使用NaN值来表示。而且所有使用NaN值作为操作数的算术操作,结果都会返回NaN;

所有算术指令

所有的算术指令包括:
加法指令: iadd、 ladd、fadd、dadd
减法指令: isub、 lsub、fsub、dsub
乘法指令:imul、lmul、 fmul、dmul
除法指令: idiv、ldiv、fdiv、ddiv
求余指令: irem、lrem、frem、drem //remainder:余数
取反指令: ineg、 lneg、 fneg、dneg //negation:取反
自增指令: iinc
位运算指令,又可分为:
位移指令: ishl、 ishr、iushr、 lshl、 lshr、lushr
按位或指令: ior、 lor
按位与指令: iand、 land
按位异或指令: ixor、 lxor
比较指令: dcmpg、dcmpl、fcmpg、fcmpl、lcmp

举例

public static int bar(int i) {return ((i + 1) - 2) * 3/4;
}

字节码指令对应的图示:

一个曾经的案例1

代码:

public void add(){byte i = 15;int j=8;int k=i+j;
}

字节码对应的内存解析:

一个曾经的案例2

代码:

public static void main(String[] args) {int x = 500;int y = 100;int a= x/y;int b= 50;System.out.println(a + b);
}

字节码对应的内存解析:

比较指令的说明

  • 比较指令的作用是比较栈顶两个元素的大小,并将比较结果入栈。
  • 比较指令有:dcmpg、dcmpl、fcmpg、 fcmpl、lcmp。
    • 与前面讲解的指令类似,首字符d表示double类型,f表示float , l表示long。
  • 对于double和float类型的数字,由于NaN的存在,各有两个版本的比较指令。以float为例,有fcmpg和fcmpl两个指令,它们的区别在于在数字比较时,若遇到NaN值,处理结果不同。
  • 指令dcmpl和dcmpg也是类似的,根据其命名可以推测其含义,在此不再赘述。
  • 指令lcmp针对long型整数,由于long型整数没有NaN值, 故无需准备两套指令。

举例:

​ 指令fcmpg和fcmpl都从栈中弹出两个操作数,并将它们做比较,设栈顶的元素为v2,栈顶顺位第2位的元素为v1,若v1=v2,则压入0;若v1>v2则压入1;若v1<v2则压入-1。
两个指令的不同之处在于,如果遇到NaN值,fcmpg会压入1,而fcmpl会压入-1。

数值类型的数据,才可以谈大小!

18.3 字节码指令集与解析举例 - 算数指令相关推荐

  1. 18.8 字节码指令集与解析举例 - 控制转义指令

    控制转义指令 程序流程离不开条件控制,为了支持条件跳转,虚拟机提供了大量字节码指令,大体上可以分为 1)比较指令.2)条件跳转指令.3)比较条件跳转指令.4)多条件分支跳转指令.5)无条件跳转指令等. ...

  2. 10、字节码指令集与解析举例

    文章目录 第1章.概述 1.执行模型 2.字节码与数据类型 3.指令分析 第2章.加载与存储指令 1.复习:操作数栈与局部变量表 [1]操作数栈(Operand Stacks) [2]局部变量表(Lo ...

  3. 29.字节码指令集与解析

    字节码指令集与解析 概述 java字节码对于虚拟机好像汇编语言对于计算机,属于基础执行指令 java虚拟机的指令由一个字节长度代表某种特定操作含义的数字(操作码Opcode)以及跟随其后的零至多个代表 ...

  4. 第十九篇_字节码指令集与解析

    文章目录 概述 执行模型 字节码与数据类型 指令分类 加载与存储指令 再谈操作数栈和局部变量表 局部变量压栈指令 常量入栈指令 出栈装入局部变量表 算术运算符指令以及举例 所有的运算符指令 比较指令的 ...

  5. Class文件结构和字节码指令集

    Class文件结构和字节码指令集 概述 字节码文件的跨平台性 Java 语言:跨平台的语言(write once, run anywhere) 当Java源代码成功编译成字节码之后,如果想在不同的平台 ...

  6. Java指令全集_Java的JVM字节码指令集详解

    本文详细介绍了如何使用javap查看java方法中的字节码.以及各种字节码的含义,并且配以完善的案例,一步步,从头到尾带领大家翻译javap的输出.在文末还附有JVM字节码指令集表. 本文不适合没有J ...

  7. JVM学习笔记之字节码指令集

    目录 背景 概述 执行模型 字节码与数据类型 指令分类 加载与存储指令 再谈操作数栈与局部变量表 局部变量压栈指令 常量入栈指令 出栈装入局部变量表指令 算术指令 所有算术指令 比较指令的说明 类型转 ...

  8. JVM字节码指令集大全及其介绍

    Java是怎么跨平台的 我们上计算机课的时候老师讲过:"计算机只能识别0和1,所以我们写的程序要经过编译器翻译成0和1组成的二进制格式计算机才能执行".我们编译后产生的.class ...

  9. Python 2.6.2的字节码指令集一览

    对Python的字节码指令集感兴趣但不知道从何下手么?执行这段代码就能看到字节码的列表: Python代码   import opcode for op in range(len(opcode.opn ...

最新文章

  1. 深度学习vs机器学习 | 这些本质区别你知道多少?
  2. 设计模式之装饰模式20170726
  3. 新编C语言程序设计入门,新编C语言程序设计教程(本科)第3篇.pdf
  4. 轻松自动化---selenium-webdriver(python) (九)
  5. 如何更改您的iPhone铃声
  6. MySQL根据某一个或者多个字段查找重复数据
  7. 查看oracle小补丁号,oracle 补丁号查询
  8. 游戏服务器系统是什么意思,游戏服务器都是什么系统
  9. centos7忘记密码处理办法
  10. codevs——2822 爱在心中
  11. Unity Video Player(视频)
  12. 怎样下载网页中.ts视频文件
  13. livereload_使用LiveReload节省编码时间和精力
  14. 基于 Flink 的 PB 级数据即席查询实践
  15. 干货分享:常见的十种破解密码方法!赶紧收藏!
  16. DropBox系列-安卓DropBox介绍
  17. php读取加密表格,Excel表格如何加密
  18. Teams Meeting 实时事件通知
  19. 一篇文章搞定嵌入式看门狗watch dog概述与示例代码
  20. 彻底卸载360画报教程

热门文章

  1. 远程教育(电大)网考统考计算机应,4月电大远程网络教育计算机应用基础统考题库真题3...
  2. leetcode974. 和可被 K 整除的子数组
  3. linux系统巡检程序,Linux系统巡检项目
  4. 运行gitbook init命令报错及问题解决办法 TypeError [ERR_INVALID_ARG_TYPE]: The “data“ argument must be of type stri
  5. 对电脑十分有用的100招。
  6. 如何营造办公室的友好氛围
  7. 【方向盘】因“双减”失业,厉经9面,终获美团外卖L8的Offer
  8. 马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today)(中文)
  9. 逆时针螺旋矩阵的学习
  10. 一文看懂文旅地产数字转型三大战略