From 9165f49e62d8c5e740ffb9e7a79863af1a2ab578 Mon Sep 17 00:00:00 2001 From: Lauri Koskenniemi Date: Sat, 24 May 2025 11:05:24 +0300 Subject: [PATCH] Create learn asm repo Repository for learning assembly language --- info | 4 ++++ lesson1/l1 | Bin 0 -> 8636 bytes lesson1/l1.asm | 16 ++++++++++++++++ lesson1/l1.o | Bin 0 -> 608 bytes lesson2/l2 | Bin 0 -> 8628 bytes lesson2/l2.asm | 17 +++++++++++++++++ lesson2/l2.o | Bin 0 -> 624 bytes lesson3/l3 | Bin 0 -> 8684 bytes lesson3/l3.asm | 28 ++++++++++++++++++++++++++++ lesson3/l3.o | Bin 0 -> 672 bytes lesson3/l3i | Bin 0 -> 8684 bytes lesson3/l3i.asm | 26 ++++++++++++++++++++++++++ lesson3/l3i.o | Bin 0 -> 672 bytes lesson4/l4 | Bin 0 -> 8700 bytes lesson4/l4.asm | 34 ++++++++++++++++++++++++++++++++++ lesson4/l4.o | Bin 0 -> 704 bytes lesson5/l5 | Bin 0 -> 8772 bytes lesson5/l5.asm | 18 ++++++++++++++++++ lesson5/l5.o | Bin 0 -> 800 bytes lib/fl.asm | 45 +++++++++++++++++++++++++++++++++++++++++++++ 20 files changed, 188 insertions(+) create mode 100644 info create mode 100755 lesson1/l1 create mode 100644 lesson1/l1.asm create mode 100644 lesson1/l1.o create mode 100755 lesson2/l2 create mode 100644 lesson2/l2.asm create mode 100644 lesson2/l2.o create mode 100755 lesson3/l3 create mode 100644 lesson3/l3.asm create mode 100644 lesson3/l3.o create mode 100755 lesson3/l3i create mode 100644 lesson3/l3i.asm create mode 100644 lesson3/l3i.o create mode 100755 lesson4/l4 create mode 100644 lesson4/l4.asm create mode 100644 lesson4/l4.o create mode 100755 lesson5/l5 create mode 100644 lesson5/l5.asm create mode 100644 lesson5/l5.o create mode 100644 lib/fl.asm diff --git a/info b/info new file mode 100644 index 0000000..900bb73 --- /dev/null +++ b/info @@ -0,0 +1,4 @@ + +https://asmtutor.com/ + +https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#x86-32-bit diff --git a/lesson1/l1 b/lesson1/l1 new file mode 100755 index 0000000000000000000000000000000000000000..6e7e04cae5b610701bcde36c4873c7dc1250a9d5 GIT binary patch literal 8636 zcmeI2Jx;?w5QQhsj|_syGzf`;jf4aRiiDIafGE;aT8*iX-_~2K`=VRE-_MGv zO^Xvt(@{~Rh0o^R(#bgU8N%7vtY2JCeKtb$^D>^+nV(#E>xWu&{+(^2jNcXJ4fyVu zIpBOkZS@F34;!p&Qs6tga!!FuT9|i0WKG14$`WUGj+{E5Wn|B#YK;(V;mo$HoPm94 SWE%c6tjzA5*-n)+)OGJdMK#s{ literal 0 HcmV?d00001 diff --git a/lesson1/l1.asm b/lesson1/l1.asm new file mode 100644 index 0000000..765f5ee --- /dev/null +++ b/lesson1/l1.asm @@ -0,0 +1,16 @@ +; Lesson 1 +; nasm -f elf l1.asm +; ld -m elf_i386 l1.o -o l1 + +SECTION .data +msg db 'Hello, World!', 0Ah + +SECTION .text +global _start + +_start: +mov edx, 13 +mov ecx, msg +mov ebx, 1 +mov eax, 4 +int 80h diff --git a/lesson1/l1.o b/lesson1/l1.o new file mode 100644 index 0000000000000000000000000000000000000000..f4e806c026a0fd147f85288371c63eac3ab69b47 GIT binary patch literal 608 zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJYf%4=4keMJ1)13h1@F5w*0%fy9)v-bO z1weITNa_TjY+fJ@GYcd%0jSOpDhHxKc7cF65Ho>U5aI$*A_2%`g<_DsAT#BG7}-1n zpeA9U7!1J7QwIug!UTbI08kwVkOr9pvIj(i_%Ps+nv;{SqY$27l#`;!#lWx&YKm}tP5&;nq0TB=Z5fA|p5CIVo0TB=Z5%|vp&PzYs z{NV?}3_z@>cze$n^S(YP!8Seb_e}%4@!vAvi~Ru-?0n1jEYH65adn)R)eN)h0!1;d zs-p7c+@qLIN?)40o&b4uJM-n(yq`DzvW@(7;gN^6w)5|_Ys>gwVa|ZxZnFlQOK8=O z9t^F(bzL_2%`VO^FgJxc2lHH$un?6w;KpM1`7Ay6+=#ikpoIetVob+om~ LfWsKmwd+0r59Kva literal 0 HcmV?d00001 diff --git a/lesson2/l2.asm b/lesson2/l2.asm new file mode 100644 index 0000000..ee1b394 --- /dev/null +++ b/lesson2/l2.asm @@ -0,0 +1,17 @@ + +SECTION .data +msg db 'cat!', 0Ah + +SECTION .text +global _start + +_start: +mov edx, 5 +mov ecx, msg +mov ebx, 1 +mov eax, 4 +int 80h + +mov ebx, 0 +mov eax, 1 +int 80h diff --git a/lesson2/l2.o b/lesson2/l2.o new file mode 100644 index 0000000000000000000000000000000000000000..3363aea9800636a8a8dc35429000d92f5108aac1 GIT binary patch literal 624 zcmbVJJ8l9o5FG;vA0-kJ1!V*cR4WnX05qiH4y^eo6s&~SE=U!Ql4Fo?2JXNWI01Q& z^#~(TWhC!=GxO$+?EM;z-;FV%VWceAOk@}uZx`%K75)DNJ$ZCGMe-0CRRXUD-DAkt z&~+nSGw^4ida?8k-5~S`+{I|)lrF6J9MMQYxtoW3>G^^a`wcPFLQO;cdMMPj2uz`? z0qMg%MCKYZ>pKlifWKV&!@{1HJL(VHJqtS)4qMVFlDYL(62I7ZN!-%;+}kPGXI5ay z^Tn#rM5Fhp-h;i0oX)Z4_RsS@N;h}mt3E{oP2PC*npl@f=00TNyv=0oFVW4-=$*yb;jt>3|44XTP z6aT@<&A~*^d)pdf92{Is-Zwd%Pj2b6m7bfE&S{}gkX()w#b&o|rLDzxFYUC&)6SNZ zrIhwjPTUIYPD7ZBT0_#ldeJjryBfkuYF~X%;|J}lRW*c_)zGI%fCNZ@1W14cNPq-L zfCNZ@1W14c{+7TL58&f@a#%CPqnEes`S|G(r78XdnBa+imP~QU2@10WAw>ctKmsH{ z0wh2JBtQZrKmsH{0wnOi2y{a4I0{U&_QTJ%djMJ8mDi67V!X4ra-^<)3Geu=3bLwx zc_H6GJ*$cP{I0u!hk_C#9o^}qyO^=6d%D36SuA}u?s*ZQs2bPz1;egf`CcNDPCkSkwV zXlem-MKo|9Ub@$S6tepf>M`S>kg4t|CXLa@js!f;#7=}gOFeY&i5%D{{lGcUirV7b MvnR5NMy7o36Wp&yh5!Hn literal 0 HcmV?d00001 diff --git a/lesson3/l3.asm b/lesson3/l3.asm new file mode 100644 index 0000000..982fb18 --- /dev/null +++ b/lesson3/l3.asm @@ -0,0 +1,28 @@ + +SECTION .data +msg db 'Le Chat!', 0Ah + +SECTION .text +global _start + +_start: +mov ebx, msg +mov eax, ebx + +nextchar: +cmp byte [eax], 0 +jz finished +inc eax +jmp nextchar + +finished: +sub eax, ebx +mov edx, eax +mov ecx, msg +mov ebx, 1 +mov eax, 4 +int 80h + +mov ebx, 0 +mov eax, 1 +int 80h diff --git a/lesson3/l3.o b/lesson3/l3.o new file mode 100644 index 0000000000000000000000000000000000000000..ebfd09e7a4bb8fd7d2e928883010a805458f4198 GIT binary patch literal 672 zcmbVJJxc>Y5S_h5qd`$nuo2Wk)aFpMundS+`446_rx(Ztx!po5uTAGq@MlEQ*{4rw zZ)Inv@7?X{rm=8fZob}|xtV=DZ(k^-#EX)e{6-=zS2!u{zBEw(kFY1zvpWbDgGP1d zHym!>#dp9R2Dnw{FT?s?Og#g4ejT_UnMOi<}qV zZx4y^zn_33pM5xob^+?8oot__+U_)6VoW=n7N<>HYrTISOoy*8OpQ5UME0a8F(W1> zg~VNLwZt~Lw-TGw*xc$Xcn?`+U7RQV3Io<(;`bn?E+1bZcJ}3Yk7#BWUUdxw-mQ{I zHsP%J5cs7ZpLfAU`p2<0nPlcxE{)Z>l>t_{PIWFfy+O~UNjIRB@1{UoN0Rm%5kEHv literal 0 HcmV?d00001 diff --git a/lesson3/l3i b/lesson3/l3i new file mode 100755 index 0000000000000000000000000000000000000000..d7158562b65c1bd701e7e15c6f77b9bdd42f6d3f GIT binary patch literal 8684 zcmeI2ze>YU6vj`|RNGRqE-ntHAZQUfXhCpPbm}{V)J9XV9hy7nWL7r^M+YCH(l;n{ z@-dv;90WbzO(I1c99)F&!0Gv$)8w~Z?zuVXo;r>rg}71@8{K)8jwavztkMx*D?73z z<*bf$>Q$ik>Owu_8j{u3iq3$x)Pj&=W?VY{Nxw4{m8F&0v99dVpx)5(6 zpT`Z|3fR=JiaURmhPbl(E#A|(zEGFT{XsiShB8bpWE5SQvp5{f`Cv3i;;1h{&`Xja zG2z%q5cNY7su}e~+R63Mggv!poY}bWj82iZ?ZsRCPByd+EbM*)zDIWyS__XBD+|rM zuY?-D!_W2_5JK#Jgj&pUk;tX)D<<_($BqOnW`eh!r55twiyT-l`@tN@n(AWTvoErZ ILM}z$C(^w|82|tP literal 0 HcmV?d00001 diff --git a/lesson3/l3i.asm b/lesson3/l3i.asm new file mode 100644 index 0000000..1359b64 --- /dev/null +++ b/lesson3/l3i.asm @@ -0,0 +1,26 @@ + +SECTION .data +msg db 'Le Chat!', 0Ah + +SECTION .text +global _start + +_start: +mov ecx, msg +mov edx, ecx + +nextchar: +cmp byte [edx], 0 +jz finished +inc edx +jmp nextchar + +finished: +sub edx, ecx +mov ebx, 1 +mov eax, 4 +int 80h + +mov ebx, 0 +mov eax, 1 +int 80h diff --git a/lesson3/l3i.o b/lesson3/l3i.o new file mode 100644 index 0000000000000000000000000000000000000000..515b0b154bbd23c3bcef8bbc5cac827eeed3190c GIT binary patch literal 672 zcmbVJJ5B>J5FKv(y#`AkKV~?LMdY4Km2~g6IUr*%JCywX(Kw8NE2kc1+)qOatQKP1} zTb{S<{d@4b5wGLzHR#Zbp;zz@eU6H=h)qZ`x7_iLL=AHZ!daZlp4*VPUmrz#hy{dx z`v}DMegSU4crfESuF6CdUlSYMMkk z&{j)ovj;1w$&Ib7zJ~Q!I_>=`8#<1w`tuC$AfYLr-!XCV=edt$;jP^21`4=0heWnu wtOpl-{!2iI8yOxIsWzpQ=1#7R)s>YI-g1-cN^Xl$Ve)Jc3ZQvE#YKAj0MKzYF#rGn literal 0 HcmV?d00001 diff --git a/lesson4/l4 b/lesson4/l4 new file mode 100755 index 0000000000000000000000000000000000000000..db489fcc23a393607cd980602bac0dabf25115e3 GIT binary patch literal 8700 zcmeI2y-UMj5XLWU+D7S6aa184MD0*eiiqH#pp%=ULr6cgg|Nt4 zKnW-TC7=Y9fD%vwe@oz=7x0%Q483DC;oX1Ci~Ka4@JVAHOv9tg$8cLre(&{t?dkY| z6_pZD0!ly$C;=s)1eAahPy$Lo2`B+2@Lve*x-H*SXMcQMUi(wo^7i2{;rseXIVr=h z@cn)yOXlHgnS2rXMkcSZFUc#|5LiZ9O6FB0C+pwxE#yw7F8xN`4+b&_P9-p-erG7d z&Y5X-{gIsXhP|NMX^ZDIgTM=nKQiKV+P?AOhHa60a6T}86W)ws-%TTfDN>Jm@yK6k z0bS%1?JMv%VP}E+4XM%$#f|qIm{QTc1U!3kJV@lYXh+OCpFz)=Gq7kD bJay}e>_k!g!8z0%EZg_&;=f`cQQG$joW4sC literal 0 HcmV?d00001 diff --git a/lesson4/l4.asm b/lesson4/l4.asm new file mode 100644 index 0000000..7afedfd --- /dev/null +++ b/lesson4/l4.asm @@ -0,0 +1,34 @@ + +SECTION .data +msg db 'A cat!', 0Ah + +SECTION .text +global _start + +_start: +mov edx, msg +call strlen + +mov ecx, msg +mov ebx, 1 +mov eax, 4 +int 80h + +mov ebx, 0 +mov eax, 1 +int 80h + +strlen: +push ebx +mov ebx, edx + +nextchar: +cmp byte [edx], 0 +jz finished +inc edx +jmp nextchar + +finished: +sub edx, ebx +pop ebx +ret diff --git a/lesson4/l4.o b/lesson4/l4.o new file mode 100644 index 0000000000000000000000000000000000000000..69b865bae65e1f9c962d385d537f61c5a488d435 GIT binary patch literal 704 zcmbVKJxjw-6uoJy^%DdKK@b%OKahY@9Gq0p$<5J0pKUaSBuL&HbTVrec~8^9#S8bHbHC2ZyX5Zh_{j4-app-?ej|}RTWI9CCUw;RW7MR(>2n12 zl2FZZ=GZrC<7)&vmJ?0cvNZxVXmjvN&Wht5g?rEu_!yk`Qgabr*2^%o ziJUX1w~EBLO9H#-<2-eE50Sdg_LrKrk82s0*;$xIi1HK~(g(xj)doi{+Ype3jdV{{-%* zGW0fXc@_iQNnsV42ib5T`d7fWOYzhX=iacfsNpLeORTTtOdFLN!IPpOkpwSnhANfI ScGA{i(8?$Iy&lFUEq(($I6Djg literal 0 HcmV?d00001 diff --git a/lesson5/l5 b/lesson5/l5 new file mode 100755 index 0000000000000000000000000000000000000000..7e2f3719bbf7eedb7ebce5817867c8e995992dca GIT binary patch literal 8772 zcmeI2KTjJ$5XHxTKsG2~8k!WGn?QuH0D*+45|N-3L`pD40)=&8gDv4B@oprjaO*Aw zA0QvYk}Gf-AyG!DQd&wyM`zyK^Pv+o6ciLQ((KIJ8LjVr-Ja+4{lNt4;AsgITixc0*wmZa2KlOV3e!q3` zrFGunmw+~}^_R_^uiM=Yf4j}i%VxLDt9$P^dfQoM=g4}0v9L)^2`B+2pahhF5>Nt4 zKnW-TC7=Y9fD(8{1lD|OJU=LpygNEDBM%>pm;K1na^25R@PB=033-8-is?z{(U_is z9*^l)&~q_83+?6r7$qt5Sot}@N$6E1oJF9{VX|Nuacoe}q5k%s{=mLiT@IHEzNw2j ztOOENj_qF6Z^(WvsF`Y|EaqFI7FhZIqh_UU4i>m9N~yGKOvzZkVWm_l`_@MY$|41G zQn&stqHTn+8f6w|OTqQx5guhP(M7&)?t$-!*$2)^L>7%g>%eCk( zObrob70#)?Q5CnauQJqUDm;l^b5ZII`wFT?j%Ja}q8bs3jfufC!V%O7RGLeibEqjk z?AyVd7R|SaiE*7oZ{i_3Pdqe-{1~d1T`t8ucWe2*+Z&O`yL5u~Cdf?b^LzQd8XO;0 z4#RLT7<67vI=wDU@rk0}uAZI+U1ISm*>49v1>r09`t$)|4^jAmhVqG6H7+?=(teO& ziMo)U$lM%-@T81=b<$nMg+FSbo literal 0 HcmV?d00001 diff --git a/lib/fl.asm b/lib/fl.asm new file mode 100644 index 0000000..03bcf45 --- /dev/null +++ b/lib/fl.asm @@ -0,0 +1,45 @@ + +slen: +push ebx +mov ebx, eax + +nextchar: +cmp byte [eax], 0 +jz finished +inc eax +jmp nextchar + +finished: +sub eax, ebx +pop ebx +ret + + + +sprint: +push edx +push ecx +push ebx +push eax +call slen + +mov edx, eax +pop eax + +mov ecx, eax +mov ebx, 1 +mov eax, 4 +int 80h + +pop ebx +pop ecx +pop edx +ret + + + +quit: +mov ebx, 0 +mov eax, 1 +int 80h +ret