aboutsummaryrefslogtreecommitdiff
path: root/semestr-4/ask/lista5/puzzle3.s
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
commitc5fcf7179a83ef65c86c6a4a390029149e518649 (patch)
treed29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /semestr-4/ask/lista5/puzzle3.s
parentf8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff)
Duzy commit ze smieciami
Diffstat (limited to 'semestr-4/ask/lista5/puzzle3.s')
-rw-r--r--semestr-4/ask/lista5/puzzle3.s19
1 files changed, 19 insertions, 0 deletions
diff --git a/semestr-4/ask/lista5/puzzle3.s b/semestr-4/ask/lista5/puzzle3.s
new file mode 100644
index 0000000..f625752
--- /dev/null
+++ b/semestr-4/ask/lista5/puzzle3.s
@@ -0,0 +1,19 @@
+ .global puzzle3
+
+ .text
+puzzle3: # rdi: n; rsi: d
+ movl %edi, %edi # zeruje 32 starsze bity rdi
+ salq $32, %rsi # rsi <<= 32
+ movl $32, %edx # edx := 32
+ movl $0x80000000, %ecx # ecx := MIN_INT
+ xorl %eax, %eax # eax := 0
+.L3: addq %rdi, %rdi # rdi *= 2
+ movq %rdi, %r8 # r8 := rdi
+ subq %rsi, %r8 # r8 -= rsi
+ js .L2 # if r8 < 0 then jump to L2
+ orl %ecx, %eax # eax |= ecx
+ movq %r8, %rdi # rdi := r8
+.L2: shrl %ecx # ecx >>= 1
+ decl %edx # edx--
+ jne .L3 # if (edx != 0) then jump to L3
+ ret