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 بتجدول المقارنة:
| التوجيه | الحجم | النطاق | السجل المستخدم |
|---|---|---|---|
db | 1 byte | 0 إلى 255 | al |
dw | 2 bytes | 0 إلى 65,535 | ax |
dd | 4 bytes | 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 بت |
التحدي
سهلأنشئ كلمة مزدوجة باسم 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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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