Menu
CoddyTech
flag Ar iconالعربيةdown icon

قسم .data

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

في الفصل 2، حمّلتَ قيماً من الذاكرة وخزّنتَ قيماً في الذاكرة. لكن من أين جاءت تلك الذاكرة؟ من أنشأ num1 وnum2 وresult؟

الإجابة هي قسم .data. هنا تنشئ بياناتك الخاصة في الذاكرة.

ما هو قسم .data؟

قسم .data هو جزء من برنامج التجميع الذي تعرّف فيه البيانات التي ستُخزَّن في الذاكرة قبل تشغيل برنامجك.

الصياغة:

section .data
    ; ضع تعريفات البيانات الخاصة بك هنا

لماذا تحتاج إليه:

بدون قسم .dataمع قسم .data
ليس لديك بيانات للعمل عليهايمكنك إنشاء أرقام وسلاسل نصية ومتغيرات
عناوين الذاكرة غير معروفةيمكنك استخدام تسميات مثل myNumber أو message
لا يمكنك اختبار التعليمات البرمجيةيمكنك تحميل البيانات التي أنشأتها وتخزينها

مثال بسيط:

section .data
    age db 25           ; أنشئ بايت باسم "age" بقيمة 25
    price dw 1000       ; أنشئ كلمة باسم "price" بقيمة 1000
    name db 'Bob'       ; أنشئ سلسلة نصية باسم "name" تتكون من الأحرف B، o، b

موضعه في ملفاتك:

تذكّر نمط الملفين من الفصل 0:

الملفالمحتوى
data.asmsection .data مع تعريفات بياناتك
main.asm%include "data.asm" متبوعًا بـ section .text مع تعليماتك البرمجية

ما يحدث عند تشغيل برنامجك:

  1. يحمّل نظام التشغيل برنامجك إلى الذاكرة
  2. يقرأ قسم .data ويضع بياناتك في عناوين ذاكرة محددة
  1. تصبح تسمياتك (age، price، name) عناوين
  2. يمكن لشفرتك الآن الوصول إلى هذه العناوين باستخدام [age]، [price]، [name]

قواعد مهمة:

القاعدةالشرح
احتفظ ببياناتك مجتمعةيمكنك فتح section .data أكثر من مرة (فالمُجمِّع يضم الأجزاء معًا)، لكن وجود قسم واحد في data.asm أسهل في القراءة
يجب أن تكون التسميات فريدةلا يمكنك استخدام تسميتين باسم age
تُنشأ البيانات قبل تشغيل التعليمات البرمجيةتكون جاهزة للاستخدام عند بدء _start

في الدروس التالية، ستتعلم كيفية تعريف أنواع مختلفة من البيانات باستخدام db وdw وdd وdq

challenge icon

التحدي

اكتب التعليمات البرمجية في الملف data.asm من أجل:

  1. إنشاء القسم .data
  2. إنشاء بايت باسم count وقيمته 5

جرّب بنفسك

%include "data.asm"

section .text
    global _start

_start:
    ; حمّل القيمة من count إلى al
    mov al, [count]
    
    ; احفظها لطباعتها
    mov r12, rax
    
    ; حوّلها إلى ASCII واطبعها (0-9 فقط)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; إنهاء البرنامج
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz iconاختبر نفسك

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

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

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