From e18c47449761598ab0d4e50979f99f4858bc4c08 Mon Sep 17 00:00:00 2001 From: Franciszek Malinka Date: Tue, 30 Mar 2021 12:36:04 +0200 Subject: update --- Semestr 4/ask/lista5/zad5.c | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Semestr 4/ask/lista5/zad5.c (limited to 'Semestr 4/ask/lista5/zad5.c') diff --git a/Semestr 4/ask/lista5/zad5.c b/Semestr 4/ask/lista5/zad5.c new file mode 100644 index 0000000..c1fe957 --- /dev/null +++ b/Semestr 4/ask/lista5/zad5.c @@ -0,0 +1,54 @@ +#include +#include + +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 -- cgit v1.2.3