summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-04-11 22:30:57 -0700
committerGitHub <[email protected]>2023-04-11 22:30:57 -0700
commit7f24e0dbe04ee088e499e3d398339080ae2227e5 (patch)
tree34226871555301c261403409d5a9db505320640a
parentfeat: factorial implementation (diff)
downloadmarie-7f24e0dbe04ee088e499e3d398339080ae2227e5.tar.xz
marie-7f24e0dbe04ee088e499e3d398339080ae2227e5.zip
faet: modulus of x raised y
-rw-r--r--modulus_of_x_raised_y.mas105
1 files changed, 105 insertions, 0 deletions
diff --git a/modulus_of_x_raised_y.mas b/modulus_of_x_raised_y.mas
new file mode 100644
index 0000000..c432d41
--- /dev/null
+++ b/modulus_of_x_raised_y.mas
@@ -0,0 +1,105 @@
+/ input and store x
+input
+subt one
+store x
+
+/ input and store y
+input
+store y
+
+/ input and store z
+input
+store z
+
+/ calculate the exponent
+jns exponent
+
+/ calculate modulus
+jump divide
+
+/ bypass ac crunch
+quit_divide, load result
+ output
+
+ halt
+
+exponent, hex 0
+ load y
+ store y_count
+_exponent_pass, load x
+ / while (counter > 0)
+ skipcond 800
+ jumpi exponent
+
+ jns _exponent_multiply
+
+ / y_count = result
+ load result
+ store y_count
+
+ / x += 1
+ load x
+ subt one
+ store x
+
+ jump _exponent_pass
+_exponent_multiply, hex 0
+ / result = 0
+ load zero
+ store result
+_exponent_multiplier, load y_count
+ / while (y_count > 0)
+ skipcond 800
+ jumpi _exponent_multiply
+
+ / result += y
+ load result
+ add y
+ store result
+
+ / y_count += 1
+ load y_count
+ subt one
+ store y_count
+
+ jump _exponent_multiplier
+
+divide, load dividend
+ / dividend += _divide_temporary
+ add _divide_temporary
+ store dividend
+
+ / result -= z
+ load result
+ subt z
+ store result
+
+ / while (divide < 0)
+ skipcond 000
+ jump divide
+
+ / dividend -= _divide_temporary
+ load dividend
+ subt _divide_temporary
+ store dividend
+
+ / result += z
+ load result
+ add z
+ store result
+
+ jump quit_divide
+
+/ constants
+one, dec 1
+zero, hex 0
+
+/ mutable variables
+x, hex 0
+y, hex 0
+y_count, hex 0
+original_y, hex 0
+z, hex 0
+result, hex 0
+dividend, hex 0
+_divide_temporary, dec 1