aboutsummaryrefslogtreecommitdiffstats
path: root/01-Multiples-of-3-and-5/asm
diff options
context:
space:
mode:
Diffstat (limited to '01-Multiples-of-3-and-5/asm')
-rw-r--r--01-Multiples-of-3-and-5/asm/Makefile6
-rwxr-xr-x01-Multiples-of-3-and-5/asm/euler1bin0 -> 17336 bytes
-rw-r--r--01-Multiples-of-3-and-5/asm/euler1.asm42
-rw-r--r--01-Multiples-of-3-and-5/asm/euler1.obin0 -> 2384 bytes
4 files changed, 48 insertions, 0 deletions
diff --git a/01-Multiples-of-3-and-5/asm/Makefile b/01-Multiples-of-3-and-5/asm/Makefile
new file mode 100644
index 0000000..c34d1a2
--- /dev/null
+++ b/01-Multiples-of-3-and-5/asm/Makefile
@@ -0,0 +1,6 @@
+euler1: euler1.o
+ gcc euler1.o -o euler1
+euler1.o: euler1.asm
+ nasm -w+all -f elf64 -g -F stabs euler1.asm
+clean:
+ rm -f euler1 euler1.o
diff --git a/01-Multiples-of-3-and-5/asm/euler1 b/01-Multiples-of-3-and-5/asm/euler1
new file mode 100755
index 0000000..278476a
--- /dev/null
+++ b/01-Multiples-of-3-and-5/asm/euler1
Binary files differ
diff --git a/01-Multiples-of-3-and-5/asm/euler1.asm b/01-Multiples-of-3-and-5/asm/euler1.asm
new file mode 100644
index 0000000..9541295
--- /dev/null
+++ b/01-Multiples-of-3-and-5/asm/euler1.asm
@@ -0,0 +1,42 @@
+extern printf
+SECTION .data
+flag: db "%d",10,0 ; "%d\n\0"
+
+SECTION .text
+ global main
+
+main:
+ push rbp ; set up stack
+ mov rbp, rsp
+ xor rax, rax ; start at multiple (i = 0)
+ mov r11, 0 ; sum = 0
+ mov r12, 1000 ; max = 1000
+.loop xor rdx, rdx ; clear rdx (remainder)
+ push rax ; save rax
+ mov rcx, 5 ; divisible by 5
+ div rcx ; divide rdx:rax/rcx
+ cmp rdx, 0 ; compare only remainder
+ jz .sum ; if r = 0 , add to sum
+ xor rdx,rdx ; clear rdx
+ mov rax, QWORD [rsp] ; reload rax
+ mov rcx, 3 ; divisible by 3
+ div rcx ; divide rdx:rax/rcx
+ cmp rdx, 0 ; compare only remainder
+ jnz .next ; if r = 0 , add to sum
+
+.sum add r11, QWORD [rsp] ; add to sum register
+
+.next pop rax ; return rax value from stack to be inc
+ inc rax ; i++
+ cmp rax, r12 ; while rax < r12 (1000)
+ jl .loop ; repeat
+
+ mov rdi, flag ; arg 1 (format)
+ mov rsi, r11 ; arg 2 (value)
+ mov rax, 0 ; no xmm registers
+ call printf wrt ..plt
+ pop rbp
+
+ mov rax, 0
+ ret
+
diff --git a/01-Multiples-of-3-and-5/asm/euler1.o b/01-Multiples-of-3-and-5/asm/euler1.o
new file mode 100644
index 0000000..b45c7c1
--- /dev/null
+++ b/01-Multiples-of-3-and-5/asm/euler1.o
Binary files differ