dq, Definisikan Quad Word
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 27 dari 45.
dd membuat data sebesar 4 byte. Namun, terkadang kamu memerlukan angka atau alamat memori yang lebih besar. Untuk itu, kamu menggunakan dq: Define Quad Word.
quad word dalam assembly x86 berukuran 8 byte (64 bit).
Sintaks:
label dq valueContoh:
section .data
myNumber dq 10000000000 ; 8 byte, bernilai 10 miliar
bigNum dq 123456789012 ; Angka yang sangat besar
address dq msg ; Alamat memori dari label "msg"Tabel perbandingan:
| Direktif | Ukuran | Rentang | Register yang digunakan |
|---|---|---|---|
db | 1 byte | 0 hingga 255 | al |
dw | 2 bytes | 0 hingga 65,535 | ax |
dd | 4 bytes | 0 hingga 4,294,967,295 | eax |
dq | 8 bytes | Sangat besar (2⁶⁴-1) | rax |
Cara menggunakan quad word dalam kodemu:
section .data
myNumber dq 5000000000
section .text
mov rax, [myNumber] ; Muat nilai ke rax
add rax, 1000000000 ; rax menjadi 6 miliar
mov [myNumber], rax ; Simpan kembaliPenggunaan khusus: menyimpan alamat
dq juga digunakan untuk menyimpan alamat memori (pointer):
section .data
message db 'Hello', 0
pointer dq message ; Menyimpan alamat messageAturan penting:
| Aturan | Penjelasan |
|---|---|
Gunakan rax untuk memuat atau menyimpan | rax adalah register 64-bit |
Tantangan
MudahBuat quad word bernama universe_age dengan nilai 13800000000 di bagian .data.
Coba sendiri
%include "data.asm"
section .data
msg db 'universe_age = '
msg_len equ $ - msg
newline db 0xa
section .bss
buffer resb 64
section .text
global _start
_start:
; Muat nilai quad word ke rax
mov rax, [universe_age]
; Ubah rax menjadi string desimal
mov rsi, buffer
add rsi, 63 ; Pindah ke akhir buffer
mov byte [rsi], 0 ; Penanda akhir null
mov rcx, 10 ; Pembagi untuk konversi desimal
convert_loop:
xor rdx, rdx ; Kosongkan rdx untuk pembagian
div rcx ; Bagi rax dengan 10, rax = hasil bagi, rdx = sisa
add dl, '0' ; Ubah sisa menjadi ASCII
dec rsi
mov [rsi], dl ; Simpan digit
cmp rax, 0
jnz convert_loop
; Simpan pointer digit dan panjangnya SEBELUM nilainya tertimpa
mov r8, rsi ; r8 = pointer ke digit pertama
mov r9, buffer
add r9, 63
sub r9, rsi ; r9 = jumlah digit
; Cetak pesan
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Cetak angka
mov rax, 1
mov rdi, 1
mov rsi, r8
mov rdx, r9
syscall
; Cetak baris baru
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; Keluar
mov rax, 60
mov rdi, 0
syscall
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
4Definisi Data
Bagian .datadb, Definisikan Bytedw, Definisikan Worddd, Definisikan Double Worddq, Definisikan Quad Wordstring dengan dbSimbol $Tinjauan: Buat data.asmLatihan sendiri: Playground Assembly