Jumlah byte (rdx)
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 38 dari 45.
Kamu sudah memberi tahu OS tempat untuk mencetak (rdi) dan apa yang harus dicetak (rsi). Sekarang kamu perlu memberi tahu OS berapa banyak byte yang harus dicetak.
Register untuk jumlah byte adalah rdx.
Mengapa OS membutuhkan panjang string?
OS tidak tahu di mana string-mu berakhir. Tanpa panjang, OS akan terus membaca memori selamanya. Panjang memberi tahu OS kapan harus berhenti.
Contoh:
section .data
msg db 'Hello', 0x0a
msgLen equ $ - msg
section .text
mov rdx, msgLen ; rdx = jumlah byte yang akan dicetakApa yang terjadi jika panjangnya salah?
| Jika kamu menetapkan | Hasil |
|---|---|
| Terlalu pendek | Hanya sebagian string yang dicetak |
| Terlalu panjang | OS terus membaca melewati string-mu hingga ke memori sampah: mungkin mencetak karakter acak atau mengalami crash |
| Nol | Tidak ada yang dicetak |
Menghitung panjang secara otomatis:
Kamu sudah mempelajari pola $ - label di Bab 3:
section .data
msg db 'Hello', 0x0a
msgLen equ $ - msg ; msgLen = 6 (Hello + baris baru)Ini memastikan panjangnya selalu benar, bahkan jika kamu mengubah string.
Contoh lengkap:
section .data
msg db 'Hello', 0x0a
msgLen equ $ - msg
section .text
mov rax, 1 ; syscall write
mov rdi, 1 ; stdout
mov rsi, msg ; alamat string
mov rdx, msgLen ; jumlah byte
syscallTantangan
Kamu diberi string bernama color dengan nilai 'Red' yang diikuti newline. Konstanta bernama colorLen sudah didefinisikan menggunakan $ - color.
Tulis baris kode yang menetapkan panjang string ke rdx menggunakan konstanta colorLen.
Tulis hanya instruksi mov untuk rdx.
Coba sendiri
section .text
global _start
_start:
; Kodemu dijalankan lebih dulu (menetapkan rdx)
%include "solution.asm"
mov rax, 1
mov rdi, 1
mov rsi, color
; rdx sudah berisi panjangnya (dari kodemu)
syscall
mov rax, 60
mov rdi, 0
syscallPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
Latihan sendiri: Playground Assembly