Advertisement
laifs

CommandBlock Pseudocode: Arbitrary-Precision Addition

Nov 23rd, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. ARBITRARY-PRECISION SIGNED-INTEGER ADDITION:
  2. VARIABLES:
  3. null: air
  4. char: wool or stained_hardened_clay
  5. registers: v0 #carry of prev op
  6. v1 #for t1
  7. v2 #for t2
  8. b0 #boolean result
  9. b1 #base
  10. pointers: p1 #for t1
  11. p2 #for t2
  12. p3 #for t3
  13. tapes: t1 #input 1
  14. t2 #input 2
  15. t3 #output
  16.  
  17. sys_reset:
  18. move p1 tape_start # move p1 to start of tape
  19. move p2 tape_start # move p2 to start of tape
  20. move p3 tape_start # move p3 to start of tape
  21. $v0 = 0 # load 0 into $v0
  22. $v1 = 0 # load 0 into $v1
  23. $v2 = 0 # load 0 into $v2
  24. $b0 = 0 # load 0 into $b0
  25.  
  26. sys_write:
  27. write p3 $v1 # write $v1 on t3 at p3
  28. p3++ # move p3 to next char
  29.  
  30. sys_read:
  31. $b0 = 0 # load 0 into $b0, 0=failed reading
  32. $v1 = 0 # load 0 into $v1
  33. $v2 = 0 # load 0 into $v2
  34.  
  35. test p1==char # p1 pointing at a char
  36. $v1 = read p1 # read p1, store in v1
  37. $b0 = 1 # $b0 = found some input
  38.  
  39. test p2==char # p2 pointing at a char
  40. $v2 = read p2 # read p2, store in v2
  41. $b0 = 1 # $b0 = found some input
  42.  
  43. wait() # wait for read
  44. p1++ # move p1 to next char
  45. p2++ # move p2 to next char
  46.  
  47. fun_add:
  48. sys_read # $v1 <- p1, $v2 <- p2, p1++, p2++, $b=0->failed
  49. wait() # wait for read
  50. $v1 += $v0 # add $v1 and $v0, store in $v1
  51. wait() # wait for tests
  52.  
  53. test $b0 == 0 # reached end of t1 and t2
  54. test $v1 == 0 # no carry left over
  55. $b0 = 1 # $b0 = no carry left over
  56. wait() # wait for previous test
  57. test $b0 == 0 # carry left over
  58. sys_write # write carry
  59. wait() # wait for sys_reset
  60. sys_reset # reset p1,p2,p3,v0,v1,v2,b0
  61. END
  62.  
  63. test $b0 == 1 # not reached end of t1 or t2
  64. $v0 = 0 # load 0 into $v0
  65. $v1 += $v2 # add $v1 and $v2, store in $v1
  66. wait() # wait for add
  67. $v0 += $v1 # copy v1 into v0
  68. wait() # wait for add
  69. $v0 /= $b1 # carry = $v0 / base
  70. $v1 %= $b1 # remainder of $v1 / base, store in $v1
  71. wait() # wait for /= and %=
  72. sys_write # write $v1 on t3 at p3, p3++
  73. wait() # wait for write
  74. fun_add # repeat fun_add
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement