Java bytecode: Difference between revisions

Content deleted Content added
JGNAT, compiles from the Ada programming language to Java bytecode
Line 17:
<small>''Please see Sun's Java Virtual Machine Specification for more detailed descriptions (link at bottom of page)''</small>
<table>
<tr><tdth>''Mnemonic''<tt>&nbsp;&nbsp;&nbsp;&nbsp;</tt><tdth abbr="Opcode"><center><tt>&nbsp;&nbsp;</tt>''Opcode'' (in hex)<tt>&nbsp;&nbsp;&nbsp;</tt></center><tdth>''Description''
<tr><tdth><br>
<tr><tdth><tt>aaload</tt><td><center>32</center><td>loads onto the stack a reference to an array
<tr><tdth><tt>aastore</tt><td><center>53</center><td>stores into a reference to an array
<tr><tdth><tt>aconst_null</tt><td><center>01</center><td>pushes a ''null'' reference onto the stack
<tr><tdth><tt>aload</tt><td><center>19</center><td>loads a reference onto the stack from a local variable
<tr><tdth><tt>aload_0</tt><td><center>2a</center><td>loads a reference from local variable 0
<tr><tdth><tt>aload_1</tt><td><center>2b</center><td>loads a reference from local variable 1
<tr><tdth><tt>aload_2</tt><td><center>2c</center><td>loads a reference from local variable 2
<tr><tdth><tt>aload_3</tt><td><center>2d</center><td>loads a reference from local variable 3
<tr><tdth><tt>anewarray</tt><td><center>bd</center><td>creates a new array of references
<tr><tdth><tt>areturn</tt><td><center>b0</center><td>returns a reference from a method
<tr><tdth><tt>arraylength</tt><td><center>be</center><td>gets the length of an array
<tr><tdth><tt>astore</tt><td><center>3a</center><td>stores a reference into a local variable
<tr><tdth><tt>astore_0</tt><td><center>4b</center><td>stores a reference into local variable 0
<tr><tdth><tt>astore_1</tt><td><center>4c</center><td>stores a reference into local variable 1
<tr><tdth><tt>astore_2</tt><td><center>4d</center><td>stores a reference into local variable 2
<tr><tdth><tt>astore_3</tt><td><center>4e</center><td>stores a reference into local variable 3
<tr><tdth><tt>athrow</tt><td><center>bf</center><td>throws an error or exception
<tr><tdth><br>
<tr><tdth><tt>baload</tt><td><center>33</center><td>loads a byte or Boolean value from an array
<tr><tdth><tt>bastore</tt><td><center>54</center><td>stores a byte or Boolean value into an array
<tr><tdth><tt>bipush</tt><td><center>10</center><td>pushes a byte onto the stack
<tr><tdth><br>
<tr><tdth><tt>caload</tt><td><center>34</center><td>loads a char from an array
<tr><tdth><tt>castore</tt><td><center>55</center><td>stores a char into an array
<tr><tdth><tt>checkcast</tt><td><center>c0</center><td>checks whether an object is of a certain type
<tr><tdth><br>
<tr><tdth><tt>d2f</tt><td><center>90</center><td>converts a double to a float
<tr><tdth><tt>d2i</tt><td><center>8e</center><td>converts a double to an int
<tr><tdth><tt>d2l</tt><td><center>8f</center><td>converts a double to a long
<tr><tdth><tt>dadd</tt><td><center>63</center><td>adds two doubles
<tr><tdth><tt>daload</tt><td><center>31</center><td>loads a double from an array
<tr><tdth><tt>dastore</tt><td><center>52</center><td>stores a double into an array
<tr><tdth><tt>dcmpg</tt><td><center>98</center><td>compares two doubles
<tr><tdth><tt>dcmpl</tt><td><center>97</center><td>compares two doubles
<tr><tdth><tt>dconst_0</tt><td><center>0e</center><td>pushes the constant ''0.0'' onto the stack
<tr><tdth><tt>dconst_1</tt><td><center>0f</center><td>pushes the constant ''1.0'' onto the stack
<tr><tdth><tt>ddiv</tt><td><center>6f</center><td>divides two doubles
<tr><tdth><tt>dload</tt><td><center>18</center><td>loads a double from a local variable
<tr><tdth><tt>dload_0</tt><td><center>26</center><td>loads a double from local variable 0
<tr><tdth><tt>dload_1</tt><td><center>27</center><td>loads a double from local variable 1
<tr><tdth><tt>dload_2</tt><td><center>28</center><td>loads a double from local variable 2
<tr><tdth><tt>dload_3</tt><td><center>29</center><td>loads a double from local variable 3
<tr><tdth><tt>dmul</tt><td><center>6b</center><td>multiplies two doubles
<tr><tdth><tt>dneg</tt><td><center>77</center><td>negates a double
<tr><tdth><tt>drem</tt><td><center>73</center><td>gets the remainder from a division between two doubles
<tr><tdth><tt>dreturn</tt><td><center>af</center><td>returns a double from a method
<tr><tdth><tt>dstore</tt><td><center>39</center><td>stores a double into a local variable
<tr><tdth><tt>dstore_0</tt><td><center>47</center><td>stores a double into local variable 0
<tr><tdth><tt>dstore_1</tt><td><center>48</center><td>stores a double into local variable 1
<tr><tdth><tt>dstore_2</tt><td><center>49</center><td>stores a double into local variable 2
<tr><tdth><tt>dstore_3</tt><td><center>4a</center><td>stores a double into local variable 3
<tr><tdth><tt>dsub</tt><td><center>67</center><td>subtracts a double from another
<tr><tdth><tt>dup</tt><td><center>59</center><td>duplicates the value on top of the stack
<tr><tdth><tt>dup_x1</tt><td><center>5a</center><td>inserts a copy of the top value into the stack two values from the top
<tr><tdth><tt>dup_x2</tt><td><center>5b</center><td>inserts a copy of the top value into the stack two or three values from the top
<tr><tdth><tt>dup2</tt><td><center>5c</center><td>
<tr><tdth><tt>dup2_x1</tt><td><center>5d</center><td>
<tr><tdth><tt>dup2_x2</tt><td><center>5e</center><td>
<tr><tdth><br>
<tr><tdth><tt>f2d</tt><td><center>8d</center><td>converts a float to a double
<tr><tdth><tt>f2i</tt><td><center>8b</center><td>converts a float to an int
<tr><tdth><tt>f2l</tt><td><center>8c</center><td>converts a float to a long
<tr><tdth><tt>fadd</tt><td><center>62</center><td>adds two floats
<tr><tdth><tt>faload</tt><td><center>30</center><td>loads a float from an array
<tr><tdth><tt>fastore</tt><td><center>51</center><td>stores a float in an array
<tr><tdth><tt>fcmpg</tt><td><center>96</center><td>compares two floats
<tr><tdth><tt>fcmpl</tt><td><center>95</center><td>compares two floats
<tr><tdth><tt>fconst_0</tt><td><center>0b</center><td>pushes ''0.0f'' on the stack
<tr><tdth><tt>fconst_1</tt><td><center>0c</center><td>pushes ''1.0f'' on the stack
<tr><tdth><tt>fconst_2</tt><td><center>0d</center><td>pushes ''2.0f'' on the stack
<tr><tdth><tt>fdiv</tt><td><center>6e</center><td>divides two floats
<tr><tdth><tt>fload</tt><td><center>17</center><td>loads a float from a local value
<tr><tdth><tt>fload_0</tt><td><center>22</center><td>loads a float from local variable 0
<tr><tdth><tt>fload_1</tt><td><center>23</center><td>loads a float from local variable 1
<tr><tdth><tt>fload_2</tt><td><center>24</center><td>loads a float from local variable 2
<tr><tdth><tt>fload_3</tt><td><center>25</center><td>loads a float from local variable 3
<tr><tdth><tt>fmul</tt><td><center>6a</center><td>multiplies two floats
<tr><tdth><tt>fneg</tt><td><center>76</center><td>negates a float
<tr><tdth><tt>frem</tt><td><center>72</center><td>gets the remainder from a division between two floats
<tr><tdth><tt>freturn</tt><td><center>ae</center><td>returns a float
<tr><tdth><tt>fstore</tt><td><center>38</center><td>stores a float into a local variable
<tr><tdth><tt>fstore_0</tt><td><center>43</center><td>stores a float into local variable 0
<tr><tdth><tt>fstore_1</tt><td><center>44</center><td>stores a float into local variable 1
<tr><tdth><tt>fstore_2</tt><td><center>45</center><td>stores a float into local variable 2
<tr><tdth><tt>fstore_3</tt><td><center>46</center><td>stores a float into local variable 3
<tr><tdth><tt>fsub</tt><td><center>66</center><td>subtracts two floats
<tr><tdth><br>
<tr><tdth><tt>getfield</tt><td><center>b4</center><td>gets a field of an object
<tr><tdth><tt>getstatic</tt><td><center>b2</center><td>gets a static field of a class
<tr><tdth><tt>goto</tt><td><center>a7</center><td>goes to another instruction
<tr><tdth><tt>goto_w</tt><td><center>c8</center><td>goes to another instruction
<tr><tdth><br>
<tr><tdth><tt>i2b</tt><td><center>91</center><td>converts an int into a byte
<tr><tdth><tt>i2c</tt><td><center>92</center><td>converts an int into a character
<tr><tdth><tt>i2d</tt><td><center>87</center><td>converts an int into a double
<tr><tdth><tt>i2f</tt><td><center>86</center><td>converts an int into a float
<tr><tdth><tt>i2l</tt><td><center>85</center><td>converts an int into a long
<tr><tdth><tt>i2s</tt><td><center>93</center><td>converts an int into a short
<tr><tdth><tt>iadd</tt><td><center>60</center><td>adds two ints together
<tr><tdth><tt>iaload</tt><td><center>2e</center><td>loads an int from an array
<tr><tdth><tt>iand</tt><td><center>7e</center><td>performs a logical and on two integers
<tr><tdth><tt>iastore</tt><td><center>4f</center><td>stores an int into an array
<tr><tdth><tt>iconst_m1</tt><td><center>02</center><td>loads the int value -1 onto the stack
<tr><tdth><tt>iconst_0</tt><td><center>03</center><td>loads the int value 0 onto the stack
<tr><tdth><tt>iconst_1</tt><td><center>04</center><td>loads the int value 1 onto the stack
<tr><tdth><tt>iconst_2</tt><td><center>05</center><td>loads the int value 2 onto the stack
<tr><tdth><tt>iconst_3</tt><td><center>06</center><td>loads the int value 3 onto the stack
<tr><tdth><tt>iconst_4</tt><td><center>07</center><td>loads the int value 4 onto the stack
<tr><tdth><tt>iconst_5</tt><td><center>08</center><td>loads the int value 5 onto the stack
<tr><tdth><tt>idiv</tt><td><center>6c</center><td>divides two integers
<tr><tdth><tt>if_acmpeq</tt><td><center>a5</center><td>branch if reference comparison succeeds
<tr><tdth><tt>if_acmpne</tt><td><center>a6</center><td>branch if int comparison succeeds
<tr><tdth><tt>if_icmpeq</tt><td><center>9f</center><td>branch if int is value of comparator
<tr><tdth><tt>if_icmpne</tt><td><center>a0</center><td>branch if int is not value of comparator
<tr><tdth><tt>if_icmplt</tt><td><center>a1</center><td>branch if int is less than value of comparator
<tr><tdth><tt>if_icmpge</tt><td><center>a2</center><td>branch if int is greater than or equal to value of comparator
<tr><tdth><tt>if_icmpgt</tt><td><center>a3</center><td>branch if int is greater than value of comparator
<tr><tdth><tt>if_icmple</tt><td><center>a4</center><td>branch if int is less than or equal to value of comparator
<tr><tdth><tt>ifeq</tt><td><center>99</center><td>branch if int is 0
<tr><tdth><tt>ifne</tt><td><center>9a</center><td>branch if int is not 0
<tr><tdth><tt>iflt</tt><td><center>9b</center><td>branch if int is less than 0
<tr><tdth><tt>ifge</tt><td><center>9c</center><td>branch if int is greater than or equal to 0
<tr><tdth><tt>ifgt</tt><td><center>9d</center><td>branch if int is greater than 0
<tr><tdth><tt>ifle</tt><td><center>9e</center><td>branch if int is less than or equal 0
<tr><tdth><tt>ifnonnull</tt><td><center>c7</center><td>branch if reference is not null 0
<tr><tdth><tt>ifnull</tt><td><center>c6</center><td>branch if reference is null 0
<tr><tdth><tt>iinc</tt><td><center>84</center><td>increment local variable by constant
<tr><tdth><tt>iload</tt><td><center>15</center><td>loads an int from a variable
<tr><tdth><tt>iload_0</tt><td><center>1a</center><td>loads an int from variable 0
<tr><tdth><tt>iload_1</tt><td><center>1b</center><td>loads an int from variable 1
<tr><tdth><tt>iload_2</tt><td><center>1c</center><td>loads an int from variable 2
<tr><tdth><tt>iload_3</tt><td><center>1d</center><td>loads an int from variable 3
<tr><tdth><tt>imul</tt><td><center>68</center><td>multiply two integers
<tr><tdth><tt>ineg</tt><td><center>74</center><td>negate int
<tr><tdth><tt>instanceof</tt><td><center>c1</center><td>determines if an object is of a given type
<tr><tdth><tt>invokeinterface</tt><td><center>b9</center><td>invokes an interface
<tr><tdth><tt>invokespecial</tt><td><center>b7</center><td>invoke instance method
<tr><tdth><tt>invokestatic</tt><td><center>b8</center><td>invoke a static method
<tr><tdth><tt>invokevirtual</tt><td><center>b6</center><td>invoke virtual method
<tr><tdth><tt>ior</tt><td><center>80</center><td>logical int or
<tr><tdth><tt>irem</tt><td><center>70</center><td>logical int remainder
<tr><tdth><tt>ireturn</tt><td><center>ac</center><td>returns an integer from a method
<tr><tdth><tt>ishl</tt><td><center>78</center><td>int shift left
<tr><tdth><tt>ishr</tt><td><center>7a</center><td>int shift right
<tr><tdth><tt>istore</tt><td><center>36</center><td>store int into variable
<tr><tdth><tt>istore_0</tt><td><center>3b</center><td>store int into variable 0
<tr><tdth><tt>istore_1</tt><td><center>3c</center><td>store int into variable 1
<tr><tdth><tt>istore_2</tt><td><center>3d</center><td>store int into variable 2
<tr><tdth><tt>istore_3</tt><td><center>3e</center><td>store int into variable 3
<tr><tdth><tt>isub</tt><td><center>64</center><td>int subtract
<tr><tdth><tt>iushr</tt><td><center>7c</center><td>int shift right
<tr><tdth><tt>ixor</tt><td><center>82</center><td>int xor
<tr><tdth><br>
<tr><tdth><tt>jsr</tt><td><center>a8</center><td>
<tr><tdth><tt>jsr_w</tt><td><center>c9</center><td>
<tr><tdth><br>
<tr><tdth><tt>l2d</tt><td><center></center><td>
<tr><tdth><tt>l2f</tt><td><center></center><td>
<tr><tdth><tt>l2i</tt><td><center></center><td>
<tr><tdth><tt>ladd</tt><td><center></center><td>
<tr><tdth><tt>laload</tt><td><center></center><td>
<tr><tdth><tt>land</tt><td><center></center><td>
<tr><tdth><tt>lastore</tt><td><center></center><td>
<tr><tdth><tt>lcmp</tt><td><center></center><td>
<tr><tdth><tt>lconst_0</tt><td><center></center><td>
<tr><tdth><tt>lconst_1</tt><td><center></center><td>
<tr><tdth><tt>ldc</tt><td><center></center><td>
<tr><tdth><tt>ldc_w</tt><td><center></center><td>
<tr><tdth><tt>ldc2_w</tt><td><center></center><td>
<tr><tdth><tt>ldiv</tt><td><center></center><td>
<tr><tdth><tt>lload</tt><td><center></center><td>
<tr><tdth><tt>lload_0</tt><td><center></center><td>
<tr><tdth><tt>lload_1</tt><td><center></center><td>
<tr><tdth><tt>lload_2</tt><td><center></center><td>
<tr><tdth><tt>lload_3</tt><td><center></center><td>
<tr><tdth><tt>lmul</tt><td><center></center><td>
<tr><tdth><tt>lneg</tt><td><center></center><td>
<tr><tdth><tt>lookupswitch</tt><td><center></center><td>
<tr><tdth><tt>lor</tt><td><center></center><td>
<tr><tdth><tt>lrem</tt><td><center></center><td>
<tr><tdth><tt>lreturn</tt><td><center></center><td>
<tr><tdth><tt>lshl</tt><td><center></center><td>
<tr><tdth><tt>lshr</tt><td><center></center><td>
<tr><tdth><tt>lstore</tt><td><center></center><td>
<tr><tdth><tt>lstore_0</tt><td><center></center><td>
<tr><tdth><tt>lstore_1</tt><td><center></center><td>
<tr><tdth><tt>lstore_2</tt><td><center></center><td>
<tr><tdth><tt>lstore_3</tt><td><center></center><td>
<tr><tdth><tt>lsub</tt><td><center></center><td>
<tr><tdth><tt>lushr</tt><td><center></center><td>
<tr><tdth><tt>lxor</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>monitorenter</tt><td><center></center><td>
<tr><tdth><tt>monitorexit</tt><td><center></center><td>
<tr><tdth><tt>multianewarray</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>new</tt><td><center></center><td>
<tr><tdth><tt>newarray</tt><td><center></center><td>
<tr><tdth><tt>nop</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>pop<tt><td><center></center><td>
<tr><tdth><tt>pop2</tt><td><center></center><td>
<tr><tdth><tt>putfield</tt><td><center></center><td>
<tr><tdth><tt>putstatic</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>ret</tt><td><center></center><td>
<tr><tdth><tt>return</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>saload<tt><td><center></center><td>
<tr><tdth><tt>sastore</tt><td><center></center><td>
<tr><tdth><tt>sipush</tt><td><center></center><td>
<tr><tdth><tt>swap</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>tableswitch</tt><td><center></center><td>
<tr><tdth><br>
<tr><tdth><tt>wide</tt><td><center></center><td>
 
</table>