编译器asm字节码表达式

时间:2013-06-10 12:11:57

标签: java assembly compiler-construction jvm bytecode

如何在不使用新2==2的情况下计算asm字节码中的表达式JumpInsNode(Opcodes.IF_ICMPEQ)

另外,我想将结果存储在变量中。 e.x print(2 == 2)结果必须为1

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以将两个操作数推入堆栈并应用ixor指令;如果结果为零,则操作数相等。

bipush 2
bipush 2
ixor   // stack holds 0 if operands are equal, nonzero if not equal

您不想使用分支指令的任何特殊原因?

答案 1 :(得分:0)

没有任何内置的获取布尔值的指令。当你在Java中获取比较的值时,编译器将生成一个if语句,并在一个分支上分配0,在另一个分支上分配1。

boolean b = (2 == 2)

相当于

boolean b;
if (2 == 2) { b = true; } else {b = false;}