diff --git a/README.md b/README.md index 1af7a28..a503098 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,6 @@ This project for me just for fun to not spending time for routine operations -1. std - - print - - str - - int - - ~~float~~ - - ~~hex~~ - - char - - bin - - nl - - exit -2. file - - open - - close - - content - - ~~size~~ - - ~~next_line~~ -3. path - - filename - - ~~join~~ - - ~~is_dir~~ - - ~~is_file~~ -4. string - - copy - - len - - ~~split~~ - - ~~replace~~ - - ~~find~~ - - ~~parse_int~~ - - ~~parse_float~~ -5. network - - get_ip - - IP_to_str -6. dns - - send - - get_field -7. [dnstoys](https://www.dns.toys/) - - myip - - ~~weather and other~~ -8. ~~http~~ -9. ~~json~~ +[Wiki](https://github.com/VerySweetBread/asm_libs/wiki) +[Examples](https://github.com/VerySweetBread/asm_libs/tree/main/examples) A lot of shit code included diff --git a/dnstoys.o b/dnstoys.o index f1b559d..8af284a 100644 Binary files a/dnstoys.o and b/dnstoys.o differ diff --git a/examples/HWA/main b/examples/HWA/main index 0bb9c71..fad9ef8 100644 Binary files a/examples/HWA/main and b/examples/HWA/main differ diff --git a/examples/HWA/main.asm b/examples/HWA/main.asm index 56e42b7..561a0db 100644 --- a/examples/HWA/main.asm +++ b/examples/HWA/main.asm @@ -5,6 +5,7 @@ extrn print.int extrn print.bin extrn print.str extrn print.nl +extrn string.parse_int extrn exit macro nl { @@ -13,7 +14,13 @@ macro nl { section '.strtab' -str1 db "Hello world!", 0 +str1 db "Hello world!", 10, 0 +str2 db "Enter the number: ", 0 +str3 db " + 10 = ", 0 + + +section '.bss' writeable +buffer rb 11 section '.text' executable @@ -28,6 +35,28 @@ _start: push str1 call print.str + + push str2 + call print.str + mov eax, 3 + mov ebx, 0 + mov ecx, buffer + mov edx, 11 + int 80h + + mov [buffer+eax-1], 0 + + push buffer + call print.str + push str3 + call print.str + + push buffer + call string.parse_int + pop eax + add eax, 10 + push eax + call print.int nl call exit diff --git a/examples/HWA/main.o b/examples/HWA/main.o index a224c47..3f8681f 100644 Binary files a/examples/HWA/main.o and b/examples/HWA/main.o differ diff --git a/examples/HWA/makefile b/examples/HWA/makefile index e469b7f..0adebfc 100644 --- a/examples/HWA/makefile +++ b/examples/HWA/makefile @@ -1,7 +1,7 @@ all: main -main: ../../std.o main.o - ld -m elf_i386 main.o ../../std.o --output main +main: ../../std.o ../../string.o main.o + ld -m elf_i386 main.o ../../std.o ../../string.o --output main main.o: fasm main.asm @@ -9,5 +9,8 @@ main.o: ../../std.o: make -C ../../ std.o +../../string.o: + make -C ../../ string.o + clear: rm main.o main diff --git a/examples/file/main b/examples/file/main index 3c10d90..30355a7 100644 Binary files a/examples/file/main and b/examples/file/main differ diff --git a/examples/file/main.o b/examples/file/main.o index 339c0e4..b570810 100644 Binary files a/examples/file/main.o and b/examples/file/main.o differ diff --git a/examples/network/main b/examples/network/main index 029ebba..ae1ef0f 100644 Binary files a/examples/network/main and b/examples/network/main differ diff --git a/src/dnstoys.asm b/src/dnstoys.asm index 84c9786..e12e77d 100644 --- a/src/dnstoys.asm +++ b/src/dnstoys.asm @@ -19,7 +19,7 @@ response rb 200 DNS_server sockaddr 00,53, ?,?,?,? DNS_request dnsreq -section '.dnstoys.text' +section '.dnstoys.text' executable myip: push 0 prelude diff --git a/src/std.asm b/src/std.asm index 77a256c..4ed241c 100644 --- a/src/std.asm +++ b/src/std.asm @@ -121,6 +121,7 @@ _int: push 10 mov ebx, 10 + xor edx, edx @@: cmp eax, 10 diff --git a/src/string.asm b/src/string.asm index 4d8488c..604e95b 100644 --- a/src/string.asm +++ b/src/string.asm @@ -1,6 +1,7 @@ format ELF -public copy as 'string.copy' -public len as 'string.len' +public copy as 'string.copy' +public len as 'string.len' +public parse_int as 'string.parse_int' include "../include/_macros.inc" @@ -44,3 +45,40 @@ len: mov [ebp+2*4], ebx postlude ret + +parse_int: + prelude + + mov eax, [ebp+4*2] + xor ebx, ebx + mov ecx, 1 + push word 10 + + @@: + cmp [eax], byte '0' + jl @f + cmp [eax], byte '9' + ja @f + + mov bl, [eax] + sub bl, '0' + push bx + inc eax + jmp @b + @@: + xor eax, eax + mov ecx, 1 + @@: + pop bx + + cmp bx, 10 + je @f + + imul ebx, ecx + imul ecx, 10 + add eax, ebx + jmp @b + @@: + mov [ebp+4*2], eax + postlude + ret diff --git a/std.o b/std.o index 957a16c..82b562a 100644 Binary files a/std.o and b/std.o differ diff --git a/string.o b/string.o index 8fd560a..d611758 100644 Binary files a/string.o and b/string.o differ