مشاهدة النسخة كاملة : الدرس السابع : مكونات لغة الاسمبلى
ahmedeldeep 14-10-2006, 12:40 AM مكونات لغة الاسمبلى
تتكون لغة الاسمبلى من
1 Labels
2 Instructions
3 Operands
4 Directives
5 Comments
اولا :
1 Labels
وكما عرفنا سابقا انها عبارة عن نصوص تكون موجودة فى البرنامج للتوضيح او لتنفيذ البرامج الفرعية مثل GOTO ويجب ان تبدا بحرف او Underscore وطولها يصل الى 32 حرف ويجب ان تبدا من العمود الاول .
Instructions
وهى التعليمات وتكون معرفة من قبل الشركة المصنعة للميكرو وتسمى التعليمة فى لغات البرمجة بى syntax
Operands
وهى المعاملات التى تكون مع اى تعليمة وتكون غالبا مسجلات او متغيرات او ثوابت .
Comments
وهى كلام قام بكتابه المبرمج حتى يساعده فى تتبع الاخطاء فى البرنامج او حتى يكون من السهل على اى مبرمج أخر فهم طريقة عمل البرنامج المكتوب وتكون بعد التعليمة مباشرة ويجب ان تبدا بالعلامة الاتية ;
Directives
وهى تشبة التعليمات الى حد ما ولكن تعتمد على البرنامج نفسه وتوضح خصائص لغة الاسمبلى
مثلا LEVEL وعند كتابة هذه الكلمة يكون من المعروف ان تشير الى متغير موجود فى الذاكرة فى المكان الاتى 0Dh .
وفى الجزء الاتى نرى برنامج مع توضيح لكل جزء فيه
http://www.almohandes.org/vb/uploaded/micro/34.gif
ونلاحظ من البرنامج السابق انه يجب وضع ال directive بعد التعليق مباشرة
وال directive الموجود مهم جدا حتى تعجل الميكرو يعمل جيدا وهو يحتوى على نوع الميكرو ونوع المذبذب
واول سطر فى البرنامج مهم جدا لاننا يجب ان نقوم بتحديد عنوان معين يبدا منه الميكرو بالتنفيذ وهو org 0x00 وفى حالة حدوث ال interrupt يبدا الميكرو من org 0x04 وسوف نعرف لاحقا ما معنى interrupt
وتكون كلمة main هى البداية الحقيقية للبرنامج
اما بالنسبة لباقى التعليمات الموجودة فى البرنامج فاعتقد انها واضحه .
ahmedeldeep 14-10-2006, 12:42 AM Control directives
وهى
تحتوى على مجموعة من الاوامر او directives ومن امثلة ذلك
الامر
#DEFINE
ويستخدم فى تغيير مكان جزء من النص الى مكان اخر ويكون على الصيغة الاتية #define<text> [<another text>]
ومثال على ذلك :
#define turned_on 1 #define turned_off 0
وهذا معناه انه فى كل مرة تظهر
turned_on فى البرنامج ستتغير 1 وبالمثل فى turned_off ستتغير الى صفر
ahmedeldeep 14-10-2006, 12:43 AM 2- الامر
INCLUDE
ويستخدم فى ارفاق ملف اضافى ضمن البرنامج الموجود ويعتبر هذا الملف انه ضمن البرنامج الحالى ويتم تنفيذه على حسب مكان وجود الامر INCLUDE ويكون على الصورة الاتية
#include <file_name> #include "file_name"
وحالة الاقواس تستخدم عندما يكون الملف للنظام System file
اما فى حالة الاقتباس فان الملف يكون للمستخدم User file
أمثلة على الامر :
#include <regs.h> #include "subprog.asm"
ahmedeldeep 14-10-2006, 12:44 AM 3- الامر CONSTANT
وهو امر يقوم بتحديد قيمة عددية لاسم حرفى
وشكله كما فى الصورة الاتية
Constant <name>=<value>
ومن الامثلة على هذا الامر
Constant MAXIMUM=100
وهذا معناه انه فى كل مرة يتم ظهور كلمة MAXIMUMفى البرنامج سيتم استبدالها بالقيمة 100
ahmedeldeep 14-10-2006, 12:45 AM 4- الامر VARIABLE
وهو مثل الامر السابق حيث يقوم بوضع قيمة عددية لاسم حرفى وصورته كما يلى
Variable<name>=<value>
والفرق بينه وبين CONSTANT ان قيمته من الممكن ان تتغير اثناء البرنامج ومن الامثلة على هذا الامر
variable level=20
variable time=13
ahmedeldeep 14-10-2006, 12:46 AM 5- الامر SET
وهو مشابه ايضا للامران السابقان ولكن يستخدم فى تعريف متغيرات المترجم assembler
Defining assembler variable
و يكون شكله العام كما يلى :
<name_variable>set<value>
وهذا يعنى انه يقوم القيمة value فى المتغير name_variable
ومن الامثلة على استخدام الامر
length set 12
ahmedeldeep 14-10-2006, 12:47 AM 6- الامر EQU
ويستخدم فى تعريف ثوابت الاسمبلر
Defining assembler constant
ويكون على الصورة الاتية
<name_constant> equ <value>
ومثال على ذلك :
five equ 5
اى يقوم باضافة القيمة 5 الى الاسم five
ahmedeldeep 14-10-2006, 12:48 AM 7- الامر ORG
يقوم بتعرف العنوان الذى سيكون بداية لتخزين البرنامج فى ذاكرة الميكروكنترولر ويكون على الصورة الاتية
<label>org<value>
ومثال على هذا الامر
Start org 0×00
movlw 0xFF
movwf PORTB
اى يقوم الميكرو بتخزين التعليمتين ابتدا من العنوان 00
ahmedeldeep 14-10-2006, 12:48 AM 8- الامر END
ويكون على الصورة الاتية
end
وهذا الامر مهم جدا للدلالة على نهاية البرنامج
ahmedeldeep 14-10-2006, 12:49 AM Conditional instructions
التعليمات الشرطية
وهى تعليمات شائعة فى اغلب لغات البرمجة وتستخدم فى تحويل مسارات البرنامج
الامر IF
وصورته العامة كما يلى
if<conditional_term>
ومثال على ذلك :
if
level=100
goto FILL
else
goto
DISCHARGE
endif
وهذا معناه ان الميكرو يقوم باختبار الشرط level=100 فاذا كان صحيح فانه يقوم يقوم بالذهاب الى FILL واذا كان الشرط غير صحيح فانه يذهب الى DISCHARGE ثم يستكمل باقى البرنامج .
وقد لاحظنا استعمال الامر
ELSE
وهو كما عرفنا يستخدم كحل بديل اذا كان الشرط الموجود فى جملة IF غير صحيح
اما الامر
ENDIF
فانه يستخدم فى انهاء الفقرة الشرطية .
ahmedeldeep 14-10-2006, 12:51 AM الامر WHILE
وصورته العامة كما يلى
while<condition>
.
.
.
endw
وهنا يقوم الميكرو بتنفيذ التعليمات الموجود بين WHILE و endw طالما ان الشرط الموجود فى جملة WHILE متحقق واذا كان الشرط غير متحقق فان الميكرو يقوم بتنفيذ endw والخروج من جملة while
ويمكن ان تصل عدد تعليمات البرنامج الموجودة بين WHILE و endw الى 100 تعليمة مع 256 مره تنفيذ
مثال على ذلك فى البرنامج الاتى
While i<10
i=i+1
endw
ahmedeldeep 14-10-2006, 12:58 AM الامر IFDEF
وفائدة هذا الامر انه يقوم بتنفيذ مجموعة تعليمات البرنامج فى حالة اذا تم تعريف رمز معين باستخدام الامر DEFINE
وصورته العامة كما يلى :
ifdef<designation>
ومثال على الامر :
#define test
.
ifdef test ;هل تم تعريف الرمز test
......; سيتم تنفيذ هذه التعليمات اذا تم تعريف الرمز
endif
ahmedeldeep 14-10-2006, 01:00 AM الامر IFNDEF
وهو عكس الامر السابق ويقوم بتنفيذ مجموعة من تعليمات البرنامج فى حالة اذا لم يتم تعريف رمز معين
وصورته العامة كما يلى
ifndef<designation>
ويستخدم غالبا اذا كان الرمز غير معرف او تم مسح تعريفه بواسطة الامر
#UNDEFINE
وهو عكس الامر DEFINE ومثال على ذلك
#define test
..........
#undefine test ;لالغاء تعريف الرمز
..........
ifndef test ;هل الرمز غير معرف
..... .; هذه التعليمات سيتم تعريفها لان الرمز غير معرف
endif
ahmedeldeep 14-10-2006, 01:00 AM Data Directives
تعليمات البيانات
الامر CBLOCK
ويقوم بتعريف بلوك معين ليحتوى على مجموعة من الثوابت وصورته العامة كما يلى :
Cblock [<term>]
<label>[:<increment>], <label>[:<increment>]......
endc
وهذا الامر يقوم بوضع القيمة الموجودة فى العبارة term كقيمة ابتدائية الى اول ثابت label ويقوم بالزيادة بمقدار واحد للثابت الذى يليه مع اضافى قيمه الزيادة increment ان وجدت
وايضا القيمة الابتدائية ان لم تكن موجوده فيتم اعتبارها تساوى صفر
والمثال الاتى يوضح هذا :
Cblock 0x02
First, second, third ;first=0x02, second=0x03,third=0x04
endc
وهنا نلاحظ عدم وجود increment فتم اعتبارها تساوى واحد.
ونلاحظ فى هذا المثال وجود increment فلذلك تم اضافتها الى الثابت
cblock 0x02
first : 4, second : 2, third ;first=0x06, second=0x08,third=0x09
endc
الامر endc
ويستخدم فى انهاء بلوك تعريف الثوابت وموضحة فى الامثلة السابقة
ahmedeldeep 14-10-2006, 01:01 AM الامر DB
يستخدم فى تعريف بيانات بايت واحد
وصورته العامة كما يلى
[<label>]db <term> [, <term>,.....,<term>]
ووظيفته يقوم بحجز بايت فى ذاكرة البرنامج واذا كان الامر يحتوى على اكثر من متغير يتطلب لكل منها بايت خاص فان الميكرو يقوم بحجز البايت الاول ثم الذى يليه
والمثال الاتى يوضح هذا :
db 't', 0×0f, 'e', 's', 0×12
ahmedeldeep 14-10-2006, 01:01 AM الامر DE
وهو مشابه تماما للامر السابق ولكن يقوم بحجز البيت فى الذاكرة EEPROM وليس ذاكرة البرنامج وصورته العامة كما يلى :
[<term>] de <term> [, <term>,....., <term>]
ومثال على ذلك :
org H'2100'
de "Version 1.0" , 0
ahmedeldeep 14-10-2006, 01:02 AM الامر DT
وظيفة هذا الامر هى تعريف جدول بيانات وصورته العامة كما يلى :
[<label>] dt <term> [, <term>,........., <term>]
ومثال على ذلك :
dt "Message", 0
dt first, second, third
حيث يقوم بتوليد مجموعة من تعليمات RETLW لكل term
اذن المثال السابق يصبح كما يلى :
RETLW Message
RETLW 0
RETLW first
RETLW second
RETLW third
وهذا المثال يقوم بعمل جدول يحتوى على الثوابت الموجود امام RETLW والتى تكون مخزنه فى المسجل W
ahmedeldeep 14-10-2006, 01:03 AM Configurational directives
وهى الاوامر التعريفية للميكروكنترولر
ومن اهم هذه الاوامر الامر
_CONFIG
وصورته العامة كما يلى
_ _config<term> or_ _config<address>,<term>
ويكون كما فى المثال الاتى :
_CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
ويستخدم فى تعريف المذبذب وال Watchdog ودائرة الريسيت ويجب مراعاه تعريف نوع الميكروكنترولر المستخدم قبل استخدام هذ الامر
ahmedeldeep 14-10-2006, 01:03 AM الامر PROCESSOR
تستخدم فى تعريف نوع الميكرو المستخدم
وهو على الصورة الاتية :
Processor <microcontroller_type>
وبالنسبة للميكرو الخاص بنا يكون الامر كما يلى :
processor 16F84
ahmedeldeep 14-10-2006, 01:04 AM Assembler arithmetic operators
هى مجموعة من العلامات والرموز الخاصة التى يستخدم الاسمبلى
وهى موضحة فى الجدول الاتى مع استخدام كل منهما
http://www.almohandes.org/vb/uploaded/micro/35.gif
ahmedeldeep 14-10-2006, 01:04 AM الملفات المتكونة بعد عملية الترجمة
لبرنامج مكتوب بلغة الاسمبلى
هى :
Executing file (Program_Name.HEX)
Program errors file (Program_Name.ERR)
List file (Program_Name.LST)
الملف الاول يحتوى على البرنامج بعدما تم ترجمته حتى يكون مفهوم للميكروكنترولر ولا يمكن للمستخدم ان يفهم منه شى .
الملف الثانى يحتوى على الاخطاء المتولده اثناء عملية الترجمة .
الملف الثالث هو ملف مفيد جدا للمستخدم حيث يحتوى على معلومات عن البرنامج والتعليمات المستخدمة والمتغيرات وبيانات الذاكرة وايضا يحتوى على الاخطاء وهو مفيد جدا فى حالة البرامج الكبيرة والتى يصعب تتبعها أو التعديل فيها ويكون بمثابة فهرس للبرنامج
وفى الصورة الاتية نرى نموذج للملف List file
http://www.almohandes.org/vb/uploaded/micro/36.gif
رحال حول العالم 14-10-2006, 03:36 AM مشكوووووووووووووووور
رحال حول العالم 14-10-2006, 03:41 AM ارجو توفير نسخة من البرنامج الخاص بالبرمجة و المحاكاة ليتسنى للجميع كتابة الاكواد و عمل Compiling و كذا مراقبة النتيجة لتنفيذ هذه الاوامر
ahmedeldeep 14-10-2006, 03:51 AM ارجو توفير نسخة من البرنامج الخاص بالبرمجة و المحاكاة ليتسنى للجميع كتابة الاكواد و عمل Compiling و كذا مراقبة النتيجة لتنفيذ هذه الاوامر
نسخة البرنامج MPLAB موجودة فى المنتدى بالفعل
dr reda 15-10-2006, 01:29 PM بارك الله فيكم على هذا الجهد المتميز
برجاء كتابة الرابط الخاص بنسخة البرنامج Mplab حتى يتسنى لنا تحميلها
وجزاك الله كل الخير
رحال حول العالم 15-10-2006, 11:45 PM نسخة البرنامج MPLAB موجودة فى المنتدى بالفعل
شكراً جزيلاً على التنبيه و قد تم التحميل من الصفحة الحالية
http://www.almohandes.org/vb/showthread.php?t=3312&highlight=Mplab
عباس العراقي 20-10-2006, 05:38 PM شكرا اخي العزيز
على هذا المجهود ارائع
الآلوسي 22-10-2006, 05:02 PM هل من الممكن الشرح التفصيلي لعملية الدخول و تشغيل و استخدام برنامج Mplab
مع الشكر والتقدير على المجهود المضني من قبلك اخ احمد لاخراج هذه الدوره بهذا الشرح المبسط
علي الدين 23-10-2006, 02:03 PM كنت أراجع الدروس و أحاول عمل تطبيق عملى عندما فوجئت بتساؤل حيرني و أوقفني سأورده كما كتبته لحظتها :
يوجد لذاكرة البياناتDATA MEMORY بنكين : بنك صفر و بنك واحد و كل بنك منهما يحتوي على مجموعة من مسجلات الأغراض الخاصة SFRs يبلغ عددها 11 مسجلا لكل بنك و مساحة من الذاكرة الرام تبلغ مساحتها 68 بايت لكل بنك . كل هذا ورد في الداتا شيت ، و لكن الذي حيرني هو كالتالي :
يوجد بعض المسجلات مكررة في كلا البنكين ، و بالتحديد نجد :
المسجل INDIRECT ADDR. مكرر مرة بالبنك صفر بالعنوان 00h و مرة بالبنك واحد بالعنوان 80h .
المسجل PCL مكرر مرة بالبنك صفر بالعنوان 02h و مرة بالبنك واحد بالعنوان 82h .
المسجل STATUS مكرر مرة بالبنك صفر بالعنوان 03h و مرة بالبنك واحد بالعنوان 83h .
المسجل FSR مكرر مرة بالبنك صفر بالعنوان 04h و مرة بالبنك واحد بالعنوان 84h .
المسجل PCLATH مكرر مرة بالبنك صفر بالعنوان 0Ah و مرة بالبنك واحد بالعنوان 8Ah .
المسجل INTCON مكرر مرة بالبنك صفر بالعنوان 0Bh و مرة بالبنك واحد بالعنوان 8Bh .
إن أول ما نتعامل معه من المسجلات هو مسجل الحالة STATUS REGISTER الذي نختار عن طريق البت رقم 5 فيه توجيه تعاملنا إلى أحد البنكين ، فإذا وضعناها بصفر كان التعامل مع البنك صفر و إذا وضعناها بةاحد كان التعامل مع البنك واحد بينما في جميع الحالات نضع البتين رقم 6 و رقم 7 بصفر لأنها غير مستخدمة في الـ PIC 16F84A .
و هذا يعنى أن أمامنا مسجلا حالة و ليس واحدا فقط ، فمع أيهما نتعامل و في أية ظروف نتعامل مع كل منهما ؟
نفس الشيء بالنسبة للمسجلات المكررة التي جاء ذكرها : مع أيها نتعامل و متى . :sm168: :sm135:
:sm153:
عباس العراقي 27-10-2006, 05:53 PM لا عليك يا اخي
انا اتوقع واظن توقعي صحيح انه لا يوجد مسجلان بل مسجل واحد لكن له عنوانان كالبيت الذي له بابان فتستطيع الدخول من اي باب وكذلك المسجل تستطيع الوصول اليه من مكانين
علي الدين 29-10-2006, 05:43 AM شكرا يا أخي العزيز ... كلامك يبدو منطقيا ... فهل ينطبق هذا على الرام أيضا ؟
eng_hema 29-10-2006, 01:35 PM جزاكم الله خيرا يا باشمهندس وجعلك سببا فى رفعةى الامة
عباس العراقي 09-11-2006, 07:36 PM شكرا يا أخي العزيز ... كلامك يبدو منطقيا ... فهل ينطبق هذا على الرام أيضا ؟
اسف على التأخير في الرد اخي
ينطبق على المسجلات التي تحوي نفس الاسم
ibrahim_damt 12-01-2007, 12:31 AM بسم الله
انا احاول تعلم الميكروكنتروللر وهناك اشياء لا افهمها وارجو المساعدة
اولا كيف يتم الربط بين الدائرة الالكترونية والكمبيوتر
هل يتم عن طريق serialport or parallel port
وجدت عدد اطراف البورت اكثر من 9 اطراف فى مبرمج الميكروكنتروللر فكيف يتم ربطها بالسيريال بورت للكمبيوتر
هل هناك ترتيب معين وهل يجب ربط كل الاطراف بالكمبيوتر .
سؤال اخر
متى يتم تشغيل الدائرة الالكترونية هل عند عمل run للبرنامج ام ماذا
محمد البسيونى 06-03-2007, 05:40 AM جزاك الله خيرا أخى الكريم أحمد الديب وبارك الله فيك . ولو سمحت تنزل الشرح على ملف pdf
لأن كثير من الصور لا تظهر . ووفقنا الله وإياكم الى ما يحبه ويرضاه
ذياب خليل 23-03-2007, 10:43 AM شكرا يا "ذيب" البرمجة على هذه المعلومات الله يوفقك
eng_no1 26-03-2007, 08:58 PM اريد معرفة كيف يفكر الميكرو بداية من الدخل القادم من العالم الخارجة حتى يخرجة مرة اخرى الى العالم الخارجة بعد معالجتة
وجزاكم الله خيرا
عباده 29-03-2007, 09:06 PM بارك الله لك اخي الحبيب شرح وافي وماقصرت
|