字节码指令中,运算指令用于进行各种数学运算、逻辑运算、位运算等操作。
以下是一些常用的运算指令:
iadd:将栈顶两个整数相加,结果再入栈。
fadd:将栈顶两个 float 类型的数相加,结果再入栈。
isub:将栈顶两个整数相减,结果再入栈。
imul:将栈顶两个整数相乘,结果再入栈。
idiv:将栈顶两个整数相除,结果再入栈。
irem:将栈顶两个整数做余数运算,结果再入栈。
iand:将栈顶两个整数按位与,结果再入栈。
ior:将栈顶两个整数按位或,结果再入栈。
ixor:将栈顶两个整数按位异或,结果再入栈。
ishl:将栈顶整数左移指定位数,结果再入栈。
ishr:将栈顶整数右移指定位数,结果再入栈。
iushr:将栈顶整数无符号右移指定位数,结果再入栈。
这些指令可以应用于各种类型的数据,例如整型、浮点型、长整型、双精度浮点型等。例如,iadd 可以将两个整型数相加,而 fadd 可以将两个浮点型数相加。
下面是一些Java字节码中的运算指令及其示例:
加法运算
将两个整数相加,并将结果压入操作数栈。
iload_1
iload_2
iadd
减法运算
将两个整数相减,并将结果压入操作数栈。
iload_1
iload_2
isub
乘法运算
将两个整数相乘,并将结果压入操作数栈。
iload_1
iload_2
imul
除法运算
将两个整数相除,并将结果压入操作数栈。
iload_1
iload_2
idiv
取模运算
将两个整数取模,并将结果压入操作数栈。
iload_1
iload_2
irem
位运算
对两个整数进行位运算,并将结果压入操作数栈。
iload_1
iload_2
iand
逻辑运算
对两个整数进行逻辑运算,并将结果压入操作数栈。
iload_1
iload_2
if_icmpne label
iconst_1
goto end
label:
iconst_0
end:
类型转换
将一个数值类型转换为另一个数值类型,并将结果压入操作数栈。
iload_1
i2l
数组元素访问
从数组中取出一个元素,并将其压入操作数栈。
aload_1
iconst_2
iaload
数组元素赋值
将一个值存储到数组中。
aload_1
iconst_2
iconst_5
iastore