الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد مساعدتكم في تعلم برمجة المعالج ARM

مغلق
بدأه hatem في 21 سبتمبر 2005 · 0 رد · 2,139 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم

بينما أبحث في الإنترنات وجد في أحد المنتديات هذه الدروس الجيدة أو بالعبارة الأصح هذه المقدمة والتي تعلم برمجة المعالج ARM ولكن للأسف إنقطعت الدروس فأرجو منك جميعا وخاصة الذين لهم دراية بهذا المعاجوا أن يكملوا الدروس بهذه البساطة لتكون سهلة على الهواة أمثالي وجزاكم الله خيرا

وهذا ماعثرت عليه

------------------

السلام عليكم

لغة التجميع لغة قريبة للغة الالة و هي لغة ليست صعبة اذا كان لديك الاسس الصحيحة لتعلم هذه اللغة. اقصد يمكن لاي شخص الالمام بكيفة البرمجة بشكل عام. في الحقيقة برمجة المعالج بالاسمبلي تنشط في الوقت الحالي في معالجات RISC مثل معالج الARM فهذه المعالجات تسخدم حاليا في تطبيقات كثيرة مثل الموبايل و شبكات ATM و اجهزة الالعاب و غيرها كثير.

ما اريد قوله هل هناك من يرغب في تعلم برمجة هذا النوع من المعالجات. اذا كان هناك من يرغب سابدا في طرح الدروس .

لكم من كل التقدير

-------------------

السلام عليكم

في البداية اود ان اشكر كل المهتمين بتعلم هذه اللغة و اتمنى ان اوصل المعلومة بشكل جيد. لنبدأ الدرس الاول.

1- من المهم جدا ان تكون لديك فكرة عن تصميم الدوائر المنطقية و الانظمة العددية.

ما معنى التعليمة:

هي سلسلة من الاعداد الثنائية (0 1) و قد تكون با طوال مختلفة حسب نوع المعالج و هذه السلسلة الرقمية قد تبدو في احيان كثيرة غير مفهومه للانسان و ينتج عنها تنفيذ فعل ما كجمع رقمين او طرح رقمين في دورة زمنية.

لتوضيح ذلك لناخذ مثلا بسيط جدا :

لو كان لدينا دارة منطقية معينة متكونة من ثلاث مداخل سيكون لدينا ثمانية حالات مختلفة او ثمانية اوامر كالاتي:

الحالات ======= الرقم بالنظام العشري===الرقم بالنظام الثنائي== معنى التعليمة

الحالة الاولى ====== 0 =============== 0 0 0 ========= شغل الدايود الاول

الحالة الثانية====== 1=============== 1 0 0 ========= شغل الدايود الثاني

الحالة الثالثة====== 2 =============== 0 1 0 ========= شغل الدايود الثالث

الحالة الرابعة ====== 3=============== 1 1 0 ========= شغل الدايود الرابع

الحالة الخامسة====== 4 =============== 0 0 1 ======== شغل الدايود الخامس

الحالة السادسة====== 5 =============== 1 0 1 ====== شغل الدايود السادس

الحالة السابعة ====== 6 =============== 0 1 1======== شغل الدايود السابع

الحالة الثامنة====== 7 =============== 1 1 1========= شغل الدايود الثامن

من الجدول السابق نلاحظ ان لدينا ثمانية تعليمات لكنها كلها بلغة الارقام الثانئية. بالنسبة للمستخدم يستطيع فهم تعليمة شغل الدايود الاول و لكن من الصعب فهم تعليمة 000. هذا تقريبا وصف لما يحدث حقيقة في البرمجة. فلغة الارقام هي اللغة التي تفهمها الالة و لذلك تسمى لغة الالة او تعليمات لعة الالة ام اللغة التي يتستطيع الانسان فهمها في لغة عالية المستوى لكن لا تفهمها الالة.

نحن حقيقة بصدد دراسة معالج له اوامر بطول 32 بت { بت هي 0 او 1}. نعم هناك معالجات بطول 16 بت مثل معالج انتل 86 و لكن نحن بصدد دراسة معالجات حديثة. اذا كان هناك صعوبة في فهم هذه اللغة او هناك مقترحات با عطاء دروس لمعالجات بطول 16 بت انا حاضر و يمكن تاجيل دراسة هذا المعالج لفترة لاعطاء نبذة عن المعالجات ذات طول 16 بت.

بما اننا سندرس تعلميات بطول 32 بت فلك ان تتخيل صعوبة فهم لغة الالة اي ان الامر مكون من 32 رقم {0 او 1} و فيما يلي مثال لبعض التعليمات و هي تعليمات حقيقية للمعالج ارم. ليس المطلوب ان تفهم التعليمة لكن فقط هي مثال لتوضيح صعوبة فهم لغة الالة.

1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0 0 0 1 1 1

معنى هذه التعليمة

اطرح محتوى المسجل R15 من R14 و خزن الناتج في المسجل R12 .

و بما ان برنامج الحاسوب هو مجموعة من الاوامر و التي تقوم بتنفيذ عمل او مهمة معينة فلك ان تتخيل ان يكون لديك مجموعة من التعليمات مثل التعليمة السابقة.

ما اود ان اوضحه من كل ما قلت سابقا انه من الصعوبة بمكان البرمجة من خلال لغة الارقام. { ليس مستحيلا لكن صعب و ممل} للاسباب التالية:

1- البرنامج المكتوب بلغة الارقام{الالة} صعب الفهم او التتبع.

2- البرنامج صعب الكتابة و من السهل حدوث اخطاء اثناء الكتابة.

يمكن باستخدام نظام الاعداد hex جعل التعليمات اكثر وضوح. مثلا اذا اردنا كتابة برنامج لجمع عددين مخزنين في الذاكرة و هذا الرنامج حقيقي ويمكن للمعالج ارم فهمه. انت غير مطلوب منك حاليا فهمه لكن هنا فقط لتوضيح الفكرة فقط.

E59F1010

E59F0008

E0815000

E58F5008

يمكن ان نلاحظ ان البرنامج السابق افضل من كتابته بالنظام الثانئي. لكي تتاكد حول البرنامج الى لغة الالة. يعني استخدام نظام HEX سمح لنا بتشفير النظام و جعله اكثر وضوح.

ارجو ان لا يفهم من كلامي عن صعوبة البرمجة بلغة الالة ان دراسة لغة التجميع صعبة ما قصدته لماذا لا نستخدم لغة الالة او بمعنى اخر لماذا نستخدم لغة التجميع و لا نستخدم لغة الالة. سيكون كلامي اكثر و ضوح مع تقدمنا خلال هذه اللغة البسيطة.

الدرس القادم سنبدا بدراسة معمارية المعالج ARM .

--------------------------

السلام عليكم

نبدأ درسنا الثاني بتعريفات بسيطة للتذكير فقط:

1- المايكروبروسسور Microprocesor

هو وحدة المعالجة المركزية CUP موضوعة على شريحة واحدة.

2- المايكروكمبيوتر Microcomputer

يحتوي على مايكروبروسسور + وحدة ذاكرة + وحدة لربط الدوائر+ وحدة تحكم و توقيت + مصدر جهد.

اي ان المايكروبروسسور هو جزء من المايكروكمبيوتر.

3- المايكروكنترولر Microcontroller

يمكن تعريف المايكروكنترولر بانه كمبيوتر كامل مرسوم على شريحة واحدة و التي تمبرمج لكي تقوم بانجاز عمليات تحكم مختلفة .

و نظرا لصغر حجم هذه المتحكمات و قلة استهلاكها للطاقة فانها اصبحت الاختيار الطبيعي للكثير من التطبيقات الحديثة و طبعا تستخدم معالجات ARM او اي معالجات من نوع RISC في تصميم هذا النوع من المتحكمات .

من هو الذي يهتم بدراسة لغة الاسمبلي ؟

ان الذي يهتم بدراسة الاسمبلي هو الشخص المهتم بكتابة كود للكمبايلر او شخص يقوم بتصميم متحكم لشبكات الحاسوب او مصمم يقوم بكتابة كود لمتحكم لمجموعة من للالات.... الخ . أي انه شخص يهتم بان يكون قريب للالة.

نبدأ الان بدراسة معمارية المعالج ARM

يحتوي المعالج ARM على 16 مسجل كل مسجل بطول 32 بت و لها ارقام مرجعية من r0 الى r15 . و سنتعرف مرحليا على وظائف هذه المسجلات. و اما الناحية البرمجية فكل مسجل له اسم حسب التالي الجدول التالي. اي في البرمجة نستخدم اسماء المسجلات الموضحة في في الجدول التالي:

Register name :اسم المسجل Register no رقم المسجل

r0==================== a1

r1==================== a2

r2==================== a3

r3==================== a4

r4==================== v1

r5==================== v2

r6==================== v3

r7==================== v4

r8==================== v5

r9==================== v6

r10==================== v7

r11==================== v8

r12==================== ip

r13==================== sp

r14==================== lr

r15==================== pc

التعليمات العامة للمعالج:

1- يمكن ان ننسخ البيانات بين المسجلات باستخدام الامر MOV

مثال:

MOV v1, v2

هذا الامر يعني انسخ محتويات المسجل v2 الى المسجل v1

بمعنى اخر v1=v2

2- باستخدام هذا الامر ممكن ان نكتب ايضا امر لا تعمل شيئا كالاتي NOP

MOV v1,v1

الامر السابق لايقوم باي وظيفة الا التاخير الزمني اي انه يقوم بنسخ محتويات المسجل v1 في نفس المسجل.

3- يمكن ان نجمع محتويات مسجلين بالامر add

مثال:

Add v1,v2,v3

معنى الامر السابق ان يتم جمع محتويات المسجلين v2 و v3 و يخزن الناتج في المسجل v1 . لا تتاثر محتويات المسجلين v3 و v2 لكن المسجل v1 هو الذي ستتغير قيمتة الى ناتج جمع كلا المسجلين.

يمكن جمع محتوى مسجل مع قيمة تعطى مباشرة اي قيمة غير مخزنة في اي مسجل

مثال:

add a1,v1,#6

معنى الامر السابق هو جمع محتوى المسجل v1 مع رقم 6 و يخزن الناتج في المسجل a1 .

يمكن استخدام هذا الامر ايضا في نسخ البيانات بين مسجلين.

مثال:

add a1,v1,#0

معنى الامر هو جمع محتوى المسجل v1 مع الرقم صفر و تخزين الناتج في المسجل a1 . اي انه تم نسخ محتوى المسجل v1 الى المسجل a1 .

4- يمكن طرح محتويات مسجلين باستخدام الامر sub

مثال:

sub v4,v5,v6

معنى الامر السابق ان يتم طرح محتوى المسجل v6 من محتوى المسجل v5 و يتم تخزين الناتج في المسجل v4.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…