في برنامج تجميع اللغة الآلية هذا، يتم تضمين تعليمات تجميع لتحقيق وظيفة معينة. سأقوم بشرح البرنامج بشكل مفصل، مركزًا على التفاصيل التقنية والمعلومات المهمة.
يبدأ البرنامج بتعريف عناصر أساسية مثل الاسم (name
) والنموذج (model
) والذاكرة (stack
). يتم تحديد البيانات (data
) التي تحتوي على رسائل نصية تستخدم للتفاعل مع المستخدم وتخزين النتائج.
الشيفرة (code
) تبدأ باستعراض قيمة data segment
، ثم يتم استخدام تعليمات mov
لتحميل قيمة ax
بعنوان @data
وتحميل ds
بقيمة ax
. يتم استخدام lea
لتحميل عنوان سلسلة النص “Enter a number <5:" إلى dx
، ويتم استدعاء دالة الخدمة DOS برقم ah=9
لطباعة الرسالة.
ثم يتم استخدام دالة DOS لإدخال رقم من المستخدم (int 21h
، ah=1
) وتحويله من ASCII إلى رقم صحيح. بعد ذلك، يتم ضرب الرقم في 2 باستخدام التعليمات add
و sub
ويتم تحويل الناتج إلى ASCII مرة أخرى.
تتابع العملية بطباعة رسالة تعلم المستخدم بأن الرقم المدخل قد تم ضربه في 2، وأخيرًا يتم استخدام دالة DOS للخروج من البرنامج.
يُلاحظ أن هناك بعض الأخطاء في الشيفرة، على سبيل المثال move
يجب أن تكون mov
، وكذلك هناك خطأ في mo ax,4c00h
حيث يجب أن يكون mov ax,4c00h
. يجب تصحيح هذه الأخطاء لضمان تنفيذ البرنامج بشكل صحيح.
يمكن تحسين البرنامج أيضًا من خلال إضافة التحقق من أن الرقم المدخل أقل من 5 قبل ضربه في 2، وتحسين تعليمات التحويل بشكل أكثر فعالية.
المزيد من المعلومات
بالطبع، دعونا نستمر في تفحص البرنامج وتوضيح بعض النقاط الأخرى:
-
في قسم
.data
، تجد تعريفات للنصوص التي سيتم استخدامها في التفاعل مع المستخدم وعرض النتائج. على سبيل المثال:prompt
: يتم استخدامها لعرض رسالة تطلب من المستخدم إدخال رقم أقل من 5.msg
: يتم استخدامها لعرض رسالة تخبر المستخدم بناتج ضرب الرقم في 2.result
: يتم استخدامها لتخزين الناتج النهائي.
-
يتم استخدام التعليمة
mov ax, @data
لتحميل مسار البيانات إلى السجلax
، وبعد ذلك يتم نقل القيمة منax
إلىds
باستخدامmov ds, ax
. هذا يربط المؤشرds
بمنطقة البيانات. -
يتم استخدام
int 21h
معah=9
لطباعة النصوص. هنا يتم استخدامlea
لتحميل عنوان السلسلة إلىdx
، ثم يتم استدعاء دالة الخدمة لطباعة السلسلة حتى يتم الوصول إلى الرمز$
الذي يشير إلى نهاية السلسلة. -
بعد قراءة الرقم المدخل من المستخدم، يتم تحويله من ASCII إلى رقم صحيح. يتم ذلك عن طريق تقليل قيمة
30h
(ASCII للصفر) ثم إضافة الناتج مرتين باستخدامadd al, al
، وأخيرًا يتم إعادة تحويله إلى ASCII. -
يتم استخدام
int 21h
معah=9
مرة أخرى لطباعة رسالة “Double your number is:”، ثم يتم طباعة الناتج باستخدام نفس الدالة. -
أخيرًا، يتم استخدام
int 21h
معah=4Ch
لإنهاء البرنامج والعودة إلى نظام التشغيل.
البرنامج يبدو واضحًا في هدفه الرئيسي وهو ضرب الرقم المدخل من قبل المستخدم في 2، ولكن يمكن تحسينه وتبسيطه بإضافة بعض التحسينات والتعليقات التوضيحية لفهم أفضل.