From 1c0fcde351b1518eca3c24aca924a2ecbfff96eb Mon Sep 17 00:00:00 2001 From: Lauri Koskenniemi Date: Tue, 24 Jun 2025 00:26:00 +0300 Subject: [PATCH] Updated lib label scopes and continued to lesson 18 --- lesson16/l16 | Bin 0 -> 5120 bytes lesson16/l16.asm | 26 ++++++++++++++++++++ lesson16/l16.o | Bin 0 -> 1072 bytes lesson17/l17 | Bin 0 -> 9292 bytes lesson17/l17.asm | 44 ++++++++++++++++++++++++++++++++++ lesson17/l17.o | Bin 0 -> 1600 bytes lesson18/l18 | Bin 0 -> 9216 bytes lesson18/l18.asm | 60 ++++++++++++++++++++++++++++++++++++++++++++++ lesson18/l18.o | Bin 0 -> 1488 bytes lib/fl.asm | 61 ++++++++++++++++++++++++++++++++++++++++------- 10 files changed, 182 insertions(+), 9 deletions(-) create mode 100755 lesson16/l16 create mode 100644 lesson16/l16.asm create mode 100644 lesson16/l16.o create mode 100755 lesson17/l17 create mode 100644 lesson17/l17.asm create mode 100644 lesson17/l17.o create mode 100755 lesson18/l18 create mode 100644 lesson18/l18.asm create mode 100644 lesson18/l18.o diff --git a/lesson16/l16 b/lesson16/l16 new file mode 100755 index 0000000000000000000000000000000000000000..22225d6bcdea2b4b3f700884e34e2a2e0662338a GIT binary patch literal 5120 zcmeI0Pe>F|9LIm7Ygs{A2_EWDx4dk-AZA@kC`mF{6=YR#cWkE|SZ8$RZ6!nw>_JvK zL`2s*bn6yDTSAZnL4njQA%gx~ruL$B$dKB;znO-f(xFqQ_u$R%_xb&KGyC0l`pur| z>(Mlg;?+Qn#Ps@lqPYXMYj2e4paaxEhp34XVLps{iDtqU0Nx1>wosIZC7i+g2VCAw z*qm2ODWDWk3Md7X0!jg;fKosypcGIFCr@6Kj!WyVdc;AVrrngMy1ca zm3Ki3@hlokU(k{DgXi^nJyYev46=JToAn1PzSl*f@kDK{eR`2HrQ zqT#x>mF_%TOm`-Acan5ro8colSt<&1syNeU+fz~GylI*4gi(mdF|BW8t}!%Z|k1?}~5;f|P4Zwrc9RZEznd=;uy4`RUV z*=EVV=NPT{BSSlXS^RvPOQA!6@ZIwlG6{}t7!*1QeMaJQ&}SvS2z^1~Ip}$buRt$I ztU=$ESchJc_!jhiiEZeI5_9iUiSI$bk@ykxXNey}uSom=`u&Kb{Ew)qmSyOPspGZ8 zRIF^(sVof5zr^azn$Q}xR@yKcLFT%qYgSdQ1Z1j~Fie%ShNZIe{UaOW(+8AU7y+MF&p{WVFY>Bcde0R#cLAr4Xw}G;V{sFty(MkXS literal 0 HcmV?d00001 diff --git a/lesson17/l17 b/lesson17/l17 new file mode 100755 index 0000000000000000000000000000000000000000..dd186602d906af810ceac6279575f3081a113f53 GIT binary patch literal 9292 zcmeI2Pe>F|9LL|fYF1DtLWL2N9?HwKYm()qgpw>F{}KKvm)&;Kf!*14W;Qbf7d*&% z>L1~)j&i2R0j;BYJzKu%s6DY?bS&WePm|STQT&etw!REMb^805l8fu#~xeScV!j zYfzA8k?2=kP1izqyka_sldNgpuM&2 zOy*^liaw?#_-=gHmh@6!xIDddcw}pOKH!_3+yuwMT*LgQ(I3p-;Nth*?yjC(3(|RB z!xPGW#v^}@P6gUV7g_3aQ|5yczQ!c4lSt2^hsUsK{W2qh-rXIToJN$0Y3ui(6a zXP#v%Xnz-b?sYEHj{6@7{tTTKAlvC)^jgdrJ|gfb z@Ckv>fqMluzyksgg2x0N29FCo4!$Pv1o)=Fx4;htz5|{X_#T+|Hjrfn>^@eygWw2$ zgbm#(c>EL_>bG#&$ELBF6Zj)|LEtZ7|J8i_EVxSG%@EwHSBh?oVsOXG^GfmjvUR+3 z9kZBbSqURpw?7uFQ^QuAh3$mS7d4)W*?KZI)SO5p-4pM{yJTvXoiH_~Cr#b3SBx6f zFXB_;Ij%$HZsDN0ky$a#;EQT#m+bTXVbi762Uu=R*C1garQ0lS^#y6Eq2&O}f32qt zZ7r$!LaU#2$6!JT0_B53p@?OLEIVx4ETl!lb{NKp;?uN-;&wO!Yn!g^_jWdZI8%8n z-pSvN3IyU6xcx8mp3wtC{W9M0T4MI#fR6p-p!cb`eKUkKc>fJ7#n4TbH#!u?p5u`G lJ21&o&5fA67A%eOO2&3m^2+eG+rVO64SIt1dO@&W+%HARTU-DD literal 0 HcmV?d00001 diff --git a/lesson17/l17.asm b/lesson17/l17.asm new file mode 100644 index 0000000..8ed90e7 --- /dev/null +++ b/lesson17/l17.asm @@ -0,0 +1,44 @@ + +; %include '../lib/fl.asm' ; local +%include 'lib/fl.asm' ; build.sh + +SECTION .data +msg1 db 'Jumping to finished label.', 0h +msg2 db 'Inside subroutine number: ', 0h +msg3 db 'Inside subroutine "finished".', 0h + +SECTION .text +global _start + +_start: +subroutineOne: +mov eax, msg1 +call sprintLF +jmp .finished + +.finished: +mov eax, msg2 +call sprint +mov eax, 1 +call iprintLF + +subroutineTwo: +mov eax, msg1 +call sprintLF +jmp .finished + +.finished: +mov eax, msg2 +call sprint +mov eax, 2 +call iprintLF + +mov eax, msg1 +call sprintLF +jmp finished + +finished: +mov eax, msg3 +call sprintLF +call quit + diff --git a/lesson17/l17.o b/lesson17/l17.o new file mode 100644 index 0000000000000000000000000000000000000000..43b758206fdd6e5f969e9823a4c941e9ed06843e GIT binary patch literal 1600 zcmbVMOK1~O6n&Fct3tJisHkA5f_5_|RjhVn3tFreOg~6JSe=-$9Y|)S(v-0DIQ6^vFy8xRzVhzkoMh;=cTjUTX;g7w__C6FGWQMHe2{Jix(e}TM4D)g<+_qFgrFE<1d z_cd}s$qwL%5N|==eTeH2+l4{vQqR2@V!!VYwg*k11@HjyMvTDf@IzxD)Q8p~zX2n# zGj=Ac=|fR&M6YPNW(}*UXj)0CX_>X_mX=bZmYp;Wn`^on)$L4DHJhVrNcBN=y&SZ5 zeRpTq`TVN_;U_f3KThx2oLh;FZ_BM5pV*Qs#iWJVO%RqATT5Ri|1e(T(O-l8eFMb= z%H6uwr&Rsi&HOt#7wei_X7;!C{AY*0t`~*&PgL|4o!6_YtBC?7CZKL5wYS)vFXoOh zUe!`sZde#7c6D|q90!T{x!(NCS=zh;?aX{`ps&B^e5z>i77Q(Bp|b*|&gY8m2RZMd zlvrUmV$NM)S9PuvqGacxpyw${C*bsl`b|$iO3^7`X9g2h3MQu%t}vOa*Eo}{VT+qw zNdk>!JnwT8C+6k|rE9_9o{(0}epIYh`LgJ~MHua0*&>YYYjDTuMm2z!Pdvh!z?;K@ z2s;UULf~hCPYe74@SwnT;1Pk30#6Bi9C%vbgl`CZ2Kbi1Zv#IP_#NOk0>2kx0uph<`Et?+eFpR7h2_ButOx5CssWL5VYC89woYJo18M`%}AiJ^< z=xAeBTGic2)^X7;4=bj}!UZg^r{_>GVr!gbtf4qfjWiu*7cH)soR$AD&gp6;lgs_W lf0dq5Lr4NECxzMJhOz}f3ETA5_shPo#-37qr|g& zxhHv^^gefuFDEvy&a8yT*JoDtpI?(%3{k-i9)9WT>FzB=FkFsn ze!!!rW#zZ*Ot>?fEebgTRm1kMi2t zuL#g`!B-T%4!*1KP4F{?Z-M2V1ol)$chK`002A{)^zW4V8Ss0B=fPDM{rUiX1aDWE zFGlQDcq5qaS)dHp9s;x;Tw7YN9_s~v;~n5SB~MAiwo_JP)9z$rQz&i^QCy@<*@cFj zq%en*qiw0wuopRHTBbc{Bs@wRwn(K7GKbTqB}y)oFwd9?LyqwhA(>VJZ7pOc4NG<* z%Qznb9xQ~MjTVnDc)%PywP}6yED{pq?O0ez@Ra3TJFZ5c`qn;=kLK* zytEoiS;Dj&gJQ9M+m6{Ho)#1{5^)iSvl7^t_UMp^_rr^{=Lh{Kffu5XtmU8LuWS>l z@N;-~R`@r>y%oOW;+ubsWeWlv=7T4>w}ReX7e+RDX9k{Y$~aK6x**YQ1UbI}jXlp< fgC^&KXM2bRcJbhn`HySCYMr~4Xop_}@7H|?_3=Xw literal 0 HcmV?d00001 diff --git a/lesson18/l18.asm b/lesson18/l18.asm new file mode 100644 index 0000000..cd189f7 --- /dev/null +++ b/lesson18/l18.asm @@ -0,0 +1,60 @@ + +; %include '../lib/fl.asm' ; local +%include 'lib/fl.asm' ; build.sh + +SECTION .data +fizz db 'Fizz', 0h +buzz db 'Buzz', 0h + +SECTION .text +global _start + +_start: +mov esi, 0 +mov edi, 0 +mov ecx, 0 + +nextNumber: +inc ecx + +.checkFizz: +mov edx, 0 +mov eax, ecx +mov ebx, 3 +div ebx +mov edi, edx +cmp edi, 0 +jne .checkBuzz +mov eax, fizz +call sprint + +.checkBuzz: +mov edx, 0 +mov eax, ecx +mov ebx, 5 +div ebx +mov esi, edx +cmp esi, 0 +jne .checkInt +mov eax, buzz +call sprint + +.checkInt: +cmp edi, 0 +je .continue +cmp esi, 0 +je .continue +mov eax, ecx +call iprint + +.continue: +mov eax, 0Ah +push eax +mov eax, esp +call sprint +pop eax +cmp ecx, 100 +jne nextNumber + +call quit + diff --git a/lesson18/l18.o b/lesson18/l18.o new file mode 100644 index 0000000000000000000000000000000000000000..7c23e2ef66b0225c5bad2ce75dd80771a2f27ec5 GIT binary patch literal 1488 zcmbVMPe>F|7=N=`o6;YNAR?htl$U82qO40AB}pQy3$ZF$qdT%gyR+-en@SN}*h7q` z=n!2Zk6pS%(AI*P3!#B@OCgFVs3A|~K}B-=ee-Ac*`Y%py!ZWn-|zdrH}l?`nY`H5 zAxRPoOk#Dc#u#h!g_Ev7&ce|D$EYWbp!zyUqtK|{$6-Hjr_Xc9>!w2AntZEa%O+z>wG=UbtW55jsgAwSDDFVT19o zM^^{?`v%G}l)H89FR6OQ&D<)?MS2VC%=*!3e|92>Cs1hpLPetNEL19$SdkKAQ1_FX zD97z`zLoL1ww3jk<$-cYElSW?ky01) zCgzMnMmFD#7!TX?P6Gnf z$B)z6g^i^3(3t>4ft*yh!ep-A=1ewICO5b;1T>cMyw43a?d724UlyD*<0(ZPQUDBgDg_`ASA0q?ACYKX0Z z9~F2Q_>{n(Ltpaio9K&5tEQRNqpc^>(NR@JC)!j+faj}L|is7;90;bo~b0`?K zG|oooV;`cA{hG-YgEK1bwlYJiAwYRJr4HY4e+)I<3%Wmwzk{84b}^RKxu#pHw@JU@ LBy3YN_K^G^C&MVv literal 0 HcmV?d00001 diff --git a/lib/fl.asm b/lib/fl.asm index a25a640..9d606f1 100644 --- a/lib/fl.asm +++ b/lib/fl.asm @@ -1,3 +1,46 @@ + +;------------------------------------------ +; int atoi(Integer number) +; Ascii to integer function (atoi) +atoi: +push ebx +push ecx +push edx +push esi +mov esi, eax +mov eax, 0 +mov ecx, 0 + +.multiplyLoop: +xor ebx, ebx +mov bl, [esi+ecx] +cmp bl, 48 +jl .finished +cmp bl, 57 +jg .finished + +sub bl, 48 +add eax, ebx +mov ebx, 10 +mul ebx +inc ecx +jmp .multiplyLoop + +.finished: +cmp ecx, 0 +je .restore +mov ebx, 10 +div ebx + +.restore: +pop esi +pop edx +pop ecx +pop ebx +ret + + + ;------------------------------------------ ; void iprint(Integer number) ; Integer printing function (itoa) @@ -8,7 +51,7 @@ push edx push esi mov ecx, 0 -divideLoop: +.divideLoop: inc ecx mov edx, 0 mov esi, 10 @@ -16,15 +59,15 @@ idiv esi add edx, 48 push edx cmp eax, 0 -jnz divideLoop +jnz .divideLoop -printLoop: +.printLoop: dec ecx mov eax, esp call sprint pop eax cmp ecx, 0 -jnz printLoop +jnz .printLoop pop esi pop edx @@ -58,13 +101,13 @@ slen: push ebx mov ebx, eax -nextchar: +.nextchar: cmp byte [eax], 0 -jz finished +jz .finished inc eax -jmp nextchar +jmp .nextchar -finished: +.finished: sub eax, ebx pop ebx ret @@ -109,7 +152,7 @@ push eax mov eax, esp call sprint pop eax -pop eax +pop eax ret