TEXT   15

ace-ops

Guest on 26th July 2022 12:53:54 AM

  1. #
  2. #  Ace opcode reference
  3. #
  4. #  The following is an assembly language which maps to Ace VM opcodes.
  5. #
  6. #  Instruction names are usually followed by one of several letters:
  7. #
  8. #  r    double (64-bit floating point number, stored in two 32-bit slots)
  9. #  i    int (32-bit)
  10. #  s    string (variable-length array of char)
  11. #
  12. #  Descriptions use the following letters:
  13. #
  14. #  a    The top slot of the stack.
  15. #  b    The second stack slot.
  16. #  c    The third stack slot.
  17. #  d    The fourth stack slot.
  18. #
  19. #  Many instructions take no arguments. In these cases the information
  20. #  is on the stack, or in local variables implied by the instruction name.
  21. #
  22. #  Some instructions take arguments. This will always be a 24-bit integer.
  23.  
  24. # Hex   Name            Arguments               Description
  25.  
  26. 00      nop                                     do nothing
  27.  
  28. # Loading constants
  29.  
  30. 11      push_i          x                       push literal 24-bit int n
  31. 12      const_i         n                       push constant int
  32. 13      const_r         n                       push constant real
  33. 14      const_s         n                       push constant string
  34.  
  35. # Loading variable
  36.  
  37. 15      load_i          n                       push local int variable n
  38. 18      load_r          n                       push local real variable n
  39. 19      load_s          n                       push local string variable n
  40.  
  41. # Storing variables
  42.  
  43. 36      store_i         n                       store a in local int variable n
  44. 39      store_r         n                       store ab in local real variable n
  45. 3A      store_s         n                       store a in local string variable n
  46.  
  47. # Stack manipulation
  48.  
  49. 57      pop                                     remove a
  50. 59      dup                                     duplicate a
  51. 5F      swap                                    swap a and b
  52.  
  53. # Arithmetic
  54.  
  55. 60      add_i                                   add int (a+b)
  56. 62      add_r                                   add real (a+b)
  57. 63      add_s                                   append string (a+b)
  58. 64      sub_i                                   subtract int (a-b)
  59. 66      sub_r                                   subtract real (a-b)
  60. 67      sub_s                                   substring of a from int [b:c]
  61. 68      mul_i                                   multiply int (a*b)
  62. 6A      mul_r                                   multply real (a*b)
  63. 6B      mul_s                                   multiply string a by int b times
  64. 6C      div_i                                   divide int (a/b)
  65. 6E      div_r                                   divide real (a/b)
  66. 70      rem_i                                   remainder int (a%b)
  67. 72      rem_r                                   remainder real (a%b)
  68. 74      neg_i                                   negate int (-a)
  69. 76      neg_r                                   negate real (-a)
  70.  
  71. 78      shl_i                                   shift int left (a << b)
  72. 79      shl_s                                   shift string left (a[b:])
  73. 7A      shr_i                                   shift int right (a >> b)
  74. 7B      shr_s                                   shift string right (a[:-b])
  75. 7C      ushr_i                                  unsigned shift int right (a >>> b)
  76. 7E      and_i                                   bitwise int and (a & b)
  77. 80      or_i                                    bitwise int or (a | b)
  78. 82      xor_i                                   bitwise int xor (a ^ b)
  79. 83      in_s                                    string a within string b?
  80. 84      inc_i           n                       increment local variable n by 1
  81.  
  82. # Conversion
  83.  
  84. 87      i_to_r                                  convert int a to real
  85. 88      i_to_s                                  convert int a to string
  86. 8E      r_to_i                                  convert real a to int
  87. 8F      r_to_s                                  convert real a to string
  88. 90      s_to_i                                  read int from string a
  89. 91      s_to_r                                  read real from string a
  90.  
  91. # Comparison
  92.  
  93. 94      cmp_i                                   compare int a and b (a-b)
  94. 95      cmp_r                                   compare real a and b (a-b)
  95. 96      cmp_s                                   compare string a and b (a<b)
  96.  
  97. # Control
  98.  
  99. 99      if_eq           label                   branch if int a == 0
  100. 9A      if_ne           label                   branch if int a != 0
  101. 9B      if_lt           label                   branch if int a < 0
  102. 9C      if_ge           label                   branch if int a >= 0
  103. 9D      if_gt           label                   branch if int a > 0
  104. 9E      if_le           label                   branch if int a <= 0
  105.  
  106. 9F      if_cmpeq        label                   branch if int a == b
  107. A0      if_cmpne        label                   branch if int a != b
  108. A1      if_cmplt        label                   branch if int a < b
  109. A2      if_cmpge        label                   branch if int a >= b
  110. A3      if_cmpgt        label                   branch if int a > b
  111. A4      if_cmple        label                   branch if int a <= b
  112. A5      if_cmpeq        label                   branch if reference a == b
  113. A6      if_cmpne        label                   branch if reference a != b
  114.  
  115. A7      goto            label                   branch always to label
  116. A8      jsr             label                   branch to label; push return location
  117. A9      ret             n                       branch to location in variable n
  118. AC      i_return                                return int from method
  119. AF      d_return                                return double from method
  120. B0      r_return                                return reference from method
  121. B1      return                                  return from method
  122.  
  123. # Access
  124.  
  125. B4      getfield        class/field desc        push object field
  126. B5      putfield        class/field desc        store a in object field
  127.  
  128. B6      invokevirtual   class/method desc       invoke method virtually
  129.  
  130. # Objects
  131.  
  132. BB      new             class                   create new object of class
  133. BC      newarray        type                    create array of type, length a
  134. BD      a_newarray      class                   create array of class, length a
  135. BE      arraylength                             push length of array
  136. BF      throw                                   throw exception a
  137. C0      checktype       class                   throw exception if a is not an instance of class
  138. C1      instanceof      class                   push 1 if a is class, 0 otherwise
  139.  
  140. # Extras
  141.  
  142. C5      multinewarray   class n                 create multidimensional array with first n dimensions initialized to lengths a, b, c...

Raw Paste


Login or Register to edit or fork this paste. It's free.