Menu
CoddyTech

Simbol $

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

Saat mencetak string menggunakan syscall write (Bab 5), kamu perlu memberi tahu CPU berapa banyak byte yang harus dicetak.

Kamu bisa menghitung karakter secara manual:

message db 'Hello', 0x0a    ; 6 byte (H e l l o baris baru)
mov rdx, 6                  ; Penghitungan manual

Namun, menghitung secara manual lambat dan rentan terhadap kesalahan. Jika kamu mengubah string, kamu harus menghitung ulang dan memperbarui angkanya.

Solusi: penghitungan panjang otomatis menggunakan $

$ adalah penghitung lokasi. Ini mewakili alamat memori saat ini tempat byte berikutnya akan ditempatkan.

Contoh 1: string sederhana

section .data
    message db 'Hello', 0x0a
    msgLen equ $ - message

Cara kerjanya:

  • message adalah alamat awal (contoh: 1000)
  • Setelah menyimpan 6 byte, $ menjadi 1006
  • $ - message = 1006 − 1000 = 6 (panjangnya)

Catatan: equ adalah singkatan dari equate. Ini membuat konstanta: nama yang mewakili sebuah nilai.

Contoh 2: Beberapa string

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', baris baru)
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', baris baru)

Setiap string memiliki panjangnya sendiri yang dihitung secara otomatis. $ diatur ulang untuk setiap perhitungan karena selalu merujuk pada posisi saat ini tepat setelah setiap string.

challenge icon

Tantangan

Mudah

Buat string bernama city dengan nilai 'Paris' diikuti baris baru (0x0a). Lalu buat konstanta bernama cityLen yang menghitung panjang secara otomatis menggunakan $ - city.

Coba sendiri

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    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