البرمجة بلغة أسيمبلي (2) – سؤال وحله
In Tech on November 7, 2008 at 11:06 am
مرحباً اعزائي
يبدو انني ساتفرغ هذه الفترة لاكمال الجزء الثالث ان شاء الله من هذه الدروس، ونظراً لبعض الرسائل التشجيعية التي تصلني على بريدي ساواصل ان شاء الله في كتابة المزيد حتى ينتهي مخزوني.
اليوم وفي هذا الدرس سنقوم بحل السؤال البسيط التالي:
س1: قم بكتابة كود يعمل على اظهار علامة# Hash include
ملاحظة: فيديو يشرح طريقة الحل مدرج في نهاية التدوينة،متاح للتحميل ايضاَ.
الحل:
كود هذا التطبيق هو من اسهل ما يكون، ولكن قبل ان اقوم بالبداً بحل السؤال، ينبغي الاشارة الى بعض الامور الهامة التي تطبق وتكتب في اي برنامج بلغة الاسيمبلي:
اولاً: اي برنامج يكتب يجب ان يحتوي في المقدمة على الاسطر البرمجية التالية
.Model Small
.Stack 100h
.Code
Main PROC
يمكنني القول ان هذه الاسطر يجب ان تحفظ تماماً لانها ثابتة في اي برنامج آخر كما ستلاحظون في الدروس السابقة، الا ان هنالك بعض التطبيقات التي تحتوي على بيانات يجب ان يتم الاشارة اليها ضمن هذه الاسطر الاربعة لكي تصبح 5 سطور، لن استبق الاحداث من الآن، لاننا سناخذ تطبيقات كثيرة بهذا الخصوص.
السطر الثاني Stack 100h : الستاك هو المكان الذي سحتفظ فيه العمليات الحسابية لحين الانتهاء منها والحصول على الناتج النهائي منها حيث تنقل الى مكان آخر يسمي Register
فمثلاً: 5 + 4 *9 = ?
هذه العملية الحسابية ستبدأ بضرب الرقم 4 بالرقم 9 وناتج الضرب الذي يساوي 36 سيخزن في الستاك، ثم يتم اكمال العملية بجمع الناتج الاول وهو 36 الى 5 ليصبح الناتج 41 ، الان انتهت مهمة الستاك في حفظ الرقم ، وسيتم نقل الرقم الى Register معين آخر ليمكننا من التعامل مع اسم هذا الـ Register فيما بعد ضمن الكود.
ملاحظة: يلزمنا تذكر قوانين اولوية العمليات الحسابية وهي
الضرب ثم القسمة ثم الجمع ثم الطرح وآخر اثنين لا مشكلة في التعامل معهم.
نبدأ الآن بالكود
الكود الاول : وهو الكود الذي سنستخدمه في اظهار علامة الهاش انكلود
mov ah,2
mov dl,’#‘
int 21h
السطر الاول والثالث اجباري تماماً ولا يمكن التغيير فيه “لغاية الآن على الاقل”
والسطر الثاني DL منه اجبارية وهي Register لا يمكن تغييره مطلقاً في مثل هكذا عمليات اما علامة الهاش انكلود فالمنطق يقول انه يمكننا تغييرها بحسب الاشارة التي نريد اظهارها.
الان السؤال الذي يطرحه الجميع هو : ما هي mov?
mov في الاسيمبلي هي اختصار لكلمة Move المعروفة وهي هنا تعني : حرِّك
في انتل يكون التحريك بهذه الطريقة
mov R1,R2 ، حيث ار 1 و ار 2 افتراضيتان
قيمة او محتوى R2 سينتقل الى R1 لتصبح R1 تحمل قيمة او محتوى R2 ومن هنا نتوصل الى العلاقة التالية:
mov Destination, Source
حيث قيمة الـ Source ستخزن في الهدف Destination
وللمعلومة: في انظمة موتورولا يكون العكس اي mov Source, Destination
ولكن ليس باليد حيلة، هكذا تريدها انتل..ليس هذا موضوعنا
الآن فهمنا مضمون السطور الثلاثة المسؤولة عن اظهار اشارة # ، و الان انتهينا من تفعيل الكود ونريد الخروج منه الى الدوس Dos ليقوم بطباعة الامر، وللخروج الى الدوس يكون من خلال السطرين البرمجيين التاليين ( على القافية) :
mov ah,4ch
int 21h
وكما غيرهما هذين السطرين اجباريين في نهاية التطبيق ولا يمكن الاستغناء عنهما ابدا ابدا ابدا
ملاحظة بسيطة: 4ch وايضا 21h هي ارقام بنظام الهكساديسمال Hexadecimal او ما يسمى بالعربية بالنظام السادس عشر او بنظام العد السادس عشر.
الآن يجب ان نقوم بكتابة سطرين اخيرين ليس الا، لانهاء البرنامج وهما
Main EndP
End Main
نستنتج : السطور الاربعة الاولى والسطرين اللذان يقومان باخراجنا الى الدوس وايضا اخر سطرين لانهاء البرنامج هما ثابتين الى يوم القيامة، الا الاربع الاسطر الاولى كما اشرت فانها ثابتة ولكن في التطبيقات التي تحتوي على بيانات Data نقوم باضافة سطر اخر وربما سطرين وربما اكثر بحسب ما لدينا، هذا كله سنراه في امثلة قادمة ان شاء الله.
- انتهينا من كتابة البرنامج ونريد تطبيقه، وهي اسهل ما في الامر، ويتم ذلك كما يلي:
File > Save as
سيكون المسار الافتراضي للحفظ هو c:\tasm\BIN
لسهولة الوصول الى التطبيق كم بترك المسار كما هو ولكن قم بتسمية التطبيق باي اسم تختاره ولكن لا تنسى ان تكتب في نهاية الاسم .ASM
مثال: mb.ASM
ثم اضغط OK
تم حفظ التطبيق بسلام، الان نخرج من Tasm من ملف ثم خروج وبذلك نعود الى الدوس ونبقى في المسار
C:\tasm\BIN>
الان لعرض معلومات البرنامج للتاكد من خلوه من الاخطاء نكتب Tasm ثم اسم الملف متبوعاَ بـِ .ASM
tasm FileName.ASM
ليصبح الامر كتالي:
C:\tasm\BIN>tasm mb.ASM
ونضغط انتر، فتظهر لنا معلومات البرنامج
اهم ما نريده منها معرفة اين هي الاخطاء ان وجدت طبعا وف اي سطر، ان وجدت، عد الى الكود واذهب الى السطر المشار اليه وقم بتفقده تماماً
بعد ذلك، وان مرت الامور بسلام ان شاء الله تعالى يتبقى لنا استخراج البرنامج اي Execute ليصبح
.exe
وللقيام بذلك نكتب بعد الامتداد الذي سيظل ثابثاً C:\tasm\BIN> ما يلي
C:\tasm\BIN>Tlink mb
لاحظوا هنا انا صيغة الاستخراج هي Tlink FileName ولكن بدون .ASM
سيظهر لنا السطر التلقائي التالي:
Turbo Link Version 6.00 Copyright (c) 1992, 1993 Borland International
ربما تختلف الارقام بحسب نوع الاصدار ، ولكنها عموماً بهذه التركيبة
ظهور هذه الجملة تعني انه تم الاستخراج بنجاح ، وا تبقى الا البدأ بتنفيذ البرنامج على طول، وللتنفيذ نقوم بكتابة اسم التطبيق بعد صديقنا الجذر C:\tasm\BIN>
C:\tasm\BIN>mb (OR) mb.exe
اما mb او mb.exe بحسب الاسم ،، وسواء اضفت .exe او لم تضف فالنتيجة نفسها.
استمتع، ظهرت علامة #
بعض الملاحظات:
•لا فرق في كتابة الكود سواء بحروق كبيرة Capital Letters او بحروف صغيره Small Letters وما اكتبه انا انما هو نتيجة التعويد على شكل معين لكتابة الاوامر، في النهاية لا فرق ابدا.
•من الوهلة الاولى يبدو ان العملية صعبة وطويلة مملة، لكن انسخ هذه المقالة داخل ملف مفكرة، وقم بحذف ما كتبته انا، ستجد انها لا تزيد عن 10 اسطر فقط.
•حان وقت الاسترخاء، وتناول كوب قهوة
•نلتقي من جديد ان شاء الله في الاسبوع ما بعد المقبل نظراً لان الاسبوع الاقادم ستبدأ اختبارات الـ Firstلهذا الفصل
الفيديو – يجب ان يدعم متصفحك مشغل الفلاش