imk0tter

POP N

Sep 6th, 2026
216
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. // NOTES:
  2. // WHEN PUSHING CONSTANTS ON THE STACK YOU CAN SPECIFY THE SIZE IN BITS
  3. // ALSO, WHEN PUSHING/POPPING OFF THE STACK, YOU CAN SPECIFY THE REGISTERS SIZE
  4. //
  5. // !TODO!: MAKE SURE EVERYTHING IS 1 BIT AND 0 TICKS (ALSO DIGITAL)
  6. //
  7. // === STACKS ===
  8. // MAIN_STACK_OFFSET = 0
  9. // TRANSFER_STACK_OFFSET = 1
  10. // RETURN_STACK_OFFSET = 2
  11. // ==============
  12.  
  13. MAKE_STACK_OFFSET(STACK_OFFSET)
  14. {
  15. PUSH STACK_REGISTER
  16. EXECUTE ADD, 2
  17. POP STACK_REGISTER
  18. }
  19.  
  20. UNMAKE_STACK_OFFSET(STACK_OFFSET)
  21. {
  22. PUSH STACK_REGISTER
  23. EXECUTE SUBTRACT_REVERSE, 2
  24. POP STACK_REGISTER
  25. }
  26.  
  27. _MOVE_TO_FRONT_OF_STACK(N)
  28. {
  29. if N == 0
  30. {
  31. PUSH RETURN_STACK_OFFSET
  32. EXECUTE MAKE_STACK_OFFSET, 1
  33.  
  34. POP XOR_REGISTER
  35.  
  36. PUSH RETURN_STACK_OFFSET
  37. EXECUTE UNMAKE_STACK_OFFSET, 1
  38.  
  39. PUSH XOR_REGISTER
  40. }
  41. else
  42. {
  43. PUSH 1
  44. EXECUTE SUBRACTION, 1
  45.  
  46. POP XOR_REGISTER
  47.  
  48. PUSH TRANSFER_STACK_OFFSET
  49. EXECUTE MAKE_STACK_OFFSET, 1
  50.  
  51. PUSH XOR_REGISTER
  52.  
  53. PUSH TRANSFER_STACK_OFFSET
  54. EXECUTE UNMAKE_STACK_OFFSET, 1
  55.  
  56. //!DIGITAL RECURSION!
  57. EXECUTE _MOVE_TO_FRONT_OF_STACK, 1
  58.  
  59. PUSH TRANSFER_STACK_OFFSET
  60. EXECUTE MAKE_STACK_OFFSET, 1
  61.  
  62. POP XOR_REGISTER
  63.  
  64. PUSH TRANSFER_STACK_OFFSET
  65. EXECUTE UNMAKE_STACK_OFFSET, 1
  66.  
  67. PUSH XOR_REGISTER
  68. }
  69. }
  70.  
  71. // MOVES STACK ELEMENT N, STARTING FRONT TO BACK WHERE 0 IS THE FRONT MOST ELEMENT, TO THE FRONT OF THE STACK
  72. MOVE_TO_FRONT_OF_STACK(N)
  73. {
  74. PUSH RETURN_STACK_OFFSET
  75. EXECUTE MAKE_STACK_OFFSET, 1
  76.  
  77. PUSH XOR_REGISTER
  78.  
  79. PUSH RETURN_STACK_OFFSET
  80. EXECUTE UNMAKE_STACK_OFFSET, 1
  81.  
  82. //!DIGITAL RECURSION!
  83. EXECUTE _MOVE_TO_FRONT_OF_STACK, 1
  84.  
  85. PUSH RETURN_STACK_OFFSET
  86. EXECUTE MAKE_STACK_OFFSET, 1
  87.  
  88. POP XOR_REGISTER
  89.  
  90. PUSH RETURN_STACK_OFFSET
  91. EXECUTE UNMAKE_STACK_OFFSET, 1
  92.  
  93. PUSH XOR_REGISTER
  94.  
  95. PUSH RETURN_STACK_OFFSET
  96. EXECUTE MAKE_STACK_OFFSET, 1
  97.  
  98. POP XOR_REGISTER
  99.  
  100. PUSH RETURN_STACK_OFFSET
  101. EXECUTE UNMAKE_STACK_OFFSET, 1
  102. }
  103. _DUPLICATE_STACK(N)
  104. {
  105. IF N == 0
  106. {
  107. }
  108. ELSE
  109. {
  110. PUSH 1
  111. EXECUTE SUBTRACTION, 1
  112.  
  113. PUSH 1
  114. EXECUTE MOVE_TO_FRONT_OF_STACK, 1
  115.  
  116. POP XOR_REGISTER
  117.  
  118. PUSH XOR_REGISTER
  119. PUSH XOR_REGISTER
  120.  
  121. PUSH 2
  122. EXECUTE MOVE_TO_FRONT_OF_STACK, 2
  123.  
  124. // !DIGITAL RECURSION!
  125. EXECUTE _DUPLICATE_STACK, 1
  126. }
  127. }
  128.  
  129. DUPLICATE_STACK(N)
  130. {
  131. PUSH 1
  132. EXECUTE MAKE_STACK_OFFSET, 1
  133.  
  134. PUSH XOR_REGISTER
  135.  
  136. PUSH 1
  137. EXECUTE UNMAKE_STACK_OFFSET, 1
  138.  
  139. // !DIGITAL RECURSION!
  140. EXECUTE _DUPLICATE_STACK, 1
  141.  
  142. PUSH 1
  143. EXECUTE MAKE_STACK_OFFSET, 1
  144.  
  145. POP XOR_REGISTER
  146.  
  147. PUSH 1
  148. EXECUTE UNMAKE_STACK_OFFSET, 1
  149.  
  150. }
  151.  
  152. DUPLICATE_STACK
  153. {
  154. PUSH 1
  155. EXECUTE MAKE_STACK_OFFSET, 1
  156.  
  157. PUSH XOR_REGISTER
  158.  
  159. PUSH 1
  160. EXECUTE UNMAKE_STACK_OFFSET, 1
  161.  
  162. POP XOR_REGISTER
  163.  
  164. PUSH XOR_REGISTER
  165. PUSH XOR_REGISTER
  166.  
  167. PUSH 1
  168. EXECUTE MAKE_STACK_OFFSET, 1
  169.  
  170. POP XOR_REGISTER
  171.  
  172. PUSH 1
  173. EXECUTE UNMAKE_STACK_OFFSET, 1
  174. }
  175.  
Advertisement
Comments
  • imk0tter
    32 days
    # text 0.78 KB | 0 0
    1. _MOVE_FROM_OFFSET_TO_POS(OFFSET, POS)
    2. {
    3. if POS == 0
    4. {
    5. EXECUTE MOVE_TO_FRONT_OF_STACK, 1
    6. }
    7. else
    8. {
    9. PUSH 1
    10. EXECUTE SUBRACTION, 1
    11.  
    12. POP XOR_REGISTER
    13.  
    14. PUSH 3
    15. EXECUTE MAKE_STACK_OFFSET, 1
    16.  
    17. PUSH XOR_REGISTER
    18.  
    19. PUSH 3
    20. EXECUTE UNMAKE_STACK_OFFSET, 1
    21.  
    22. //!DIGITAL RECURSION!
    23. EXECUTE _MOVE_FROM_OFFSET_TO_POS, 1
    24.  
    25. PUSH 3
    26. EXECUTE MAKE_STACK_OFFSET, 1
    27.  
    28. POP XOR_REGISTER
    29.  
    30. PUSH 3
    31. EXECUTE UNMAKE_STACK_OFFSET, 1
    32.  
    33. PUSH XOR_REGISTER
    34. }
    35. }
    36.  
    37. MOVE_FROM_OFFSET_TO_POS(POS,OFFSET)
    38. {
    39. PUSH 1
    40. EXECUTE MOVE_TO_FRONT_OF_STACK, 1
    41.  
    42. PUSH 3
    43. EXECUTE MAKE_STACK_OFFSET, 1
    44.  
    45. PUSH XOR_REGISTER
    46.  
    47. PUSH 3
    48. EXECUTE UNMAKE_STACK_OFFSET, 1
    49.  
    50. PUSH 3
    51. EXECUTE MAKE_STACK_OFFSET, 1
    52.  
    53. POP XOR_REGISTER
    54.  
    55. PUSH 3
    56. EXECUTE UNMAKE_STACK_OFFSET, 1
    57. }
Add Comment
Please, Sign In to add comment