dd - تعريف Double Word
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 26 من 45.
dw ينشئ بايتين من البيانات. ولكن في بعض الأحيان قد تحتاج إلى أرقام أكبر. لهذا الغرض، تستخدم dd — تعريف كلمة مزدوجة (Define Double Word).
الـ كلمة المزدوجة في لغة تجميع x86 هي 4 بايتات (32 بت).
الصيغة:
label dd valueأمثلة:
section .data
myNumber dd 50000 ; 4 بايت، القيمة 50000
bigNum dd 4000000 ; 4 بايت، القيمة 4 مليون
max32 dd 4294967295 ; أقصى قيمة 32-بتجدول المقارنة:
| التوجيه | الحجم | النطاق | المسجل المستخدم |
|---|---|---|---|
db | 1 بايت | من 0 إلى 255 | al |
dw | 2 بايت | من 0 إلى 65,535 | ax |
dd | 4 بايت | من 0 إلى 4,294,967,295 | eax |
كيفية استخدام كلمة مزدوجة (double word) في الكود الخاص بك:
section .data
myNumber dd 50000
section .text
mov eax, [myNumber] ; تحميل القيمة في eax
add eax, 10000 ; يصبح eax هو 60000
mov [myNumber], eax ; التخزين مرة أخرىقاعدة هامة:
| القاعدة | الشرح |
|---|---|
استخدم eax للتحميل أو التخزين | eax هو مسجل 32-بت |
التحدي
سهلأنشئ double word يسمى distance بالقيمة 125000 في قسم .data.
جرّب بنفسك
%include "data.asm"
section .data
msg db 'distance = '
msg_len equ $ - msg
newline db 0xa
section .bss
buffer resb 32
section .text
global _start
_start:
; تحميل قيمة الكلمة المزدوجة (double word) في eax
mov eax, [distance]
; تحويل eax إلى سلسلة نصية عشرية
mov rsi, buffer
add rsi, 31 ; الانتقال إلى نهاية المخزن المؤقت (buffer)
mov byte [rsi], 0 ; المنتهي الصفري (Null terminator)
mov ecx, 10 ; القاسم للتحويل العشري
convert_loop:
xor edx, edx ; مسح edx من أجل القسمة
div ecx ; قسمة eax على 10، eax = ناتج القسمة، edx = الباقي
add dl, '0' ; تحويل الباقي إلى ASCII
dec rsi
mov [rsi], dl ; تخزين الرقم
cmp eax, 0
jnz convert_loop
; حفظ مؤشر الرقم وطوله قبل أن يتم الكتابة فوقهما
mov r8, rsi ; r8 = مؤشر لأول رقم
mov r9, buffer
add r9, 31
sub r9, rsi ; r9 = عدد الأرقام
; طباعة الرسالة
mov rax, 1
mov rdi, 1
mov rdx, msg_len
mov rsi, msg
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)