字节码指令 运算指令

字节码指令中,运算指令用于进行各种数学运算、逻辑运算、位运算等操作。

以下是一些常用的运算指令:

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