Java Virtual Machine (Java Series)
if_icmpne
Jasmin Syntax
if_icmpne <label> <label> is a label name. To define the location of the label, use the <label> name followed by a colon:
<label>: <label> then becomes associated the address of the following instruction. Labels can only be assigned one location in a method. On the other hand, a single <label> can be the target of multiple branch instructions.
Stack
Before | After |
| value1 | ... |
| value2 | |
| ... |
if_icmpne pops the top two ints off the stack and compares them. If the two integers are not equal, execution branches to the address (pc + branchoffset), where pc is the address of the if_icmpne opcode in the bytecode and branchoffset is a 16-bit signed integer parameter following the if_icmpne opcode in the bytecode. If the integers are equal, execution continues at the next instruction.
If you are using Jasmin, branchoffset is computed for you from the address of <label>.
Example
bipush 2 ; push the int 2 onto the stack iload_1 ; push the int value in local variable 1 onto the stack if_icmpne Label ; if the value of local variable 1 does not equal 2, jump to Label return ; return if local variable 1 equals 2 Label: ; execution continues here if local variable 1 does not equals 2... Bytecode
Type | Description |
| u1 | if_icmpne opcode = 0xA0 (160) |
| s2 | branchoffset |
if_icmpeq, if_icmplt, if_icmpgt, if_icmple, if_icmpge
Notes
Addresses are measured in bytes from the start of the bytecode (i.e. address 0 is the first byte in the bytecode of the currently executing method).
prev next contents
Java Virtual Machine, by Jon Meyer and Troy Downing, O'Reilly Associates
Категории