【发布时间】:2013-06-10 12:11:56
【问题描述】:
如何在不使用新的JumpInsNode(Opcodes.IF_ICMPEQ) 的情况下计算 asm 字节码中的表达式 2==2?
我还想将结果存储在一个变量中。 e.x print (2==2) 结果必须是 1
提前致谢。
【问题讨论】:
标签: java assembly compiler-construction jvm bytecode
如何在不使用新的JumpInsNode(Opcodes.IF_ICMPEQ) 的情况下计算 asm 字节码中的表达式 2==2?
我还想将结果存储在一个变量中。 e.x print (2==2) 结果必须是 1
提前致谢。
【问题讨论】:
标签: java assembly compiler-construction jvm bytecode
您可以将两个操作数都压入堆栈并应用ixor 指令;如果结果为零,则操作数相等。
bipush 2
bipush 2
ixor // stack holds 0 if operands are equal, nonzero if not equal
您不想使用分支指令的任何特殊原因?
【讨论】:
i2l),然后执行 lcmp。无论如何,我上面的回答会给你原始问题的 0 或非零答案。如果这符合您的需要,您能接受答案吗?谢谢!
没有任何用于获取布尔值的内置指令。当你在 Java 中取比较的值时,编译器会生成一个 if 语句,并在一个分支上赋值 0,在另一个分支上赋值 1。
boolean b = (2 == 2)
等价于
boolean b;
if (2 == 2) { b = true; } else {b = false;}
【讨论】: