时间会让我们更好。   

常见汇编指令和JVM指令

一.汇编指令

1.数据传送指令

主要在寄存器与内存、寄存器与IO端口之间传送数据:

  • movl 1, %eax :将自然数1传送到eax寄存器
  • pop %eax :将栈帧数据弹出至eax寄存器

2.算术运算指令

包括算术基本四则运算、浮点运算、数学运算(正弦、反弦等)等:

  • add 3, %eax:将自然数3与eax寄存器中的数累加,并将结果存储进eax中
  • inc %ebx:对ebx寄存器中的数增1

3.逻辑运算指令

包括与、或、非、左移、右移等指令:

  • sh1 %eax, 1:将eax中的数左移1个二进位
  • and a1, 00111011B:对a1寄存器中的数和操作数进行与操作

4.串指令

连续空间分配,连续空间取值,传送等。字符串运算会使用到。

5.程序转移指令

用来实现 If...else、for循环、while循环、函数调用等。常见的有 jmp跳转、loop循环、ret等。

二.JVM指令

1.数据交换指令

JVM内存分为操作数栈、局部变量表、Java堆、常量池、方法区。需要数据交换指令来完成数据在这些内存区域之间的传送和交换。

  • iload、lload、fload、dload
  • istore、lstore、fstore、dstore
  • ldc
  • bipush
  • getfield、putfield:实现Java堆中的对象的字段和操作数栈之间的数据交换
  • getstatic、putstatic:实现类中的字段和操作数栈之间的数据交换
  • baload、bastore、caload、castore:实现JVM堆中的数组和操作数栈之间的数据交换

2.函数调用指令

  • invokevirtual
  • invokeinterface
  • invokespecial
  • invokestatic
  • return

3.运算指令

主要有算术运算、位运算、比较运算、逻辑运算等。

  • iadd(对两个int型数据求和)、isub(对两个int型数据做减法)
  • fadd(对两个float浮点数进行求和)
  • ddiv(对两个double双精度型数据相除)

4.控制转移指令

switch分支选择指令、if...else条件判断、do...while循环、for循环、foreach循环、return返回、break中断循环、continue继续循环

5.对象创建与类型转换指令

new指令