Menu
CoddyTech

Syscall write (1)

Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 35 dari 45.

Kamu sudah tahu cara keluar dari program. Namun, keluar tanpa menampilkan apa pun tidak terlalu berguna. Kamu ingin programmu menampilkan output agar pengguna dapat melihat sesuatu.

Untuk itu, kamu memerlukan syscall write.

Apa itu syscall write?

Syscall write memberi tahu sistem operasi untuk mencetak teks ke layar (atau menulis ke file). Inilah cara programmu menghasilkan output.

Nomor syscall untuk write adalah 1.

Cara kerja write:

Tidak seperti syscall exit, yang hanya membutuhkan satu argumen, write membutuhkan tiga argumen:

ArgumenRegisterFungsinyaContoh
File descriptorrdiTempat menulis (1 = layar)mov rdi, 1
Alamat bufferrsiTempat teks berada di memorimov rsi, message
Jumlah byterdxJumlah byte yang akan dicetakmov rdx, 13

System call write sedang bekerja:

mov rax, 1      ; nomor syscall untuk write
mov rdi, 1      ; deskriptor file 1 = stdout (layar)
mov rsi, msg    ; alamat string yang akan dicetak
mov rdx, 13     ; jumlah byte yang akan dicetak
syscall         ; minta OS mencetak

Untuk mencetak pesan di layar, kita memerlukan 5 baris. Pertama, kita memasukkan nomor syscall 1 ke dalam rax untuk write. Lalu kita memasukkan 1 ke dalam rdi untuk memberi tahu OS agar mencetak ke layar.

Selanjutnya, kita memasukkan alamat string (msg) ke dalam rsi. Setelah itu, kita memasukkan jumlah byte (13) ke dalam rdx. Terakhir, kita menjalankan syscall untuk meminta OS mencetaknya.

Apa yang terjadi saat kamu menjalankan write:

  1. CPU melompat ke kernel Linux
  2. Kernel melihat: "write syscall"
  3. Kernel membaca rdi (tempat untuk menulis), rsi (tempat teks berada), dan rdx (jumlah byte)
  1. Perintah ini mencetak teks ke layar
  2. Perintah ini mengembalikan kendali ke programmu

Menyatukannya dengan string:

section .data
    msg db 'Hello', 0x0a    ; string dengan baris baru

section .text
    global _start

_start:
    mov rax, 1              ; syscall untuk menulis
    mov rdi, 1              ; stdout
    mov rsi, msg            ; alamat string
    mov rdx, 6              ; panjang (Hello + baris baru = 6 byte)
    syscall

    mov rax, 60             ; syscall untuk keluar
    mov rdi, 0
    syscall

Program ini mencetak Hello lalu keluar.

challenge icon

Tantangan

Tulis program yang mencetak pesan "Hi" diikuti baris baru. Gunakan syscall write.

String sudah didefinisikan untukmu di lingkungan pengujian. Kamu hanya perlu menulis penyiapan syscall.

Coba sendiri

section .data
    msg db 'Hi', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    ; TODO: Siapkan dan panggil syscall write untuk mencetak msg
    ; Gunakan rax=1, rdi=1, rsi=msg, rdx=msgLen

    ; Akhiri programmu
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground Assembly