From b2c2ff6de8ec728534c135dfc58b6a8edd1c3d89 Mon Sep 17 00:00:00 2001 From: javalsai Date: Sun, 1 Dec 2024 22:54:42 +0100 Subject: [PATCH] FUCK YEAH, 90% OF THE TIME IT WAS JUST REGISTER NAME MISMATCH FUCKERY --- 2024-asm/01/main | Bin 11464 -> 12056 bytes 2024-asm/01/main.asm | 147 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 131 insertions(+), 16 deletions(-) diff --git a/2024-asm/01/main b/2024-asm/01/main index bb2170f3807d931e681f5b510d881b7dc88d7f69..bda1609cfbec00706b704de41cac7d3fa47c240d 100755 GIT binary patch delta 2209 zcmX>RIU{a@hPZ?-0~|OoSTL|KI52Q9uurs)(z=F>O zq@wu^$N$n7FDe)(_X47#SEC9QT6R`#@~p)+ePh9^GKOU-)$1e^JfAz~IsR<9~^rXXjzh&M%(- z&-k`}1FQMq(Ovq&r}O=baF`k?&(5Qso!>nFpY!Rw;iLKDg#k#0(e=UWyzf z(^>ieuI0b0^bODE;~bur-;1s}#yQ4=9Ocnndc&jhP3+;x3W67y*8iLQNzj_nX0o1; z7o*MON+DfFo6XCGig-3Dh%icmLI`9z6Nq47V1UuglQ(LMPc~o_nQWja$IQZDvpG=l zE~7Iu11zSY>KRz6=f zZ=%U=gNpMBqMCUIDz1+v{tPM}j3y58B_l&Rnz$6$_l)%nU1$;t5DA8fXyR&6@wsT? zCQ$KtXyT4g@iS=Rp-}OcVDVsBSTQh^K_%XTB@p8MQ1NeQ;>)4p>_Vs^w0ZJJ74iC$ zP+2)N*(XqOEj01JQ1M7Kadu{qOBfjrp@~aD#gC(j$3evF8E&IVC_*F{9-xV9LB(I7 ziCaO%U!#dfLdAcfiQj;V^9qB41C&)k4rgFsNP$XdfF+=U3=9m#P;px{@hMPoPc-qR zQ1K8n@$FFYC}eSv{g@db%R#i>OMF!p91%}4jCBW!EZD9p|-uK t1GL?szz&HEHc)Lk*;GfHD*;-8G_y?3(lO(FtOHSCGFeekcyf&n4*+$AhW!8l delta 1383 zcmbOccOr6vhB${d0~|OoSTL|KI54m?uuZg&o z(qJF!+!rMh9^Eo3UfnF(FXR{*7+#b!GB9{HALV%cD0)9g(GD911_plC$?QTGm{k8y zzA0qQC^A`8*o#qQa)PifqsZny;Ub>N28_=)DTpvmR%Vo$9HA)3%*-INxl-{iUcUe;`xQ-g15{jC5Y@~>P;p5# z@e@#S1vK$1P;nhJ@mCP>dIobe305YM(-|3@(ZuDT;zelU8c^}uXyVpT@ds$)^-%FI zVDVs(Wf1HHmG}vkfQW%eZ>Tt<5Nb$7L&aIp#H%J7s*2bDgvzR+$+kkp9nr+6K*ht* z#J57llhDMELB(^?#BV^v>lupCBtAnV7+TQ8|3SsKqKW&0vlb)6MKp09sJNmqYH$cb z#Wlg=^`MZ0U@@qK9#{e*1|oH!;;v}oJy3BsG;v#~cs81N2vocrSsY}4GE|}uS%QIq zp#&;E6HUAkhxjyR1_l8JMg|77EHV)+&dh*b&dgBCt7~)eaGD|kIX|pp;7S?s0Y{1Am zIYL)~16Jfs7G#u|JVV!okz?{*UFpdddKRJ*iXdAU7$n#rG%EuGgYD#2J#8)nb%@9k V=E=MC%($*-LAZJhlXvOK0RTlFr;Y#s diff --git a/2024-asm/01/main.asm b/2024-asm/01/main.asm index 582a50c..26100fb 100644 --- a/2024-asm/01/main.asm +++ b/2024-asm/01/main.asm @@ -56,6 +56,8 @@ section .rodata DBGMSG_READLNFNSH_LEN: equ $ - DBGMSG_READLNFNSH section .data + demo_arr: dq 1, 2, 2, 3, 4 + demo_arr_len: equ $ - demo_arr section .text global _start @@ -149,7 +151,7 @@ _start: mov [rbp-16], rax - ; and deinterlace lists from stack to the mem vecs + ; and "deinterlace" lists from stack to the mem vecs mov rax, [rbp-24] mov rbx, [rbp-8] mov rcx, [rbp-16] @@ -164,24 +166,72 @@ _start: test rax, rax jnz .deint_loop - ; --dbg-- ensure stuff worked - ; rax = 0; rbx = qword[] list2 + ; and now we can also redefine + ; [rbp-32]: accumulator (rsp should be back to original place after popping that) + mov qword [rbp-32], 0 + + ; mov rax, rbx + ; mov rsi, [rbp-24] + ; mov rdi, 0x27A6 + ; call find_smolest + ; push rsi + ; call ptos + ; call print_ptos + ; pop rax + ; call ptos + ; call print_ptos + + ; and we keep the list1 smallest num and ammount in r11, r12 + ; same for list2 with r13 and r14 + + mov r11, 0 + mov r12, 1 mov r13, 0 - push rbx - .ensure_l: - cmp r13, [rbp-24] - je .ensure_end + mov r14, 1 + .substract_loop: + ; just list1 for now + test r12, r12 + jnz .find_smolest_1_end + mov rax, [rbp-8] + mov rsi, [rbp-24] + mov rdi, r11 + call find_smolest + cmp rax, 0FFFFFFFFFFFFFFFFh + je .substract_loop_end + mov r11, rax + mov r12, rsi + .find_smolest_1_end: + dec r12 - mov rbx, [rsp] - mov rax, [rbx+r13] - call ptos - call print_ptos + ; and list2 now + test r14, r14 + jnz .find_smolest_2_end + mov rax, [rbp-16] + mov rsi, [rbp-24] + mov rdi, r13 + call find_smolest + cmp rax, 0FFFFFFFFFFFFFFFFh + je .substract_loop_end + mov r13, rax + mov r14, rsi + .find_smolest_2_end: + dec r14 - add r13, 8 - jmp .ensure_l - .ensure_end: - pop rbx - ; --dbg-- + mov rax, r11 + sub rax, r13 + call n_abs + add qword [rbp-32], rax + + jmp .substract_loop + .substract_loop_end: + + mov rax, [rbp-32] + mov rdi, 10 + call itos + mov rax, r10 + mov rdi, r9 + call just_print + call print_newline ; exit mov rdi, 0 @@ -189,6 +239,71 @@ _start: mov rax, OS_EXIT syscall +; takes rax: n +n_abs: + cmp rax, 0 + jg .not_neg + not rax + inc rax + .not_neg: + ret + +; find smallest num in list: +; rax: list ptr | [rbp-8] +; rsi: list size (bytes) | [rbp-16] +; rdi: not-smaller-than | [rbp-24] +; returns +; rax: smolest, 0 if none +; rsi: amount +find_smolest: + push rbp + mov rbp, rsp + sub rsp, 48 + ; ... + ; [rbp-32]: smolest found yet + ; [rbp-40]: smolest found yet amount + mov qword [rbp-32], 0FFFFFFFFFFFFFFFFh + mov qword [rbp-40], 0 + + mov [rbp-8], rax + mov [rbp-16], rsi + mov [rbp-24], rdi + + push r15 ; save + push r14 + mov r15, 0 + .find_l: + mov r14, qword [rax+r15] + cmp r14, rdi + jbe .find_l_cont + + ; so here... ughhhhh + ; the number is greater than the limit + cmp r14, [rbp-32] + ja .find_l_cont ; cuz ugh, not smolest + je .smolest_but_not_new + ; and here is new smolest + mov [rbp-32], r14 + mov qword [rbp-40], 0 + .smolest_but_not_new: + inc qword [rbp-40] + + .find_l_cont: + add r15, 8 + cmp r15, rsi + jb .find_l + .find_l_end: + + pop r14 ; restore + pop r15 + + mov rax, [rbp-32] + mov rsi, [rbp-40] + + mov rsp, rbp + pop rbp + ret + ; takes [rsp+8/rbp+16]: ptr ; returns: ; [rsp+8 /rbp+16]: 1st num