Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

dd - تعريف Double Word

جزء من قسم الأساسيات في رحلة Assembly على Coddy. الدرس 26 من 45.

ينشئ dw مقدارًا من البيانات بحجم 2 بايت. لكنك تحتاج أحيانًا إلى أعداد أكبر. لذلك، تستخدم dd: تعريف كلمة مزدوجة.

الكلمة المزدوجة في تجميع x86 هي 4 بايت (32 بت).

البنية النحوية:

label dd value

أمثلة:

section .data
    myNumber dd 50000        ; 4 بايت، القيمة 50000
    bigNum   dd 4000000      ; 4 بايت، القيمة 4 ملايين
    max32    dd 4294967295   ; القيمة القصوى لـ 32 بت

جدول المقارنة:

التوجيهالحجمالنطاقالسجل المستخدم
db1 byte0 إلى 255al
dw2 bytes0 إلى 65,535ax
dd4 bytes0 إلى 4,294,967,295eax

كيفية استخدام double word في تعليمتك البرمجية:

section .data
    myNumber dd 50000

section .text
    mov eax, [myNumber]    ; تحميل القيمة إلى eax
    add eax, 10000         ; eax يصبح 60000
    mov [myNumber], eax    ; تخزين مرة أخرى

قاعدة مهمة:

القاعدةالشرح
استخدم eax للتحميل أو التخزينeax هو السجل ذو 32 بت
challenge icon

التحدي

سهل

أنشئ كلمة مزدوجة باسم 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:
    ; حمّل قيمة الكلمة المزدوجة في eax
    mov eax, [distance]
    
    ; حوّل eax إلى سلسلة عشرية
    mov rsi, buffer
    add rsi, 31          ; انتقل إلى نهاية buffer
    mov byte [rsi], 0    ; المنهي الصفري
    
    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
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: Playground لـ Assembly