قسم .data
جزء من قسم الأساسيات في رحلة Assembly على Coddy — الدرس 23 من 45.
في الفصل الثاني، قمت بتحميل قيم من الذاكرة وتخزين قيم في الذاكرة. ولكن من أين أتت تلك الذاكرة؟ من الذي أنشأ num1 و num2 و result؟
الإجابة هي قسم .data. هذا هو المكان الذي تنشئ فيه بياناتك الخاصة في الذاكرة.
ما هو قسم .data؟
قسم .data هو جزء من برنامج لغة التجميع (assembly) الخاص بك حيث تقوم بتعريف البيانات التي سيتم تخزينها في الذاكرة قبل تشغيل برنامجك.
الصيغة:
section .data
; تعريفات البيانات الخاصة بك توضع هنالماذا تحتاج إليها:
| بدون قسم .data | مع قسم .data |
|---|---|
| ليس لديك بيانات للعمل معها | يمكنك إنشاء أرقام، وسلاسل نصية، ومتغيرات |
| عناوين الذاكرة غير معروفة | يمكنك استخدام تسميات مثل myNumber أو message |
| لا يمكنك اختبار الكود الخاص بك | يمكنك تحميل وتخزين البيانات التي أنشأتها |
مثال بسيط:
section .data
age db 25 ; إنشاء بايت يسمى "age" بقيمة 25
price dw 1000 ; إنشاء كلمة (word) تسمى "price" بقيمة 1000
name db 'Bob' ; إنشاء سلسلة نصية تسمى "name" بالأحرف B، o، bأين يوضع في ملفاتك:
تذكر نمط الملفين من الفصل 0:
| الملف | المحتوى |
|---|---|
data.asm | section .data مع تعريفات البيانات الخاصة بك |
main.asm | %include "data.asm" متبوعاً بـ section .text مع الكود الخاص بك |
ماذا يحدث عندما يتم تشغيل برنامجك:
- يقوم نظام التشغيل بتحميل برنامجك في الذاكرة
- يقرأ قسم
.dataويضع بياناتك في عناوين ذاكرة محددة
- تصبح تسمياتك (
age،price،name) عناوين - يمكن لكودك الآن الوصول إلى هذه العناوين باستخدام
[age]،[price]،[name]
قواعد هامة:
| القاعدة | الشرح |
|---|---|
قسم .data واحد لكل برنامج | ضع كل بياناتك في مكان واحد |
| يجب أن تكون التسميات (Labels) فريدة | لا يمكنك الحصول على تسميتين باسم age |
| يتم إنشاء البيانات قبل تشغيل الكود الخاص بك | تكون جاهزة للاستخدام عندما يبدأ _start |
في الدروس القادمة، ستتعلم كيفية تعريف أنواع مختلفة من البيانات باستخدام db و dw و dd و dq
التحدي
اكتب الكود في ملف data.asm لـ:
- إنشاء قسم
.data - إنشاء بايت يسمى
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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2أنظمة العد
لماذا النظام الثنائي؟الأعداد الثنائيةمن العشري إلى الثنائيلماذا النظام الست عشري؟من الست عشري إلى العشريمن العشري إلى الست عشريASCII والست عشري5استدعاء النظام Exit Syscall
ما هو الـ Syscall؟استدعاء النظام Exit Syscall (60)رموز الخروج (Exit Codes)ملخص: الخروج النظيف (Clean Exit)