From 3a7f7e1e13a20145738619e32cf4611ba12df94f Mon Sep 17 00:00:00 2001 From: klein panic Date: Mon, 14 Apr 2025 17:05:27 -0400 Subject: [PATCH] Moving and consolidating repos --- .../elementary/addition/add | Bin 0 -> 8968 bytes .../elementary/addition/add.asm | 34 +++ .../elementary/addition/add.o | Bin 0 -> 1088 bytes .../elementary/addition/add_adv | Bin 0 -> 9344 bytes .../elementary/addition/add_adv.o | Bin 0 -> 1872 bytes x86_64/Hello/assemble.txt | 2 + x86_64/Hello/hello34 | Bin 0 -> 8848 bytes x86_64/Hello/hello34.asm | 18 ++ x86_64/Hello/hello34.o | Bin 0 -> 832 bytes x86_64/Hello/hello64 | Bin 0 -> 8848 bytes x86_64/Hello/hello64.asm | 16 ++ x86_64/Hello/hello64.o | Bin 0 -> 848 bytes x86_64/Hello/hello64_exe | Bin 0 -> 8896 bytes x86_64/Hello/hello64_exe.o | Bin 0 -> 896 bytes .../Basic IO/basic_input_output.asm | 0 x86_64/Input Output Scripts/Basic IO/basic_io | Bin 0 -> 9193 bytes .../Basic IO/basic_io.asm | 39 ++++ .../Input Output Scripts/Basic IO/basic_io.o | Bin 0 -> 1297 bytes x86_64/Input Output Scripts/Calculator/add | Bin 0 -> 9776 bytes .../Calculator/addition.asm | 61 +++++ x86_64/Input Output Scripts/Calculator/adds.o | Bin 0 -> 2896 bytes .../Input Output Scripts/get_user_input/name | Bin 0 -> 9136 bytes .../get_user_input/name.asm | 49 ++++ .../get_user_input/name.o | Bin 0 -> 1328 bytes x86_64/Math-Operations/add/add | Bin 0 -> 9184 bytes x86_64/Math-Operations/add/add.asm | 221 ++++++++++++++++++ x86_64/stack/stack | Bin 0 -> 9304 bytes x86_64/stack/stack.o | Bin 0 -> 1504 bytes x86_64/stack/stask.asm | 168 +++++++++++++ .../subroutinetoprintspring.asm | 21 ++ x86_64/strings/reverse | Bin 0 -> 9944 bytes x86_64/strings/reverse.asm | 123 ++++++++++ x86_64/strings/reverse.o | Bin 0 -> 2928 bytes x86_64/sum/sum | Bin 0 -> 8976 bytes x86_64/sum/sum.asm | 47 ++++ x86_64/sum/sum.o | Bin 0 -> 992 bytes 36 files changed, 799 insertions(+) create mode 100755 x86_64/Basic Mathematic Computations/elementary/addition/add create mode 100644 x86_64/Basic Mathematic Computations/elementary/addition/add.asm create mode 100644 x86_64/Basic Mathematic Computations/elementary/addition/add.o create mode 100755 x86_64/Basic Mathematic Computations/elementary/addition/add_adv create mode 100644 x86_64/Basic Mathematic Computations/elementary/addition/add_adv.o create mode 100644 x86_64/Hello/assemble.txt create mode 100755 x86_64/Hello/hello34 create mode 100644 x86_64/Hello/hello34.asm create mode 100644 x86_64/Hello/hello34.o create mode 100755 x86_64/Hello/hello64 create mode 100644 x86_64/Hello/hello64.asm create mode 100644 x86_64/Hello/hello64.o create mode 100755 x86_64/Hello/hello64_exe create mode 100644 x86_64/Hello/hello64_exe.o create mode 100644 x86_64/Input Output Scripts/Basic IO/basic_input_output.asm create mode 100755 x86_64/Input Output Scripts/Basic IO/basic_io create mode 100644 x86_64/Input Output Scripts/Basic IO/basic_io.asm create mode 100644 x86_64/Input Output Scripts/Basic IO/basic_io.o create mode 100755 x86_64/Input Output Scripts/Calculator/add create mode 100644 x86_64/Input Output Scripts/Calculator/addition.asm create mode 100644 x86_64/Input Output Scripts/Calculator/adds.o create mode 100755 x86_64/Input Output Scripts/get_user_input/name create mode 100644 x86_64/Input Output Scripts/get_user_input/name.asm create mode 100644 x86_64/Input Output Scripts/get_user_input/name.o create mode 100755 x86_64/Math-Operations/add/add create mode 100644 x86_64/Math-Operations/add/add.asm create mode 100755 x86_64/stack/stack create mode 100644 x86_64/stack/stack.o create mode 100644 x86_64/stack/stask.asm create mode 100644 x86_64/strings/SubroutineToPrintStrings/subroutinetoprintspring.asm create mode 100755 x86_64/strings/reverse create mode 100644 x86_64/strings/reverse.asm create mode 100644 x86_64/strings/reverse.o create mode 100755 x86_64/sum/sum create mode 100644 x86_64/sum/sum.asm create mode 100644 x86_64/sum/sum.o diff --git a/x86_64/Basic Mathematic Computations/elementary/addition/add b/x86_64/Basic Mathematic Computations/elementary/addition/add new file mode 100755 index 0000000000000000000000000000000000000000..c4936ca9ebfbe87762b3a1810c6335b8bdb36f73 GIT binary patch literal 8968 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7(5igTrlClV8Ou5;K0Dnzy?;!0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJy;2$Ex9V1Uuc`q)5n3Lt`kfk6Rc4~*u93d4+r>4OT7 zQllX-8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Auu9CUydKU)+1H;({BvFw1T_E|h4Ld-T;q9{xBQg|6Jv|x% zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Ulkm1cFkFOLI!B6d1VhyA#yCXJPpG zA6*qESbzyJ4-e)uFz|wDCI(K}{5+V?z#s~ynHfMs2Vf?YkYiwA5CE+vfUN_7ic5mU znHjjz%uxl4GhvA9fW?^^1kltoB&MY3B^Kv0u0#HXetmLxL7r{<+FFz6Lm=9VNTG3XVS6hY_=7^@_;qJ%*YtX40nxEShGiYRH& z2n+)Q19)u%$Rt=eKo>H=*Fk{fzpcH6%1}Kg|BROCpnE#>cBw*_zz;X->44`2j z7#l>ZGcYiK#&=-)Ve!Ka)sLIGE4A()3CK=vVc3=Dz{3=G)xOM(K1fq?;(E|Aru>jwZEtVqcK literal 0 HcmV?d00001 diff --git a/x86_64/Basic Mathematic Computations/elementary/addition/add.asm b/x86_64/Basic Mathematic Computations/elementary/addition/add.asm new file mode 100644 index 0000000..209d181 --- /dev/null +++ b/x86_64/Basic Mathematic Computations/elementary/addition/add.asm @@ -0,0 +1,34 @@ +section .data + msg db 'Result: ', 0 ; declare string, followed by null terminator + newline db 0xA, 0 ; Newline character for format +section .bss + res resb 1 ; reserve 1 byte of memory for storing Result +section .text + global _start ; Define the entry point of the program +_start: + ; Initialize values + mov eax, 4 ; Move the value 4 into register eax + mov ebx, 3 ; move the value 3 into register ebx + ; Perform the addition + add eax, ebx ; add the values of eax n ebx register, store the result in eax + ; Convert the result to ASCII + mov ecx, res ; point ecx to the start of the result buffer + add eax, '0' ; convert the result in eax to ASCII + mov [ecx], al ; Store the ASCII character in the result buffer + mov byte [ecx+1], 0 ; Null terminate the string + ; print the string + mov eax, 4 ; Syscall number for sys_write + mov ebx, 1 ; File descripor for stdout + mov ecx, msg ; point to the msg string defined prior + mov edx, 8 ; Length of the message storing + int 0x80 ; Interrupt to invoke syscall, call the kernel + ; print the result + mov eax, 4 ; syscall for sys_write + mov ebx, 1 ; file desciptor, stdout + mov ecx, res ; pointer to the result in memory + mov edx, 1 ; length of the result + int 0x80 ; interupt to invoke the systemcall + ; exit, cleanly + mov eax, 1 ; syscall for sys_exit + xor ebx, ebx ; set ebx to 0 (return) + int 0x80 ; interupt to invoke the syscall diff --git a/x86_64/Basic Mathematic Computations/elementary/addition/add.o b/x86_64/Basic Mathematic Computations/elementary/addition/add.o new file mode 100644 index 0000000000000000000000000000000000000000..c93bd2503809b16421a903f36a6c32b93078b276 GIT binary patch literal 1088 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s91JW-qU13_c7ZT6nsx^!hyXW)f|KYr zvNJF+a4;}1pz9BS>Iaz(*UZ3x;bI;J2C#qGkQFg7Fu?Q&qKONj@rAJ14N|fJYQH&% zgM`uDBg4SJ09A^lihRgE9S>BO?Pu z4&(x`%r1~wXB*H(LGouCc7Q0u+h-dVg|jE)QS=Yz2c1GlA@Bt zBnG|W%3KHy$>xTO@I0^-y630Qb~BtpET3 literal 0 HcmV?d00001 diff --git a/x86_64/Basic Mathematic Computations/elementary/addition/add_adv b/x86_64/Basic Mathematic Computations/elementary/addition/add_adv new file mode 100755 index 0000000000000000000000000000000000000000..6a99c04dc2c87507ae185b2caf16441532422a37 GIT binary patch literal 9344 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7!D|bxnRP9!GeLA!GVFDfeoyd1uP09U^*c5 z3#c%RW)Oe~fb3ueF`;}0sC_Wn52S#BfdNJ%>th4yQveYR3=9eodtkIJRJZ_2!}P(p zqx5J9jE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6nN5ZD3gXYU6Q9{XT@=w0Fr z3=I6NJ3!&FA4GWUbAWcUcY(U={HzFp7a&z0orjUlk%TFhz%VBOCIvGGCh!8(VfSD> z?9q9{V_yPP)r(FB1_or4jiC~|I3Om2+zoX+Ob^tB$hvG`xzjvna)I?- z@@PKBe~gX6cA{J_2>MSr|V4N0%1@3otXl1{A6Iq2w*M)1A`ry!NdR?BLH(5 z7#Q5Z3`T~(uyqMwJ_Cavm}X>P7KE-l0P`6b62UYhgBF^29#mW#O}q>$ZiOa3fq{WR z0JN$C&E9UXI5UGSbSwj`oq>U2I#`?uLwp`soSC5jO+7uz@$;v$}ljfGcYiK2D4!LVfn%qs^0*n z5lW-$2jw#+s2noo0M)+%q=12e0kqbJ4{8@k9cX9{L~}BLavg|;ia&rn#=yX^7*!Y? WR>(qvIP_13t{2ilRtya*WFY_)D$f=G literal 0 HcmV?d00001 diff --git a/x86_64/Basic Mathematic Computations/elementary/addition/add_adv.o b/x86_64/Basic Mathematic Computations/elementary/addition/add_adv.o new file mode 100644 index 0000000000000000000000000000000000000000..ec82951160a9d10f13af8accb25e564fece659ae GIT binary patch literal 1872 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s91JW-qU13_c5yH;FfgNOcVL1D7(ggE ziEbks0|VH-xb)k?bwU{E`gx%GLFPbIK*$ED{eB<^LWIDi0GLD&LRj1mlDzd*~P4IuXkGB7ZJ!V08N0z@z{FsR_L{{SmQ!6XO;C!xl{ z`8o^?SYt5(WFZ3s!w0BJkZ~X{q1*48SCU$!P?C|Vkd|3gT%wRynwykbWTn7>kSI<~ z&d*Ch$ONSpm*$jMDKKy`Ffi-@IcPtK@Yn~nieZ;H0|Ns;>kbfqKZrn*0);<6D?;D} zNR>zDVXWqW0*P323K$p|JQxpqblyNRyc3rTLBYV!iq%qx3$aRpyvfhH!vx*k@0B$ZBQiU(fr%8T)?CGwShQCn&r; z3@>>!ALBp9#^CY)oQL6UkMAEF4jFWad9)rVeS4UJfk7{+xR^mNC9x!tL9ZmWqJ%-O zIHS0vs3b9oL9e(n7eYh%MX5Q75JjL+#*0BtXJPpGADbd(a1O+jVaA%WL3tgNl2Fxy z@)0B_ql$x)0!SPbs>m{+d;=0!Ko(?RU{D70F>{nQR9q5FBM4(KlZgRBgE?Tr4oosJ zfZ__wgc81BnwjA*m_`txU?wvIGbo_IYzUD7rkEMD(8Noj;@W89wNP;@G;ucu1_l9) zQj&pzAu%N-J~5>%F)ukaMK7^9mm#k-*APS)F%*F_8bd)*er`dDA(Vy*$LAKOGvuX~ z=Va!kGQ<~`Bo>u06qghkW#++Yy}ZJfjWMqH=CI&kOFi*e%ECeAL7z7l-TrlClV8Ou5;K0DfzzSB&0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJz350YbGV1Uuc`q)5n3Lt`kfk6Rc4~*u63d3laKB(|0 zH5vk=Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0wXd6c7QtXyFtD2ouDrCE?x!( zhO-SjKmvxh&o+$6Fd6mqXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD47U*Q zNX^N~*HH-1FUm<#IKl$Gh~1qZfv5LSey%CGsMRy6&J@Bmn0UIFvO>(B$gyH z#HZ$^Ffiy9SLT)^CNbz0mlQ$h3>d20WdgHM2?4176;NT2K9C(8 qP(CQWKuk^s1_qEgh>eVQK=o@Q3qt*hEF_3S|6{0rb!5d@^aB7FJ~)m5 literal 0 HcmV?d00001 diff --git a/x86_64/Hello/hello34.asm b/x86_64/Hello/hello34.asm new file mode 100644 index 0000000..0622710 --- /dev/null +++ b/x86_64/Hello/hello34.asm @@ -0,0 +1,18 @@ +section .data + hello db "Hello, World!", 10 ; The string to print, with a new line terminator + +section .text + global _start ; The entry point for the program + +_start: + ; Write the string to stdout + mov eax, 4 ; sys_write system call number + mov ebx, 1 ; File descriptor (stdout) + mov ecx, hello ; Pointer to the string + mov edx, 13 ; Length of the string + int 0x80 ; Call the kernel + + ; Exit the program + mov eax, 1 ; sys_exit system call number + xor ebx, ebx ; Exit code 0 + int 0x80 ; Call the kernel diff --git a/x86_64/Hello/hello34.o b/x86_64/Hello/hello34.o new file mode 100644 index 0000000000000000000000000000000000000000..65ac825fb4d287ba742a61b883d24cba1e0fd585 GIT binary patch literal 832 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s>j^LW(mmFhG?;1fXOA zRB!^6&&t5S0Kyzlz66v8xevqdAUUX@6o`$4(d}1fU|>KG6OeKRsD79|AT=N-q1*3~ znv;{SqY$27l#`;!#lWxwq;NOLmYpDDc7ej@Y{L$afZ^@44Gau=DTyVC40Ma13M0Fk=aMkb5C10#&^* m0|SEq7WE7npa3v7(Mv4Og|Hdoi%SxVN}$@gp)?nccm@FdyDWtO literal 0 HcmV?d00001 diff --git a/x86_64/Hello/hello64 b/x86_64/Hello/hello64 new file mode 100755 index 0000000000000000000000000000000000000000..c4be43b52c23cf5b4bd15d851e44374a3d5ecc56 GIT binary patch literal 8848 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7z7l-TrlClV8Ou5;K0DfzzSB&0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJ!k4w7SFV1Uuc`q)5n3Lt`kfk6Rc4~*u63d3laKB(|0 zH5vk=Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0wXd6c7QtK`$2@qK3E@m7pU{h z&$`2gfq`K^C{*~tJ#`Rk6px0$Xb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD z48aiaNX^N~*HH-1FUm<#mbT2aEF2UZJp2!)h10|Us{4B#~iAhTfphpuyg zuV(aeIPqH rpnOn#ftZ{O3=AM~5E~iqfa=#q7KHj0Sx69v{>M=L=>7-!6JfjWMqH=Mg}_u1P><4z~F#jLfH-s>j^LW(mmFhG?;1fXOC zRB!^6&&t5S0Kyzlz66w($6>z!G(e=F>R=SQ{UHCLhY3in0aQQC9*`Q4lhEz=NX^N~ z*HH-1FUm<#F=d#s!~`gQ wAt?k^y)XjlyRF*DIiEY5|n8RCme5{pWp+IgTf$bF#jgmU2&00sdnlK=n! literal 0 HcmV?d00001 diff --git a/x86_64/Hello/hello64_exe b/x86_64/Hello/hello64_exe new file mode 100755 index 0000000000000000000000000000000000000000..03f5b447f034b006e998535dd7aac7df22fab3fb GIT binary patch literal 8896 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7#tMATrlClV8Ou5;K0DfzzSB&0v3f4a2;TQ z7hsZs0Y)!-j!@VLvET_`yAO5Ni~VhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin zXb23!5b#LN$;sDI2+uFdNm1m&?E%mT0Sm*&|L7_l!2(Q(d3Z3Nfx(A?fk6PYIsi7W z4;6O@i!(9sLFenC!VJMU#G|0%0%+Pbw~sFD^+eDq)CEO-U?C zWQb4AOJQKpE3V8fNlaqUD=sO5&>1jRNoqw2gC1Bd%=P5c(hLlsP+|bDX#g1m3oq!p z2>AL3kQ_KHpbRJlT9yHd8)hgUHip9hT^|7&%7ICNXw0o5N57lAN9ZiTQQq#zFc;vkP9um6B32Zt4u38nx5L`g3I literal 0 HcmV?d00001 diff --git a/x86_64/Hello/hello64_exe.o b/x86_64/Hello/hello64_exe.o new file mode 100644 index 0000000000000000000000000000000000000000..8f48824d529596e84e783aee662575bce4d9a674 GIT binary patch literal 896 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s>j^LW(mmFhG?;1fXOC zRB!^6&&t5S0Kyzlz66w($6>z!G(h~I>R=SQ{UHCLhY3h+0#rZD9*`Q4lhEz=NX^N~ z*HH-1FUm<#F=d#s#DpVQ z8OSs+15UUzFfa&UQO}^Ck)NBYpPiGMnWvwepOP9LtnXNys~?h@n4IC88c>vJfjWMqH=CI&kOFi*e%ECeAL7&Mf?TrlClV8Ou5;K0Dnzy?;!0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJ#P29jf7V1Uuc`q)5n3Lt`kfk6Rc4~(7(69!oTV#CY_ zu}AS}2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J&=A-G>b&m;b(VL6y3o5M z85kJOHtb+#U|`q{3X+|Y3Jwgr8X%$wwII>64Ld;k3~!$WNrM!R;?WQo4S~@R7!85Z z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=CK^X!8IjM=osS2riC8`C>9ywubp2caG2CFN literal 0 HcmV?d00001 diff --git a/x86_64/Input Output Scripts/Basic IO/basic_io.asm b/x86_64/Input Output Scripts/Basic IO/basic_io.asm new file mode 100644 index 0000000..1ae865e --- /dev/null +++ b/x86_64/Input Output Scripts/Basic IO/basic_io.asm @@ -0,0 +1,39 @@ +sction .data + prompt db 'Please enter your name: ', 0 ; Null-terminated prompt message + promptLen equ $ - prompt ; Length of the prompt message + + buffer db 128 dup(0) ; Buffer for the input + bufferLen equ 128 ; Maximum buffer length + +section .bss + name resb 128 ; Reserve buffer for name + +section .text + global _start + +_start: + ; Print prompt + mov eax, 4 ; sys_write syscall + mov ebx, 1 ; File descriptor 1 - stdout + mov ecx, prompt ; Pointer to the message to print + mov edx, promptLen ; Message length + int 0x80 ; Call the kernel + + ; Read input + mov eax, 3 ; sys_read syscall + mov ebx, 0 ; File descriptor 0 - stdin + mov ecx, buffer ; Pointer to the input buffer + mov edx, bufferLen ; Maximum number of bytes to read + int 0x80 ; Call the kernel + + ; Print greeting + mov eax, 4 ; sys_write syscall + mov ebx, 1 ; File descriptor 1 - stdout + mov ecx, buffer ; Pointer to the buffer to print + ; Use the number of bytes read as the length to write + int 0x80 ; Call the kernel + + ; Exit program + mov eax, 1 ; sys_exit syscall + xor ebx, ebx ; Exit code 0 + int 0x80 ; Call the kernel diff --git a/x86_64/Input Output Scripts/Basic IO/basic_io.o b/x86_64/Input Output Scripts/Basic IO/basic_io.o new file mode 100644 index 0000000000000000000000000000000000000000..037f346b6d623034bd33f877f77e9ebd273ba3ae GIT binary patch literal 1297 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s91JW-qU13_c7ZT6nsx^!h`>w;1t-yM zWM^Pt;9y{2K-d2Os=ooQ6T(2(&%?j~_AeVm8cxFWyTL^u3;_rQCxx)s4U#l~I>;Qv zLBb%vB5@gH7#J9!PDK`GD1hqcfNB7_j|=KokU|L%!N9s7Gy}>R=SqI2e~f zhk*fWEFOUB_kgNoh1vrOYmgAk{(zj+#Nt$i)Vz|^B8AHQ(jtYt#N1RX1(2G-fOmlW zu^Z&;ognAzl4M|DINPuT6uP@X0uWJ9DmmMLruJ;Z4v;>>+h;-2AjKf8my%eL$e@>0 zT+E#Cnf)zuEq{QOPJfjWMqH=CI&kOFi*e%ECeAL7z&iZTrlClV8Ou5;K0Dmzy(&z0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJzJ1tiD7zyPC>^|68E6hH(61A_v@9vH0#625p-5=XKK zBz3j{NdP2&wqXaz6^6IZf(!szJ&H#|U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n zMnhmU1gI1Ou6ZS?MG9%fB?@_^xk;%-RtgLdq2jz0gpdvc0|OJ-Mh-BEK1&Y~M39ph z7#Ki92n-AyjBvHE8GZ%^hQySV%#zIfJiWx?Tn7D&{M=Oi?3~ohJpJVSl+^HGeaGTl z{gBke##(h?9AoLrPyP*SY#oS2hbnv+3A=NRm( zV5Dbgre|Qtz}Ub9vl#9yMnOhFMj=K4Hf9cK4pk0eRt5$pJqAHW2hf6oSg?~ps~i{^ zfAjG&FfxKyMKCfjFrqpaY#b-tbY?!r$jHb@LsY^bGCeCYGSUEy^_iF$z=nafVkbaj zA1n+X|D((DF@PMv1YhR>QU_8a0Tl-g#DMrPaU~Fk;p2bUItVbAfq?-OgA5EG|AWSC zU}7NJ3~UZF18ATI#D|$<3l#?q%^-`rK*d30ILP7w3=9kcpw%Equ?&*;28%N@sKM50 zfCL#B7{bBgOc>&EU~y)K6^hVx9Z>bCaR5oH`FW`f5LQWfK8Tf{mztBB2V#|!=R;Xg zMIaSLsl}x^B@FTLNyWwS#U+VFB@FSYDTyVC4DqRXDGUsH#g(}wiAfB4#U(`$Is?Wk zNv$Yh&;zU0ODZmA&`U{8Dou}1EK1BvPlaj$MnG$mk_F#QH#9)dtuYYlZjLIs2s2DN`0gbOFp^}FNH{|2gG z7OoS*K-V9NLq8`dU_m7tL>rt$*AL=DN>aEIFrxsf-vXq7fq{V&ia}uwQUJ>DAQ~hN m3wsbBhF3r`K0`8007^rRgYp;{1i{4|oC{}ggGxRk+z$Y!lG17b literal 0 HcmV?d00001 diff --git a/x86_64/Input Output Scripts/Calculator/addition.asm b/x86_64/Input Output Scripts/Calculator/addition.asm new file mode 100644 index 0000000..984cc24 --- /dev/null +++ b/x86_64/Input Output Scripts/Calculator/addition.asm @@ -0,0 +1,61 @@ +section .data + numberone db 'Enter fst number: ', 0 ; Null terminated string + numbertwo db 'Enter snd number: ', 0 ; Null terminated string + numonelen equ $ - numberone ; length of prompt 1 + numtwolen equ $ - numbertwo ; length of prompt 2 + +section .bss + numone resb 128 ; reserve for number 1 input + numtwo resb 128 ; reserve for number 2 input + result resb 128 ; reserve for result of addition +section .text + global _start +_start: + ; Number 1 prompt + mov eax, 4 ; sys_write syscall in 32 bit registry eax + mov ebx, 1 ; Stdout syscall in 32 bit registry ebx + mov ecx, numberone ; move null terminated string to 32 bit registry ecx + mov edx, numtwolen ; length of null terminated (value) moved to 32 bit registry edx + int 0x80 ; Interrupt kernel, reset + + ; Number 1 Read + mov eax, 3 ; Sys_read sysclal in 32 bit registry + mov ebx, 0 ; stdin file descriptor in 32 bit regstry + mov ecx, numone ; pointer for input + mov edx, 128 ; maxomim number of bytes to Read + int 0x80 ; Interrupt kernel, reset + + ; Number 2 prompt + mov eax, 4 + mov ebx, 1 + mov ecx, numbertwo + mov edx, numtwolen + int 0x80 + + ; Number 2 Read + mov eax, 3 + mov ebx, 0 + mov ecx, numtwo + mov edx, 128 + int 0x80 + + + ; Print result + mov eax, 4 ; Sys_write syscall for 32 bit register eax + mov ebx, 1 ; Stdout + mov ecx, numone + int 0x80 + + mov eax, 4 + mov ebx, 1 + mov ecx, numtwo + int 0x80 + + ; exit + mov eax, 1 ; sys_exit + xor ebx, ebx ; exit with code 0 + int 0x80 + + + + diff --git a/x86_64/Input Output Scripts/Calculator/adds.o b/x86_64/Input Output Scripts/Calculator/adds.o new file mode 100644 index 0000000000000000000000000000000000000000..716a01b0a786f44b1fa8b34a0c53797189019089 GIT binary patch literal 2896 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-sLJWLJqU13_c7ZT6n)U-M5CJs^1t+1x za6UT&0|N&G0|UDL4^V{-Aj9FR85p3#a1kB`2C#qG;35zPO#c)J7fuSmSrCR0R6m4= zASbXw*ai>^PNF%7L6HH|O(4Yw(Dd^|)q(s9l9vDx3=9mWIPCub)elt$r_k+pC7^#A zTqlHqu0Ig!E{H6GoB$2b3aAjs{jj(K3BlZ-gu{LTkYWY~23e3|B#dr<0S^5JQ2mKW zdO=Kd{WUn;zW}Nq=1!3Nxu9tcWDZQc7l-`^p!z{-kufa(U}CdK)Q|4|rC8EF$ZVMX zr$8JejIMt@0|NsSl01w#0qRg#{sECQdP+&1IFa*I2gwp8t@5d4T z1yKDrp!z^|gYr1K{jPZ>sYMED#U%=PrMXF|MOF$75TW9{6oe4e5C#T@9iReWH^>z` zL4v!485kJOHtYZyy&EI|5p95olAso>ukj$r2ndO0(b)z}0gx*UZ=VHO2GR${I`H^_ z`4lY7fL;zkL>U;M*^B`cT*z4-6ki}UAUi*KvEzf6r7lnl39|OpQo2t zoXen}k)NBYpPiGMnWvwepOP9LtnXNys~?h@n4IC88c>v8T{ z8reT0AVFvz0*S-INd_to3K!(8*a{U#HwP-rz$nNl$SA}pz{boW&7sO6%*w#Pq{kr0 z=m2$0EI9m>K{hh}=Hq2xWCT~9jG$TsCG5Zka>BjJ%*PlR85wDaN*F|@XGKOv8i27r z6B7g2FtAoA0joc7xtBpNC9x!tK`*Jem_e^3wW5SUFC{gpG(A4CC^0WRwU|M#C^aV$ zT@0e6pfo8jF&Cr;!q3c0%STZU5r9Z0CM6Z6mcdNV$;?YdQ3?@&C`~I$%uR)>%ui;} zE6yk`DJn@!V$dtD%!SZUKG=0&cSAjlgM#?~<9}?@%-|XvQ-&F9$p&gGfU-L_^~fm& zAl&Sf7sSFTS zNqIhqm7kZIlbQ!&m6Yd0Sx`kF6-BAVr8y-G@x>*HMI|tYLuqa(4a%4B%)!6_ZU=#+ zK;p=;V-6BzU;u|SNIfh(e38UK>S6wlL=%VkJ04ve%1?#TFneLpF literal 0 HcmV?d00001 diff --git a/x86_64/Input Output Scripts/get_user_input/name b/x86_64/Input Output Scripts/get_user_input/name new file mode 100755 index 0000000000000000000000000000000000000000..9a800284f4c26b177f8fb6e9cc97e633af82a904 GIT binary patch literal 9136 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7(OV1xnRP9!GeLA!GVFDfeoyd1uP09U^*c5 z3#c%RW)Oe~fb3ueF`;}0sC_Vc0!WU5fdNJ%>th4SDS!wD1_lL)Juq4tDhw56fa!w@ zk5Z!{Fd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRNL*Ruu0|UbgF%aPiA`%!F z7csB{5gz+s{qJ2Om~tX8ee9TW z=w^bf8^xm`Fd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0@MwG@QlO~h0J1w z%KXwIg}lVvRC@(3kJOx;d>z;XJ9hg(y?z#kkN?qSxxfNUhiMv3>OVGqa89++| z7#U#e4ZzA67#IS;;>--v&@l^`cnnya2}3*?EY8f}fTo@S6qb64#kmXxMfte}B@Fqc zB?YA=h76f`1*Ihn@#(20o)A_+QD$CA07OwdnBxys3gJPO#U~XP#}}6*7L_o>r=}#9 zBr?RO=A|$&=oMGymLw)I=oOa~LFfz^t0c9egh3CiRxhcz80Hmbvp+aCP0^~6U d28IkU4?#eUgA0K20XF>yp!#*-Dj^JX{QzN>Z+id$ literal 0 HcmV?d00001 diff --git a/x86_64/Input Output Scripts/get_user_input/name.asm b/x86_64/Input Output Scripts/get_user_input/name.asm new file mode 100644 index 0000000..49d4075 --- /dev/null +++ b/x86_64/Input Output Scripts/get_user_input/name.asm @@ -0,0 +1,49 @@ +section .data + prompt db "What is your name? ", 10 + output1 db "Hello, " + +section .bss + input resb 34 + +section .text + global _start + +_start: + call _getInput + call _printOutput1 + call _printInput + mov rax, 60 + mov rdi, 0 + syscall + +_getInput: + mov rax, 0 + mov rdi, 0 + mov rsi, input + mov rdx, 34 ; related to resb + syscall + ret + +_printPrompt: + mov rax, 1 + mov rdi, 1 + mov rsi, prompt + mov rdx, 20 ; change for size of bytes reserved + syscall + ret + +_printOutput1: + mov rax, 1 + mov rdi, 1 + mov rsi, output1 + mov rdx, 7 ; change for size of db + syscall + ret + +_printInput: + mov rax, 1 + mov rdi, 1 + mov rsi, input + mov rdx, 34 ; change for resb + syscall + ret diff --git a/x86_64/Input Output Scripts/get_user_input/name.o b/x86_64/Input Output Scripts/get_user_input/name.o new file mode 100644 index 0000000000000000000000000000000000000000..1b6e0de54de26a76b7dc95d90c1d1f32ec10aea1 GIT binary patch literal 1328 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s91JW-qU13_c7ZT6nsx^!h=4SNf|KYr zvNJF+a4;}1pzBY7>Q{p6gfP(c^Dr=g{mTZChLbS;6W}5ch5&?ulR{YR21$N^+HVfx zAYqVSk+=*p3=9lVrO3hz22c-KKsA8e2XZUOuONjIAcBE`K?R5X1yGNML)F13sBthZ zgAM}&)>ym%)t>-W$qKax-Tv^5#1e(fVui~5(jtYt#N1SS1ul=&oSb|e1+dN+pa6Iw z#=yYv!V^S*%-dnZz`(E{B+bvd14Mz@9{WH{5Z(ofG=A2@J3x-z4L$taLIuZ z11>qJnGAXpe{71F!6^(=h8b(jgVHiI@{zP~f!QEizzjGc2xc)dfPw|ggc6cq8Z%|7fyJ2_ zAh84HfC&RI$;<$X8ZZ+|*n(+hh6pf?AiTj$W`+_ljUeP17#IXFaw9^X0hC7c5{q*g z3X1Y`3rZOBOG^q$OAHw@^9o8!7~+dd5{pV0;?q-0JRt%FMVWae0T8wEV2(dj2ZRSv j2Dbo|oJfjWMqH=CI&kOFi*e%ECeAL7!;JiTrlClV8Ou5;K0Dnzy?;!0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJ!!9VExVzyPC>^|68E6hH(61A_v@9vCeN71n^#FnuuY zC_NeiqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UiCR1iD#NL0xBN7F8An2Zl}- zRSpFQ29ItC{lcDsfnf)ztG*vZc42J*tSv~fv zLuHP!GkE+zzmtoBfx)Bs2SX{xF?Iuw|L0$eco<&t`2MlskU@vI$N%$Sxi=pFk9&0f z^VknFwu`NU-Q)i;kN?MQ7)n1K9*I#k>gUlA7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z z5Eu=C(GVaz1VFuU5vcBvj8ui<(p-hiVk-rZI8+!b1sV@vVfgqTU6KoC3<99l4rt=RU~y&!N$4O4SUUp) zLp)fV2}3*$EY8fJfu^1zF(pMWu{f6@uQb;XL>Ms?r52awlrZELr!yp#rlqA8F=XbI z#Fym97nc+, ERROR. + movzx eax, al ; zero extend digit + cmp eax, ecx ; cmp digit to base + ja error2 + imul edi, ecx ; accum * base + add edi, eax ; accum + digit + +next: add ebx, 1 ; increment ebx + sub esi, 1 ; decraments esi + cmp esi, 0 + ja looop1 ; loop if it is above 0 + cmp edi, 2147483647 ;checks the upperbound + ja error2 + cmp edi, 1 ;check lowerbound + je error2 + cmp edi, -2147483647 ; check lower bound + je error2 + cmp edi, -1 ;check upperbound + je error2 + ret + + +;---------------------------------------------------------------------------- +; CONOUT transfers byte characters from [EBX] to screen (console). +; String at [EBX] must be null terminated. + +CONOUT: + push eax ; save regs for subroutine transparency + push edx + push esi + + mov esi, ebx ; load ESI with address of buffer + cld ; clear direction flage for forward scan + mov ah, 02h ; select write character function +loop1: lodsb ; get next byte (NB this loop could be + test al, 0ffh ; test for null more efficiently coded!) + jz done + mov dl, al ; copy character into DL for function + int 0f1h ; call OS interrupt 0F1H + jmp loop1 ; ending in JMP is inefficient +done: + pop esi ; restore registers - transparency + pop edx + pop eax + ret + + +; BINASCII routine to convert a 2's complement number passed in EAX, base in +; ECX, into a null-terminated string of ASCII characters stored at [EBX]. + +BINASCII: + push edx ; transparency + push edi + + mov edi, ebx ; put pointer to output string in EDI + test eax, 0ffffffffh + jns positive + mov byte [edi], '-' ; store minus sign in output string + inc edi + + neg eax ; will this work OK with 8000000H? +positive: + push dword 0 ; push marker, keeping stack dword aligned +looop: + mov edx, 0 ; NOTE: HAD TO FIX THIS ONE, CUZ THE STUPID + ; INTEL CHIP INSISTS ON GENERATING A DIVIDE + ; ERROR EXCEPTION IF QUOTIENT TOO BIG!!! + + div ecx ; divide base into R:Q where EDX will + ; contain the remainder and EAX the + ; dividend then quotient + cmp edx, 9 + ja letter + add edx, '0' ; most convenient to do ASCII conversion here + ; add ASCII '0' + jmp puush ; so we can terminate our popping off stack +letter: + add edx, 'A'-10 ; easily: we can have digits of zero which + ; couldn't be distinguished from the marker +puush: + push edx ; push the character + test eax, 0ffffffffh ; if quotient is zero we are done + jnz looop + +outloop: + pop eax ; pop digits + mov [edi], al ; and store + inc edi ; the null is also popped and stored + test al, 0ffh ; test for null + jnz outloop + + pop edi ; transparency + pop edx + ret + + +;---------------------------------------------------------------------------- +[SECTION .data] +;---------------------------------------------------------------------------- + +; all initialized data variables and constant definitions go here + +msg1 db 13,10,"Enter a base number or Q to quit: ", 13, 10, "$" +msg2 db 13,10,"Enter a Number: ", 13, 10, "$" +msg3 db 13,10,"Enter the desired base: ", 13, 10, "$" +msg4 db 13,10,"INVALID INPUT", 13, 10, "$" +msg5 db 13,10,"Your Result is: ", 13, 10, "$" + +;---------------------------------------------------------------------------- +[SECTION .bss] +;---------------------------------------------------------------------------- + +; all uninitialized data elements go here + +buffer resb 34 ; buffer to store input characters +OBU resb 80 ; buffer to store output char diff --git a/x86_64/stack/stack b/x86_64/stack/stack new file mode 100755 index 0000000000000000000000000000000000000000..0390291bc0642597878c29dd9bfecbe5a70a7999 GIT binary patch literal 9304 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7;Y$mxnRP9!GeLA!GVE|ffcNl1uP09U^*c5 z3#c%RW)Oe~fb3ueF`;}0sC_W{97v9VfdNJ%>th4SDS!wD1_lL)Juq4sDh#7x`k=z2 z)MyBdhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#m-Oi1cXw$y}=F(R_p>?nNL2 z1A}Mhp|}?wV8&rz##=s}7kmw$yq4Vo>agzz5gz*(p?&UMpfLe{*4MSWKtZ>gi-Cc` z>GDbH6(&d<$F z%u7+o$;?YtNGwV(%}vcK0rlOHb)d3Ay>J$WkN;6c85p?10w4c_9xc6R(7dFGUk?gNh$Q6Q97qz#srxZGk4<4Hjo& zP==1lfVDF)FigiGJ`XCcfu^3JxFoSSTQ9LVmmxSZI6gecGsKl4IK(C1(+@1*8sQnj z03za@{asuc{9ME1eLVeK8N!47{oLangWR1N5{uH4U5kqHix@KVO5#iMY}Z zK+Md%5{A6giV}vR)RNMoJg`(j5l9qF`lXhG(i}r-MP>;@e0)-IaeQ$}Vo?c0d}>N! zNg_jhYF-KhgI;lEZb@PigI;k-5rocwu}VN@>w(q6LVz+_nt=fn+6>^eCLp6=;SOD| z0$-N`k^_e+lmVp_q57GjeAuuR19aUAe0>U39(4^3#BL_295ST=)&BsRu|WDjP6Cad yfz(NW2nGfQP6h@BxZO}O5XAu+vtwXjSPbGIVW@F%5kVaKS3~uy!&O2U==uTdGr2wh literal 0 HcmV?d00001 diff --git a/x86_64/stack/stack.o b/x86_64/stack/stack.o new file mode 100644 index 0000000000000000000000000000000000000000..dd7f2433bc3c41b96c0d73c54d31cfe52a8d7980 GIT binary patch literal 1504 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-s>z<}KsPzM>oRYDjbw?bGDQk;Q-0csUQ07^PQ z^`C%hU}a!n5Mp3p;DE|YKxug#_6vYCFfcGof~td2P~%`+26YAo2J|oiNp67ZHvn;< zYC!Hpx1YKQ}iqFGV3IGcQ#ku_(PXH#M(>3u*#{iu7py$y}=F z(R_p>?nNL21A}Mhp|}?wV8&rz##=s}7kmw$yq4Voa_D{#;js^*lYwEE5(5JRKkMt- zT_BO&AcH-=fA(lTWDw-}|A+o$3=I20F5m}+kzPt- zNg{(@Noqw2gI;k)aY<20ViJR1ab+%qhVqM2a}ptnKspIykZmjsAOB-h$qY`hm@>>* zQW7^<*~kAN^T13fAqu83#bu!4AWwpsP(l?EY8HB0j3c| z2$;#l;0mS@L_CcKREr~)&Y7#hGdf`IUu7?vW0 zz^q;{$;5C7Od|+q1_lNJEa41SQCyN(oUNBwoXZd#85|!T)Y482}2$z#TBKNlosWIr3#8bqF~Z5wH%ZM8B!}UOW+QJFiap6I0b?7 NGc0~KqKQMf3;+hFs1E=D literal 0 HcmV?d00001 diff --git a/x86_64/stack/stask.asm b/x86_64/stack/stask.asm new file mode 100644 index 0000000..1663309 --- /dev/null +++ b/x86_64/stack/stask.asm @@ -0,0 +1,168 @@ +section .data + SYS_WRITE equ 1 + STD_IN equ 1 + SYS_EXIT equ 60 + EXIT_CODE equ 0 + + NEW_LINE db 0xa + WRONG_ARGC db "Must be two command line argument", 0xa + +section .text + global _start + +_start: + ;; rcx - argc + pop rcx + + ;; + ;; Check argc + ;; + cmp rcx, 3 + jne argcError + + ;; + ;; start to sum arguments + ;; + + ;; skip argv[0] - program name + add rsp, 8 + + ;; get argv[1] + pop rsi + ;; convert argv[1] str to int + call str_to_int + ;; put first num to r10 + mov r10, rax + ;; get argv[2] + pop rsi + ;; convert argv[2] str to int + call str_to_int + ;; put second num to r11 + mov r11, rax + ;; sum it + add r10, r11 + + ;; + ;; Convert to string + ;; + mov rax, r10 + ;; number counter + xor r12, r12 + ;; convert to string + jmp int_to_str + +;; +;; Print argc error +;; +argcError: + ;; sys_write syscall + mov rax, 1 + ;; file descritor, standard output + mov rdi, 1 + ;; message address + mov rsi, WRONG_ARGC + ;; length of message + mov rdx, 34 + ;; call write syscall + syscall + ;; exit from program + jmp exit + + +;; +;; Convert int to string +;; +int_to_str: + ;; reminder from division + mov rdx, 0 + ;; base + mov rbx, 10 + ;; rax = rax / 10 + div rbx + ;; add \0 + add rdx, 48 + ;; push reminder to stack + push rdx + ;; go next + inc r12 + ;; check factor with 0 + cmp rax, 0x0 + ;; loop again + jne int_to_str + ;; print result + jmp print + +;; +;; Convert string to int +;; +str_to_int: + ;; accumulator + xor rax, rax + ;; base for multiplication + mov rcx, 10 +next: + ;; check that it is end of string + cmp [rsi], byte 0 + ;; return int + je return_str + ;; mov current char to bl + mov bl, [rsi] + ;; get number + sub bl, 48 + ;; rax = rax * 10 + mul rcx + ;; ax = ax + digit + add rax, rbx + ;; get next number + inc rsi + ;; again + jmp next + +return_str: + ret + + +;; +;; Print number +;; +print: + ;;;; calculate number length + mov rax, 1 + mul r12 + mov r12, 8 + mul r12 + mov rdx, rax + ;;;; + + ;;;; print sum + mov rax, SYS_WRITE + mov rdi, STD_IN + mov rsi, rsp + ;; call sys_write + syscall + ;; + + ;; newline + jmp printNewline + +;; +;; Print number +;; +printNewline: + mov rax, SYS_WRITE + mov rdi, STD_IN + mov rsi, NEW_LINE + mov rdx, 1 + syscall + jmp exit + +;; +;; Exit from program +;; +exit: + ;; syscall number + mov rax, SYS_EXIT + ;; exit code + mov rdi, EXIT_CODE + ;; call sys_exit + syscall diff --git a/x86_64/strings/SubroutineToPrintStrings/subroutinetoprintspring.asm b/x86_64/strings/SubroutineToPrintStrings/subroutinetoprintspring.asm new file mode 100644 index 0000000..53bb5cb --- /dev/null +++ b/x86_64/strings/SubroutineToPrintStrings/subroutinetoprintspring.asm @@ -0,0 +1,21 @@ + + + +section .data + text db "Hello, World!", 10 + +section .text + global _start + +_start: + mov rax, 1 + mov rdi, 1 + mov rsi, text + mov rdx, 14 + syscall + + mov rax, 60 + mov rdi, 0 + syscall + + diff --git a/x86_64/strings/reverse b/x86_64/strings/reverse new file mode 100755 index 0000000000000000000000000000000000000000..bbd2da95943dcd3fdd0b315dfa841e2393628c8f GIT binary patch literal 9944 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7$j7{TrlClV8Ou5;K0Dmzy(&z0v3f4FdY#3 z1ymSDGYCKgKz6W#m{2|g)IJ#93zB1CV1Uuc`q)5n3Lt`kfk6Rc4~*u83QIs~m_8VH zlpYO%(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S|su0v`Jqp*?61!;^nJ_RB*1 z;V(EC7#KVZ4|o{) z1sMeyg%}0cm^q|5R5^rM85o%K7z7y|K+6LXz%El_U|?Wm{LRP9z{m(*=_e2wKf{Lf0 ziT6Xr8_~pPf>I-BwF#Q|6tFlm125FSVC@VH3=6>GOc>(J!Q#ve5@_mCQbllNaC~@> zXNW69aEMF1e`p8;NW?Y5GlT&|#5?=DxH9;;hR6GO`nfWA`UQlBF!+atfT-leoaEA+ z#FEtDk|Lkfy!4U`hSZA861SrK+@So@lFYnRm`%YYMGOT+nRz8asl}x^B@nh>YPkN!Ng_jhYF-KhgI;lEZb@PigI;k-5rocwu}V@aN*MIO zYW0$eiy8D%Qj<#4;}eS#^U_n{+|0bRe7ICnQc-FdjF$tl9Ttcb(9+;^#lQf{j9_D6 z@djP*17FtzmSn(KrlSbe4=G-d*ZDv+K=KiU4I)w3ATcngGcYiK3Ne^|So-FLt{Vc$ zf%L&Jx_(em2+IpFH6R+M-vGox!su!t`3*?{lxYjKzZS}eQRw>Jq5g--!{}X5{jx9t zD2=W^6o>xnQ2i-TeJ~1LKZp;h3ScTAv;!z&7#J8%fD|w=FmN(3Fz`de8l(cY?g}Ih n3ww|_409+$SZg2@oP-(&=L>=ha5xvv*aFp`2p54c(DefVfY0Cw literal 0 HcmV?d00001 diff --git a/x86_64/strings/reverse.asm b/x86_64/strings/reverse.asm new file mode 100644 index 0000000..f5eea9e --- /dev/null +++ b/x86_64/strings/reverse.asm @@ -0,0 +1,123 @@ +;; +;; initialized data +;; +section .data + SYS_WRITE equ 1 + STD_OUT equ 1 + SYS_EXIT equ 60 + EXIT_CODE equ 0 + + NEW_LINE db 0xa + INPUT db "Hello world!" + +;; +;; non initialized data +;; +section .bss + OUTPUT resb 1 + +;; +;; code +;; +section .text + global _start + +;; +;; main routine +;; +_start: + ;; get addres of INPUT + mov rsi, INPUT + ;; zeroize rcx for counter + xor rcx, rcx + ; df = 0 si++ + cld + ; remember place after function call + mov rdi, $ + 15 + ;; get string lengt + call calculateStrLength + ;; write zeros to rax + xor rax, rax + ;; additional counter for reverseStr + xor rdi, rdi + ;; reverse string + jmp reverseStr + +;; +;; calculate length of string +;; +calculateStrLength: + ;; check is it end of string + cmp byte [rsi], 0 + ;; if yes exit from function + je exitFromRoutine + ;; load byte from rsi to al and inc rsi + lodsb + ;; push symbol to stack + push rax + ;; increase counter + inc rcx + ;; loop again + jmp calculateStrLength + +;; +;; back to _start +;; +exitFromRoutine: + ;; push return addres to stack again + push rdi + ;; return to _start + ret + +;; +;; reverse string +;; +;; 31 in stack +reverseStr: + ;; check is it end of string + cmp rcx, 0 + ;; if yes print result string + je printResult + ;; get symbol from stack + pop rax + ;; write it to output buffer + mov [OUTPUT + rdi], rax + ;; decrease length counter + dec rcx + ;; increase additional length counter (for write syscall) + inc rdi + ;; loop again + jmp reverseStr + +;; +;; Print result string +;; +printResult: + mov rdx, rdi + mov rax, 1 + mov rdi, 1 + mov rsi, OUTPUT + syscall + jmp printNewLine + +;; +;; Print new line +;; +printNewLine: + mov rax, SYS_WRITE + mov rdi, STD_OUT + mov rsi, NEW_LINE + mov rdx, 1 + syscall + jmp exit + +;; +;; Exit from program +;; +exit: + ;; syscall number + mov rax, SYS_EXIT + ;; exit code + mov rdi, EXIT_CODE + ;; call sys_exit + syscall diff --git a/x86_64/strings/reverse.o b/x86_64/strings/reverse.o new file mode 100644 index 0000000000000000000000000000000000000000..60bc158b0a6d9d19d61fe0ffcc15d868a89a6cea GIT binary patch literal 2928 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-sLJWLJqU13_c7ZT6n)U-M5CL8Y1t+1x za6UT&0|N&G0|UDL3s8k1v*C&v7#N_!a3LNB2C#qG;35zPOn)zg3nvBOEC@pgsvp8b zkO{01wgH5Klj!bI#NsB9;t6Q_`Jw7Seg(-(fCvT#22&jNAAstIDuYw#_PY|$Ukld> zVW8^|gt`kNiy$4K0a^hS0=XX+S0Evn`;&0l57jRVQjCPr?JvNg{{d8g3X)zB6J37| z4)+Iu9LvDK0COkE{anzr1~LaG4oV;BW`g7kp!z{Q~)XoO825z{J$NC{Q;oBVqjpH4Kol*quak9NBDn$ z>PJpLpgazB7Cc_KJW_LV@)gSSi*iyxdC6lR)FK8C!;^nJK*oawUVt=u7#{F2{QsJ- z!H%JXeNBMJ|AVi;gdg^3{>e}x5aH3;4pQmy|D?zNSyPqX6ET9=clBG2kSc)=jw-~CMIY2rUn${ zXQd{W6zdn46lLb67wa?lIR^VG80i_B=@}R@Fg8F_0*dhr$nJ%)K`KDyDu@O-3fa9P zAVFxF2Z_VNK?W)g@;7qU$$^Tan*$YQU=(B&WE5f)U}NTx=1}DjW@TVt(qj;0gq1%D z;P6ob*~s{tkC%aw5nS0Zf=YelumPLL3HKtiEaL(@r3F!TcBXa)N=kO7N*X=}N@aF- zCbp50^Yu+4Bj-ozn?^-3F)@J618WBn`XB;i8;*3%pqG+ZlE|Q!R9wuUSCU#$!l0Lu znpBz|pIDTbm!4Y8pjVWdlZY+`QBqKvl$V$bQUl><=B4GMsD}tZBomX8ic-s9rsrhl zrJ^W>2tbsk6(#1T!d2!cGw2m(6qgj0BqlNF6<6j$Xeb}-IqaH;_KsoY|_l& z8W&TB8EZ)ds@p+1ADepQl!B0FX5d6{kXX#%T!kdSz`y`$Uwr%zaxb!sIGBSeE)Nw4 z<#I3+N@##-O#d2z(*nYD7|R+e4&%dUN3b|N9l}G(A8bA|gDRLt5TN=K6hejwAuy{5 zOfoYVgJ}c-sn3}iJP|@*RwtNbWhKB;->B^eB<6`3V&Mftfw`K2YGR1LK-xTJ`opeQr1Bq+7GG^Yf@ z_De1I0jUA$fw&zOvY_w=u|YIQ2EBZRwL5Gt<8 literal 0 HcmV?d00001 diff --git a/x86_64/sum/sum b/x86_64/sum/sum new file mode 100755 index 0000000000000000000000000000000000000000..36e66cf87dca11f90ac0cb041a7e0bace0d90ab6 GIT binary patch literal 8976 zcmb<-^>JfjWMqH=CI&kOFi*e%ECeAL7$zu!xnRP9!GeLA!GVE|ffcNl1uP09U^*c5 z3#c%RW)Oe~fb3ueF`;}0sC_URqMLyMMkDKE1L;!$5ey6r3Q!eLnjb0*qhb1>!lTq^ z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J$Pn0(!oa|=+lYaI!GrOJhwU^5 z28L4k*9<#A{qy}G!ebw-i@gifr{-sU&9K9Ufq`K^D7g5+U3d^{6px0$Xb6mkz-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeD4Bik3F3nZQELKR)FDgn+F5$xIP|#2S3&Y3% z=n6Q&0w4c_h7rI_D8UD&KmG@eEP$C%LKsXlA?EGDdJfjWMqH=Mg}_u1P><4z~F#jLfH-s>JK*GEX3|M^;0M&1Vq!z>kxfMjius8z)15_zY2ux3a z3Vs0d7#LU?7#KJi7#KL9dNX{=RN=+`|V%U+wz`(E@dP7#J8zm7MsZ0|Nn#R%UU6kEgog5qQgad^ zia`1ZW02J>3?KhvQ^^cY0hlt(SYieg2Mi1!|AV}Vtb-5C`S>5?b1)N12!m;m?O+C+ zkOQ-r7(nq4W_^ literal 0 HcmV?d00001