Menu
CoddyTech

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 value

Contoh:

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:

DirektifUkuranRentangRegister yang digunakan
db1 byte0 hingga 255al
dw2 bytes0 hingga 65,535ax
dd4 bytes0 hingga 4,294,967,295eax
dq8 bytesSangat 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 kembali

Penggunaan khusus: menyimpan alamat

dq juga digunakan untuk menyimpan alamat memori (pointer):

section .data
    message db 'Hello', 0
    pointer dq message      ; Menyimpan alamat message

Aturan penting:

AturanPenjelasan
Gunakan rax untuk memuat atau menyimpanrax adalah register 64-bit
challenge icon

Tantangan

Mudah

Buat 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
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