summaryrefslogtreecommitdiff
path: root/x86_64/mul_by_add.s
diff options
context:
space:
mode:
Diffstat (limited to 'x86_64/mul_by_add.s')
-rw-r--r--x86_64/mul_by_add.s25
1 files changed, 25 insertions, 0 deletions
diff --git a/x86_64/mul_by_add.s b/x86_64/mul_by_add.s
new file mode 100644
index 0000000..3e8c360
--- /dev/null
+++ b/x86_64/mul_by_add.s
@@ -0,0 +1,25 @@
+# Do a multiplication without using mulq, resulting in a * b
+.section .text
+.globl _start
+
+.set OP, 1 # Set here the numbers to
+.set OP2, 1 # be multiplied
+
+_start:
+ movq $OP2, %rcx
+ movq $0, %rax
+
+ # We can't rely on loopq to drop exit the loop in case OP2
+ # is 0, because the first iteraction will cause %rcx to be -1
+ cmpq $OP2, %rax
+ je exit
+
+
+addloop:
+ addq $OP, %rax
+ loopq addloop
+
+exit:
+ movq %rax, %rdi
+ movq $60, %rax
+ syscall