Menu
CoddyTech

Alamat buffer (rsi)

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

Pada syscall write, setelah memberi tahu OS ke mana output harus dikirim (file descriptor di rdi), kamu perlu memberi tahu apa yang harus dicetak. Caranya dengan memberikan alamat string di memori.

Register untuk alamat buffer adalah rsi.

Apa itu buffer?

Buffer adalah blok memori yang menyimpan data. Dalam kasus kita, buffer adalah string yang ingin kita cetak.

Mengapa alamat, bukan nilainya sendiri?

Syscall write perlu mengetahui lokasi awal string di memori. Syscall ini akan membaca byte dari alamat tersebut hingga mencapai panjang yang kamu tentukan di rdx. Kamu tidak mengirim karakter sebenarnya ke syscall. Kamu mengirim lokasinya.

Contoh:

section .data
    msg db 'Hello', 0x0a

section .text
    mov rsi, msg        ; rsi menyimpan alamat msg

Apa sebenarnya msg:

msg adalah label. Assembler menggantinya dengan angka: alamat memori tempat string 'Hello' disimpan. Saat kamu menulis mov rsi, msg, kamu memasukkan angka alamat itu ke dalam rsi.

Apa yang terjadi jika kamu lupa alamatnya?

Jika kamu tidak mengatur rsi, register akan berisi nilai sampah yang ada di sana sebelumnya. OS akan mencoba membaca dari alamat memori acak, yang kemungkinan besar akan menyebabkan segmentation fault (crash).

Contoh lengkap dengan syscall write:

section .data
    msg db 'Hello', 0x0a
    len equ $ - msg

section .text
    mov rax, 1          ; syscall write
    mov rdi, 1          ; stdout
    mov rsi, msg        ; alamat string
    mov rdx, len        ; jumlah byte
    syscall
challenge icon

Tantangan

Kamu diberi string bernama greeting dengan nilai 'Hi' yang diikuti karakter baris baru. Tulis baris kode yang memuat alamat greeting ke dalam rsi.

Tulis hanya instruksi mov untuk rsi.

Coba sendiri

section .text
    global _start

_start:
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    ; rsi sudah berisi alamat (dari kodemu)
    mov rdx, greetingLen
    syscall

    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