From 5916caf71eaccccdffa198f069252ada0ebe9e07 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 8 Jun 2022 20:27:04 +0800 Subject: [PATCH 1/4] menbahkan program print angka multigit --- simple_asm/print_angka_multidigit.asm | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 simple_asm/print_angka_multidigit.asm diff --git a/simple_asm/print_angka_multidigit.asm b/simple_asm/print_angka_multidigit.asm new file mode 100644 index 0000000..afb9f73 --- /dev/null +++ b/simple_asm/print_angka_multidigit.asm @@ -0,0 +1,72 @@ +;program untuk print angka lebih dari 1 digit +;algoritma nya adalah dibagi dulu setelah itu assign hasil bagi tersebut ke beberapa variable +;untuk lebih jelasnya silahkan kunjungi link berikut: +;link: https://pvk.ca/Blog/2017/12/22/appnexus-common-framework-its-out-also-how-to-print-integers-faster/ + +section .data + num dd 79000 + +section .bss + ;variable untuk mendapatkan jumlah digit + counter resb 1 + +section .text + global _start + +_start: + +get_digit: + ;increment digit ketika looping + mov eax,[counter] + inc eax + mov [counter],eax + + ; initial value yang akan di bagi + mov edx, 0 + mov eax, [num] + mov ecx, 10 + + ;bagi nilai yang variable num sekarang + div ecx + + ;convert ke ascii nilai mod yang didapat dari pembagian dan push ke stack + add edx, byte '0' + push edx + + ;memperbarui nilai variable num dengan nilai baru hasil pembagian + mov [num],eax + + ;check apakah nilai variable num sekarang besar dari 10 jika iya looping kembali + mov eax,[num] + cmp eax,10 + jg get_digit + + ;ketika variable num sudah bernilai 10, ambil hasil bagi di num sekarang dan push ke stack + add [num], byte '0' + mov eax, [num] + push eax + + ;print angka yang sudah di push ke stack +print_number: + mov eax,4 ;sys_write + mov ebx,1 ;file descriptor std_out + mov ecx,esp + mov edx,1 + int 0x80 + + ;pop esp untuk mendapatkan nilai valu ascii selanjutnya + add esp,4 + + ;decrement valu counter yang didapatkan sebelumnya + mov ecx,[counter] + dec ecx + mov [counter],ecx + + ;compare counter untuk kondisi loop + cmp ecx,0 + jge print_number + + ;sys_exit kernel + mov eax,1 + mov ebx,0 + int 0x80 \ No newline at end of file From a0cf87ca0a73faf7edaa9d5e62bb6a511ca9c592 Mon Sep 17 00:00:00 2001 From: Dhyno Date: Mon, 20 Jun 2022 01:35:57 +0700 Subject: [PATCH 2/4] menambhkan program atoi --- simple_asm/simple_atoi.asm | 48 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 simple_asm/simple_atoi.asm diff --git a/simple_asm/simple_atoi.asm b/simple_asm/simple_atoi.asm new file mode 100644 index 0000000..0aefbbb --- /dev/null +++ b/simple_asm/simple_atoi.asm @@ -0,0 +1,48 @@ +;program untuk menconvert input dari user menjadi angka karena input yang di dapat +;berupa karakter ascii bukan angka + + +section .data + num db 0 + +section .text + global _start + +_start: + ;code here + mov eax,3 ;sys_read + mov ebx,0 ;file desceiptor stdin + mov ecx,num + mov edx,3 + int 0x80 + + mov edi,num + + mov al, byte 0 ;hasil perkalian + +get_char: + + movzx edx, byte[edi] ;mov one byte edi to edx / dl + + cmp dl,48 ;jika kurang dari 0 end program + jl end + + cmp dl,57 ;jika lebih dari 9 end program + jg end + + mov bl,byte [edi] + sub bl, byte '0' + mov dl, byte 10 + + mul dl ;kali angka + add al,bl ;tambahkan hasil perkalian dengan digit input + + inc edi ;char selanjutnya + jmp get_char + + + ;hasil nya berada pada register eax tepatnya di al +end: + mov eax,1 + mov ebx,0 + int 0x80 \ No newline at end of file From c26534c9c5cd78e07e8939c420645a0a38104bde Mon Sep 17 00:00:00 2001 From: Dhyno Date: Mon, 20 Jun 2022 01:37:21 +0700 Subject: [PATCH 3/4] menambhkan program atoi --- simple_asm/simple_atoi.asm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/simple_asm/simple_atoi.asm b/simple_asm/simple_atoi.asm index 0aefbbb..a2a7f7d 100644 --- a/simple_asm/simple_atoi.asm +++ b/simple_asm/simple_atoi.asm @@ -1,5 +1,7 @@ ;program untuk menconvert input dari user menjadi angka karena input yang di dapat ;berupa karakter ascii bukan angka +;atau program ini atoi pada bahasa c dengan versi saya sendiri +;algoritmanya adalah kali sepuluh hasil yang ditampung terus ditambah dengan digit baru section .data From 2d62ed67572b69900356d7ae8e1a4fb5a285cdf3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Jun 2022 11:59:40 +0800 Subject: [PATCH 4/4] add: menambahkan program atoi(versi sendiri) --- simple_asm/simple_atoi.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_asm/simple_atoi.asm b/simple_asm/simple_atoi.asm index a2a7f7d..dade20e 100644 --- a/simple_asm/simple_atoi.asm +++ b/simple_asm/simple_atoi.asm @@ -43,7 +43,7 @@ get_char: jmp get_char - ;hasil nya berada pada register eax tepatnya di al + ;hasil nya berada pada register eax tepatnya di al berukuran 1 byte end: mov eax,1 mov ebx,0