See The Jasmin User Guide for a description of other aspects of the Jasmin syntax.
ret <var-num> aload <var-num> astore <var-num> dload <var-num> dstore <var-num> fload <var-num> fstore <var-num> iload <var-num> istore <var-num> lload <var-num> lstore <var-num>for example:
aload 1 ; push local variable 1 onto the stack ret 2 ; return to the address held in local variable 2
bipush <int> sipush <int>for example:
bipush 100 ; push 100 onto the stackThe iinc instruction takes two integer parameters:
iinc <var-num> <amount>for example:
iinc 3 -10 ; subtract 10 from local variable 3
goto <label> goto_w <label> if_acmpeq <label> if_acmpne <label> if_icmpeq <label> if_icmpge <label> if_icmpgt <label> if_icmple <label> if_icmplt <label> if_icmpne <label> ifeq <label> ifge <label> ifgt <label> ifle <label> iflt <label> ifne <label> ifnonnull <label> ifnull <label> jsr <label> jsr_w <label>For example:
Label1: goto Label1 ; jump to the code at Label1 ; (an infinite loop!)
anewarray <class> checkcast <class> instanceof <class> new <class>For example:
new java/lang/String ; create a new String object
invokenonvirtual <method-spec> invokestatic <method-spec> invokevirtual <method-spec>for example:
; invokes java.io.PrintStream.println(String); invokevirtual java/io/PrintStream/println(Ljava/lang/String;)VA method specification is formed of three parts: the characters before the last '/' form the class name. The characters between the last '/' and '(' are the method name. The rest of the string is the descriptor.
foo/baz/Myclass/myMethod(Ljava/lang/String;)V --------------- --------------------- | -------- | | | | class method descriptorA special case is invokeinterface, which takes a <method-spec> and an integer indicating how many arguments the method takes:
invokeinterface <method-spec> <num-args>for example:
invokeinterface foo/Baz/myMethod(I)V 1
getfield <field-spec> <descriptor> getstatic <field-spec> <descriptor> putfield <field-spec> <descriptor> putstatic <field-spec> <descriptor>for example:
; get java.lang.System.out, which is a PrintStream getstatic java/lang/System/out Ljava/io/PrintStream;<field-spec> is composed of two parts, a classname and a fieldname. The classname is all of the characters in the <field-spec> up to the last '/' character, and the fieldname is the rest of the characters after the last '/'. For example:
foo/baz/AnotherClass/anotherFunField -- class name ------ --field name --<descriptor> is the Java type descriptor of the field. For example:
Ljava/io/PrintStream;
newarray <array-type>for example:
newarray int newarray short newarray float etc.
multianewarray <array-descriptor> <num-dimensions>for example:
multianewarray [[[I 2
ldc <constant> ldc_w <constant><constant> is either an integer, a floating point number, or a quoted string. For example:
ldc 1.2 ; push a float ldc 10 ; push an int ldc "Hello World" ; push a String ldc_w 3.141592654 ; push PI as a double
<lookupswitch> ::= lookupswitch <int1> : <label1> <int2> : <label2> ... default : <default-label>For example:
; If the int on the stack is 3, jump to Label1. ; If it is 5, jump to Label2. ; Otherwise jump to DefaultLabel. lookupswitch 3 : Label1 5 : Label2 default : DefaultLabel Label1: ... got 3 Label2: ... got 5 DefaultLabel: ... got something else
<tableswitch> ::= tableswitch <low> <label1> <label2> ... default : <default-label>For example:
; If the int on the stack is 0, jump to Label1. ; If it is 1, jump to Label2. ; Otherwise jump to DefaultLabel. tableswitch 0 Label1 Label2 default : DefaultLabel Label1: ... got 0 Label2: ... got 1 DefaultLabel: ... got something else
pop ; remove the top item from the stack iconst_1 ; push 1 onto the stack swap ; swap the top two items on the stack