.model small .stack .data message db "Hello world, I'm learning Assembly !!!", "$" .code main proc mov ax,seg message mov ds,ax mov ah,09 lea dx,message int 21h mov ax,4c00h int 21h main endp end main
الأسطر التي تبدأ ب نقطة هذه تزود الأسمبلر ببعض المعلومات عل سبيل المثال
model small تخبر الأسمبلر أننا لا نريد برنامجاً كبيراً. أي لن يحتاج البرنامج إلى
الكثير من الذاكرة.
الكلمة التالية stack تخبر الأسمبر أن الستاك سيجمنت يبدأ من هنا . وهذا ال stack يستخدم لتخزين البيانات مؤقتاً . وهو لا يستخدم في البرنامج بل يجب أن نكتبه هناك.
لما ذا ؟ لأننا نريد تكوين برنامج تنفيذي والبرنامج التنفيذيثexe يجب ان يكون فيه stack.
أما ال data فيدل على أن ال data segment يبدأ من هنا وبطبيعة الحال ال stack segment ينتهي هنا.
code فتدل على أن الكود سيجمنت يبدأ هنا. وال data segment تنتهي هنا كالذي قبله
( الstack segment) .
main تدل على ال code يجب أن يكون في إجراء معين كغيرها من اللغات البرمجية مثل
السي .
اما ال endp فتدل أن الإجراء ينتهي هنا. ولإجراء يجب أن يكون له بداية main proc ونهاية
main endp . وال end main تخبر الأسمبلر أن البرنامج انتهى. وال message db فتعني
عرف البايت أو Define Byte . وهذه البايتات هي التي بين القوسين "XXX "
mov ax, seg message نستطيع ان نتعامل مع Seg message على انهه رقم معين حتى نجعله في ال data segment أو DS .
mov destination , source أي انقل البيانات من اليمين إلى اليسار.
lea dx, message يقوم بتحميل العنوان الفعال Load Efective Address . وهذا الأمر
يقوم بتخزين ال offset في( ال datasegment ) في مسجل DX .
int 21h وهذا امر مقاطعة interrupt وهو هنا خاص بالدوس. وهو له علاقة ب mov ah,09 أي أن البرنامج يستعد لطباعة نص في موجه الدوس.
mov ax, 4c00h . ينقل 4c00h إلى AX register او مسجل ال ax.
ax يحمل 4ch وهذا يعني لدوس انه البرنامج.
اما 00h فتعني بدون أخطاء. بالطبع البرنامج يقوم بطباعة Hello world, I'm learning Assembly !!!