dq - تعريف Quad Word
جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 27 من 45.
ينشئ dd 4 بايتات من البيانات. لكنك تحتاج أحيانًا إلى أعداد أكبر أو عناوين ذاكرة. لذلك، تستخدم dq: تعريف كلمة رباعية.
كلمة quad word في تجميع x86 تساوي 8 bytes (64 بت).
الصياغة:
label dq valueأمثلة:
section .data
myNumber dq 10000000000 ; 8 بايت، القيمة 10 مليار
bigNum dq 123456789012 ; رقم كبير جدًا
address dq msg ; عنوان الذاكرة للتسمية "msg"جدول المقارنة:
| التوجيه | الحجم | النطاق | السجل المطلوب استخدامه |
|---|---|---|---|
db | 1 byte | 0 إلى 255 | al |
dw | 2 bytes | 0 إلى 65,535 | ax |
dd | 4 bytes | 0 إلى 4,294,967,295 | eax |
dq | 8 bytes | Very large (2⁶⁴-1) | rax |
كيفية استخدام كلمة رباعية في التعليمات البرمجية الخاصة بك:
section .data
myNumber dq 5000000000
section .text
mov rax, [myNumber] ; تحميل القيمة إلى rax
add rax, 1000000000 ; rax يصبح 6 مليارات
mov [myNumber], rax ; تخزين مرة أخرىاستخدام خاص: تخزين العناوين
يُستخدم dq أيضًا لتخزين عناوين الذاكرة (المؤشرات):
section .data
message db 'Hello', 0
pointer dq message ; يخزن عنوان messageقاعدة مهمة:
| القاعدة | الشرح |
|---|---|
استخدم rax للتحميل أو التخزين | rax هو السجل ذو 64 بت |
التحدي
سهلأنشئ كلمة quad باسم universe_age وقيمتها 13800000000 في قسم .data.
جرّب بنفسك
%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:
; حمّل قيمة الكلمة الرباعية إلى rax
mov rax, [universe_age]
; حوّل rax إلى سلسلة عشرية
mov rsi, buffer
add rsi, 63 ; انتقل إلى نهاية buffer
mov byte [rsi], 0 ; المنهي الصفري
mov rcx, 10 ; القاسم للتحويل العشري
convert_loop:
xor rdx, rdx ; صفّر rdx للقسمة
div rcx ; اقسم rax على 10، rax = الناتج، rdx = الباقي
add dl, '0' ; حوّل الباقي إلى ASCII
dec rsi
mov [rsi], dl ; خزّن الرقم
cmp rax, 0
jnz convert_loop
; احفظ مؤشر الرقم والطول قبل أن يتم الكتابة فوقهما
mov r8, rsi ; r8 = مؤشر إلى الرقم الأول
mov r9, buffer
add r9, 63
sub r9, rsi ; r9 = عدد الأرقام
; طباعة الرسالة
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; طباعة الرقم
mov rax, 1
mov rdi, 1
mov rsi, r8
mov rdx, r9
syscall
; طباعة سطر جديد
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; خروج
mov rax, 60
mov rdi, 0
syscall
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4تعريف البيانات
قسم .datadb - تعريف Bytedw - تعريف Worddd - تعريف Double Worddq - تعريف Quad Wordالسلاسل النصية باستخدام dbالرمز $ملخص: بناء data.asm2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)تدرّب بنفسك: Playground لـ Assembly