aboutsummaryrefslogtreecommitdiff
path: root/Semestr 4/ask/lista5
diff options
context:
space:
mode:
Diffstat (limited to 'Semestr 4/ask/lista5')
-rw-r--r--Semestr 4/ask/lista5/ask21_lista_5.pdfbin91135 -> 0 bytes
-rw-r--r--Semestr 4/ask/lista5/puzzle3.s19
-rw-r--r--Semestr 4/ask/lista5/puzzle4.s24
-rw-r--r--Semestr 4/ask/lista5/puzzle5.s24
-rw-r--r--Semestr 4/ask/lista5/zad1.asm15
-rw-r--r--Semestr 4/ask/lista5/zad1.c25
-rw-r--r--Semestr 4/ask/lista5/zad1.s98
-rw-r--r--Semestr 4/ask/lista5/zad2.asm15
-rw-r--r--Semestr 4/ask/lista5/zad2.c44
-rw-r--r--Semestr 4/ask/lista5/zad3.c60
-rw-r--r--Semestr 4/ask/lista5/zad4.c66
-rw-r--r--Semestr 4/ask/lista5/zad5.c54
12 files changed, 0 insertions, 444 deletions
diff --git a/Semestr 4/ask/lista5/ask21_lista_5.pdf b/Semestr 4/ask/lista5/ask21_lista_5.pdf
deleted file mode 100644
index b8c1977..0000000
--- a/Semestr 4/ask/lista5/ask21_lista_5.pdf
+++ /dev/null
Binary files differ
diff --git a/Semestr 4/ask/lista5/puzzle3.s b/Semestr 4/ask/lista5/puzzle3.s
deleted file mode 100644
index f625752..0000000
--- a/Semestr 4/ask/lista5/puzzle3.s
+++ /dev/null
@@ -1,19 +0,0 @@
- .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
diff --git a/Semestr 4/ask/lista5/puzzle4.s b/Semestr 4/ask/lista5/puzzle4.s
deleted file mode 100644
index 16ca386..0000000
--- a/Semestr 4/ask/lista5/puzzle4.s
+++ /dev/null
@@ -1,24 +0,0 @@
-.global puzzle4
-
-.text
-puzzle4: # argumenty: rdi - long*, rsi - long, rdx - uint64, rcx - uint64
- movq %rcx, %rax # rax := rcx
- subq %rdx, %rax # rax -= rdx
- shrq %rax # rax >>= 1; // ale logiczne!
- addq %rdx, %rax # rax += rdx;
- cmpq %rdx, %rcx # if rcx < rdx
- jb .L5 # then jump to L5
- movq (%rdi,%rax,8), %r8 # r8 = *(rdi + 8*rax)
- cmpq %rsi, %r8 # if rsi == r8
- je .L10 # then jump to L10
- cmpq %rsi, %r8 # if (r8 - rsi < 0) <=> r8 < rsi
- jg .L11 # then jump to L11
- leaq 1(%rax), %rdx # rdx := rax + 1
- call puzzle4 # call recursively puzzle4
-.L10: ret # return rax
-.L11: leaq -1(%rax), %rcx # rcx := rax - 1
- call puzzle4 # call recursively puzzle4
- ret # return rax
-.L5: movl $-1, %eax # eax := -1
- ret # return rax
-
diff --git a/Semestr 4/ask/lista5/puzzle5.s b/Semestr 4/ask/lista5/puzzle5.s
deleted file mode 100644
index 02c3aea..0000000
--- a/Semestr 4/ask/lista5/puzzle5.s
+++ /dev/null
@@ -1,24 +0,0 @@
-400590 <switch_prob>:
-400590: 48 83 subq $0x3c, %rsi # rsi -= 0x3c
-400594: 48 83 fe 0 cmpq $0x5, %rsi # if rsi > 0x5
-400598: 77 29 ja *0x4005c3 # then jump to line 16
-40059a: ff 24 f5 f8 06 40 00 jmpq *0x4006f8(,%rsi,8) # jump to 19 + rsi
-4005a1: 48 8d 04 fd 00 00 00 00 lea 0x0(,%rdi,8),%rax # rax := rdi * 8
-4005a9: c3 retq # return rax
-4005aa: 48 89 f8 movq %rdi,%rax # rax := rdi
-4005ad: 48 c1 f8 03 sarq $0x3,%rax # rax >>= 3 (arithmetic)
-4005b1: c3 retq # return rax
-4005b2: 48 89 f8 movq %rdi,%rax # rax := rdi
-4005b5: 48 c1 e0 04 shlq $0x4,%rax # rax <<= 4 (logic)
-4005b9: 48 29 f8 subq %rdi,%rax # rax -= rdi
-4005bc: 48 89 c7 movq %rax,%rdi # rdi := rax
-4005bf: 48 0f af ff imulq %rdi,%rdi # rdi *= rdi
-4005c3: 48 8d 47 4b leaq 0x4b(%rdi),%rax # rax := 0x4b + rdi
-4005c7: c3 retq # return rax
-
-0x4006f8: 0x4005a1 # line 6
-0x400700: 0x4005a1 # line 6
-0x400708: 0x4005b2 # line 11
-0x400710: 0x4005c3 # line 16
-0x400718: 0x4005aa # line 8
-0x400720: 0x4005bf # line 15
diff --git a/Semestr 4/ask/lista5/zad1.asm b/Semestr 4/ask/lista5/zad1.asm
deleted file mode 100644
index 22aef29..0000000
--- a/Semestr 4/ask/lista5/zad1.asm
+++ /dev/null
@@ -1,15 +0,0 @@
-puzzle: testl %esi, %esi
- je .L4 ; jesli esi == 0, skocz do L4
- xorl %edx, %edx ; edx := 0
- xorl %eax, %eax ; eax := 0
-.L3: movl %edi, %ecx ; ecx := edi
- andl $1, %ecx ; ecx &= 1
- addl %ecx, %eax ; eax += eax
- sarq %rdi ; rdi >>= 1
- incl %edx, ; edx++
- cmpl %edx, %esi ; edx - esi != 0? <=> edx != esi
- jne .L3 ; jesli tak, skocz do L3
- ret
-.L4 movl %esi, %eax ; return esi
- ret
-
diff --git a/Semestr 4/ask/lista5/zad1.c b/Semestr 4/ask/lista5/zad1.c
deleted file mode 100644
index 9379bb2..0000000
--- a/Semestr 4/ask/lista5/zad1.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-int puzzle(long x /* rdi */ , unsigned n /* rsi */) {
- if (n == 0) {
- return n;
- }
- int t = 0; // edx := 0
- int result = 0; // eax := 0
- do {
- int m = x & 0xffffffff; // ecx := edi
- m &= 1;
- result += m;
- x >>= 1;
- t++;
- } while (t != n);
- return result; // ????
-}
-
-int main() {
- long x;
- unsigned n;
- scanf("%ld%u", &x, &n);
- return puzzle(x, n);
-} \ No newline at end of file
diff --git a/Semestr 4/ask/lista5/zad1.s b/Semestr 4/ask/lista5/zad1.s
deleted file mode 100644
index b935b9e..0000000
--- a/Semestr 4/ask/lista5/zad1.s
+++ /dev/null
@@ -1,98 +0,0 @@
- .file "zad1.c"
- .text
- .p2align 4
- .globl puzzle
- .type puzzle, @function
-puzzle:
-.LFB23:
- .cfi_startproc
- endbr64
- xorl %r8d, %r8d
- testl %esi, %esi
- je .L1
- xorl %eax, %eax
- .p2align 4,,10
- .p2align 3
-.L3:
- movl %edi, %edx
- addl $1, %eax
- sarq %rdi
- andl $1, %edx
- addl %edx, %r8d
- cmpl %esi, %eax
- jne .L3
-.L1:
- movl %r8d, %eax
- ret
- .cfi_endproc
-.LFE23:
- .size puzzle, .-puzzle
- .section .rodata.str1.1,"aMS",@progbits,1
-.LC0:
- .string "%ld%u"
- .section .text.startup,"ax",@progbits
- .p2align 4
- .globl main
- .type main, @function
-main:
-.LFB24:
- .cfi_startproc
- endbr64
- subq $40, %rsp
- .cfi_def_cfa_offset 48
- leaq .LC0(%rip), %rdi
- movq %fs:40, %rax
- movq %rax, 24(%rsp)
- xorl %eax, %eax
- leaq 12(%rsp), %rdx
- leaq 16(%rsp), %rsi
- call __isoc99_scanf@PLT
- movl 12(%rsp), %ecx
- movq 16(%rsp), %rax
- xorl %r8d, %r8d
- testl %ecx, %ecx
- je .L8
- xorl %edx, %edx
- .p2align 4,,10
- .p2align 3
-.L10:
- movl %eax, %esi
- addl $1, %edx
- sarq %rax
- andl $1, %esi
- addl %esi, %r8d
- cmpl %ecx, %edx
- jne .L10
-.L8:
- movq 24(%rsp), %rax
- xorq %fs:40, %rax
- jne .L16
- movl %r8d, %eax
- addq $40, %rsp
- .cfi_remember_state
- .cfi_def_cfa_offset 8
- ret
-.L16:
- .cfi_restore_state
- call __stack_chk_fail@PLT
- .cfi_endproc
-.LFE24:
- .size main, .-main
- .ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
- .section .note.GNU-stack,"",@progbits
- .section .note.gnu.property,"a"
- .align 8
- .long 1f - 0f
- .long 4f - 1f
- .long 5
-0:
- .string "GNU"
-1:
- .align 8
- .long 0xc0000002
- .long 3f - 2f
-2:
- .long 0x3
-3:
- .align 8
-4:
diff --git a/Semestr 4/ask/lista5/zad2.asm b/Semestr 4/ask/lista5/zad2.asm
deleted file mode 100644
index 7fe4364..0000000
--- a/Semestr 4/ask/lista5/zad2.asm
+++ /dev/null
@@ -1,15 +0,0 @@
-puzzle2:
- movq %rdi, %rax ; rax := rdi
-.L3: movb (%rax), %r9b ; r9b := *rax
- leaq 1(%rax), %r8 ; r8 := rax + 1
- movq %rsi, %rdx ; rdx := *rsi
-.L2: movb (%rdx), %cl ; cl := *rdx
- incq %rdx ; rdx++
- testb %cl, %cl ; if (cl == 0)
- je .L4 ; then jump to L4
- cmpb %cl, %r9b ; if (cl != r9b)
- jne .L2 ; then jump to L2
- movq %r8, %rax ; rax := r8
- jmp .L3 ; jump to L3
-.L4 subq %rdi, %rax ; rax -= rdi
- ret \ No newline at end of file
diff --git a/Semestr 4/ask/lista5/zad2.c b/Semestr 4/ask/lista5/zad2.c
deleted file mode 100644
index ab9cb54..0000000
--- a/Semestr 4/ask/lista5/zad2.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-long puzzle2(char *rdi /* rdi */, char *rsi /* rsi */) {
- char *rax = rdi;
-L3:
- char r9b = *rax;
- char *r8 = rax + 1;
- char *rdx = rsi;
-L2:
- char cl = *rdx;
- rdx++;
- if (cl == 0) {
- goto L4;
- }
- if (cl != r9b) {
- goto L2;
- }
- rax = r8;
- goto L3;
-L4:
- return rax - rdi;
-}
-
-
-// funkcja sprawdza jaka jest pierwsza litera z s która nie występuje w d
-// jesli wszystkie występują, to zwróci długość s.
-long puzzle2_decoded(char *s /* rdi */, char *d /* rsi */) {
- for (char *result = s ; ; result++) {
- char first = *result;
- char *crawl = d;
- for (char *crawl = d; *crawl != first; crawl++) {
- if (*crawl == 0) {
- return result - s;
- }
- }
- }
-}
-
-
-
-int main() {
-
-} \ No newline at end of file
diff --git a/Semestr 4/ask/lista5/zad3.c b/Semestr 4/ask/lista5/zad3.c
deleted file mode 100644
index 1ce9067..0000000
--- a/Semestr 4/ask/lista5/zad3.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-uint32_t puzzle3(uint32_t n, uint32_t d);
-
-// uint32_t divv(uint32_t edi, uint32_t esi) {
-// uint64_t rdi = edi;
-// uint64_t rsi = esi;
-// rsi <<= 32;
-// uint8_t edx = 32;
-// uint32_t ecx = 0x80000000;
-// uint32_t eax = 0;
-// L3:
-// rdi += rdi;
-// int64_t r8 = rdi;
-// r8 -= rsi;
-// if (r8 < 0) {
-// goto L2;
-// }
-// eax |= ecx;
-// rdi = r8;
-// L2:
-// ecx >>= 1;
-// edx--;
-// if (edx != 0) {
-// goto L3;
-// }
-// return eax;
-// }
-
-uint32_t decoded(uint32_t n, uint32_t d) {
- uint64_t N = n;
- uint64_t D = (uint64_t)d << 32;
-
- uint32_t bit = 0x80000000;
- uint32_t result = 0;
- for (uint32_t edx = 32; edx > 0; edx--) {
- N += N;
- if ((int64_t)(N - D) >= 0) {
- result |= bit;
- N -= D;
- }
- bit >>= 1;
- }
- return result;
-}
-
-int main() {
- for (uint32_t n=0; n <= 1000; ++n) {
- for (uint32_t d=1; d <= 1000; ++d) {
- if (puzzle3(n,d) != decoded(n, d)) {
- printf("%d %d\n", n, d);
- printf("%u %u\n", puzzle3(n, d), decoded(n, d));
- return 0;
- }
- }
- }
- printf("%d\n", puzzle3(1000000000, 2));
-} \ No newline at end of file
diff --git a/Semestr 4/ask/lista5/zad4.c b/Semestr 4/ask/lista5/zad4.c
deleted file mode 100644
index a6927fb..0000000
--- a/Semestr 4/ask/lista5/zad4.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-int puzzle4(long *a, long v, uint64_t s, uint64_t e);
-
-long tab[100];
-
-int assembly_like(long *rdi, long rsi, uint64_t rdx, uint64_t rcx) {
- uint64_t rax = rcx;
- rax -= rdx;
- rax >>= 1;
- rax += rdx;
- if (rcx < rdx) {
- goto L5;
- }
- long r8 = *(rdi + rax*8);
- if (rsi == r8) {
- goto L10;
- }
- if (rsi > r8) {
- goto L11;
- }
- rdx = rax + 1;
- assembly_like(rdi, rsi, rdx, rcx);
-L10:
- return (int)rax;
-L11:
- rcx = rax - 1;
- assembly_like(rdi, rsi, rdx, rcx);
- return (int)rax;
-L5:
- return -1;
-}
-
-
-// binsearch :)
-int decode(long *a, long v, uint64_t s, uint64_t e) {
- int result = (e + s) / 2;
- if (e < s) {
- return -1;
- }
- long val = a[result];
- if (v == val) {
- return result;
- }
- if (v < val) {
- e = result - 1;
- }
- else {
- s = result + 1;
- }
- return decode(a, v, s, e);
-}
-
-int main() {
- uint64_t n;
- long v;
- scanf("%ld %ld", &n, &v);
- for (int i = 0; i < n; i++) {
- scanf("%ld", &tab[i]);
- }
- printf("%d\n", puzzle4(tab, v, 0, n-1));
- printf("%d\n", decode(tab, v, 0, n-1));
-
-} \ No newline at end of file
diff --git a/Semestr 4/ask/lista5/zad5.c b/Semestr 4/ask/lista5/zad5.c
deleted file mode 100644
index c1fe957..0000000
--- a/Semestr 4/ask/lista5/zad5.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-
-long switch_prob(long rdi, long rsi) {
- static void *array[] = { &&L1, &&L1, &&L2, &&L3, &&L4, &&L5 };
- long rax;
- rsi -= 0x3c;
- if (rsi > 0x5) {
- goto L3;
- }
- goto *array[rsi];
-L1:
- rax = rdi * 8;
- return rax;
-L4:
- rax = rdi;
- rax >>= 3;
- retun rax;
-L2:
- rax = rdi;
- rax <<= 4;
- rax -= rdi;
- rdi = rax;
-L5:
- rdi *= rdi;
-L3:
- rax = 0x4b + rdi;
- return rax;
-}
-
-long decode(long x, long n) {
- long result;
- n -= 0x3c;
- switch (n)
- {
- case 0:
- case 1:
- return x + 8;
- case 4:
- return x >> 3;
- case 2:
- result = (x << 4) - x;
- x = result;
- case 5:
- x *= x;
- case 3:
- default:
- return 0x4b + x;
- }
-}
-
-int main() {
-
-} \ No newline at end of file