string dengan db
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 28 dari 45.
Kamu sudah tahu bahwa db mendefinisikan satu byte. Namun, db juga bisa mendefinisikan string: beberapa byte yang berurutan.
Sintaks:
label db 'text here'Contoh:
section .data
message db 'Hello'Ini membuat 5 byte di memori: 'H', 'e', 'l', 'l', 'o'
Apa yang terjadi di memori:
| Alamat | Byte | Nilai ASCII |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
Menambahkan baris baru:
Untuk mencetak string dan berpindah ke baris berikutnya, tambahkan 0x0a (karakter baris baru):
section .data
message db 'Hello', 0x0aSekarang string memiliki 6 byte: 'H','e','l','l','o', newline
Beberapa string:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aMengapa ini penting:
string adalah data yang paling umum kamu gunakan dalam assembly. syscall write (yang akan kamu pelajari di Bab 5) mencetak string dengan membaca byte dari memori sampai mencapai panjang yang kamu berikan.
Catatan penting:
String hanyalah byte. CPU tidak tahu atau peduli bahwa 'H' adalah sebuah huruf. Itu hanyalah angka 72. syscall write menafsirkan angka-angka itu sebagai karakter saat mencetak.
Tantangan
MudahBuat string bernama greeting dengan nilai 'Hi' diikuti karakter baris baru (0x0a) di bagian .data.
Coba sendiri
%include "data.asm"
section .text
global _start
_start:
; Cetak string menggunakan syscall write
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', baris baru = 3 byte
syscall
; Keluar
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
Cari kode karakter apa pun: Konverter ASCII