Assembly - Mengambil Input dan Mencetaknya

Mengambil Input dan mencetaknya

Sekarang kita akan belajar cara mengambil input kemudian mencetaknya menggunakan syscall linux.

Kita akan menggunakan syscall read() untuk membaca masukkan dari sebuah stream kemudian menyimpannya ke dalam memori.

Kurang lebih beginilah kodenya dalam bahasa C

#include <unistd.h>

int main(void)
{
    static char str[5];
    ssize_t ret = read(STDIN_FILENO, str, sizeof(str));
    write(STDOUT_FILENO, str, ret);
    _exit(0);
}

Sekarang kita akan menulisnya dalam bentuk assembly.

Oh iya, kita akan menggunakan instruksi xor nantinya untuk mengisi nilai suatu register dengan nilai 0

Serta menggunakan bagian 32 bit register karena lebih efisien (tidak menggunakan REX prefix).

Parameter syscall read() kurang lebih sama seperti syscall write().

| SYSCALL | RAX | RDI | RSI | RDX | R10 | R8 | R9 | | ——- | — | — | — | — | — | – | – |

read 0 fd addr buf
[section .bss]
        text resb 5
        ; Alokasi memori statis sebanyak 5 bytes

[section .text]
        global _start
_start:
        xor eax, eax
        xor edi, edi ; STDIN_FILENO bernilai 0
        mov esi, text
        mov edx, 5
        syscall

        mov edi, 1
        mov esi, text
        mov rdx, rax ; return value dari write() dipakai sebagai count
        mov eax, 1
        syscall

        mov eax, 60
        xor edi, edi
        syscall

image

Di sini penulis mengetik “abcd” dan menekan tombol enter yang di mana juga akan memasukkan newline ke dalam input.

results matching ""

    No results matching ""