لغة التجميع: الفرق بين النسختين
[مراجعة غير مفحوصة] | [مراجعة غير مفحوصة] |
تم حذف المحتوى تمت إضافة المحتوى
Ghaderkurdi (نقاش | مساهمات) لا ملخص تعديل وسوم: تمت إضافة وسم nowiki تعديلات طويلة تحرير مرئي |
Ghaderkurdi (نقاش | مساهمات) لا ملخص تعديل وسمان: تعديلات طويلة تحرير مرئي |
||
سطر 54:
عادة ما يقوم أي مجمع حديث بتكوين كود غرضي/نهائى Object Code عبر ترجمة تعليمات لغة التجميع إلى شفرة تشغيل Opcode) Operation Code)، وعبر تحليل الأسماء الرمزية لمواقع تخزين البيانات بالذاكرة Memory Locations وغيرها من الكيانات. ويعتبر استخدام "الإشارات الرمزية" Symbolic References سمة أساسية من سمات المجمعات، حيث يتم حفظ حسابات طويلة ومملة، وتحديث عناوين الذاكرة بعد تعديلات البرنامج. وتحتوي معظم المجمعات على تسهيلات Facilities من نواع "ماكرو" Macro تقوم بعمليات "استبدال النصوص" Textual Substitution. على سبيل المثال، لتوليد متواليات قصيرة من التعليمات تعمل Inline بدلا من أن تعمل في [[دالة (برمجة)|دالة]].
وبصفة عامة، فإن كتابة المجمعات -لأن المجمع أساسا عبارة عن [[برنامج (حاسوب)|برنامج]] يتم كتابته- أسهل من كتابة [[محول برمجي|مترجمات]] اللغات عالية
وهناك نوعين من المُجمعات، وتم تقسيم النوعين على أساس عدد مرات المرور Passes خلال الكود المطلوب لإنتاج الكود النهائي، أو البرنامج القابل للتنفيذ Executable بمعنى آخر.
سطر 60:
* يعرف النوع الأول بالمجمع ذو المرور الواحد، وهو المجمع الذي يمر على الكود مرة واحدة فقط، مفترضا أن تعريف كل رموز الكود (مثل أسماء المتغيرات) سبق أي تعليمات قد تشير لهذه الرموز.
* يعرف النوع الثاني بالمجمع متعدد المرور، وهو المجمع الذي يمر مرتين -أو أكثر من مرة- على الكود، ويقوم أثناء المرور الأول بتكوين جدول يضع فيه كل الرموز التي لم يتعرف عليها Unresolved، ويستخدم تلك الرموز في المرور الثاني كي يقوم بحل تلك العناوين Addresses.
أما ميزة المجمع ذو النوع الأول "مرور واحد" فهي
أما المجمعات عالية المستوى وذات الإمكانيات الأكثر تعقيدا، فتوفر تجريدا أكثر للغة Abstraction، يمكن توضيحه فيما يلي:
سطر 74:
=== لغة التجميع ===
ويتكون البرنامج المكتوب بلغة التجميع من سلسلة من [[مجموعة التعليمات|التعليمات]] -سهلة الحفظ Mnemonics والتي تماثل دفعة من التعليمات التنفيذية Executable، وعندما يتم ترجمة هذا الكود عبر المجمع، يمكن
وعلى سبيل المثال، فإن
</syntaxhighlight>يمكن جعل كود الكمبيوتر الثنائي السابق أكثر قابلية للقراءة من خلال التعبير عنه [[نظام عد ستة عشري|بالنظام الست عشري]] على النحو التالي.<syntaxhighlight>B0 61
</syntaxhighlight>
سطر 93:
MOV [ESI+EAX], CL ; Move the contents of CL into the byte at address ESI+EAX
MOV DS, DX ; Move the contents of DX into segment register DS</syntaxhighlight>
ويتم تحويل لغة التجميع إلى [[لغة الآلة]] عبر المجمع، وتتم العملية العكسية عبر برنامج يدعى "
غني عن الذكر، أن كل بناء حاسوبي وكل معالج له لغة الآلة الخاصة به. وعلى هذا المستوى، تكون كل تعليمة Instruction ممثلة بشكل بسيط بحيث يتم تنفيذها من خلال عدد صغير نسبيا من الدوائر الإلكترونية Electronic Circuits. وتختلف أجهزة الكمبيوتر باختلاف نوع وعدد العمليات التي تدعمها. على سبيل المثال، فإن آلة جديده من نوع 64 بت تتكون من نوع مختلف من الدوائر التي تمتلكها آلة من نوع 32 بت. وقد يختلفان أيضا في أحجام وأعداد [[سجل المعالج|المسجلات]] في كل منهما، وقد يختلفان أيضا في تمثيل البيانات داخل مخازن البيانات -المخازن مثل: الذاكرة Memory، المسجلات Registers-. وفي حين أن معظم أجهزة الكمبيوتر التي تستخدم في الأغراض العامة قادرة على تنفيذ نفس الوظائف، فإن طريقة أداء كل جهاز تختلف عن بقية الأجهزة؛ وتعكس لغات التجميع الخاصة بكل منهم هذا الاختلاف.
سطر 123:
وتوفر معظم المجمعات إدارة مرنة للرموز، بحيث تتيح للمبرمجين: إدارة مساحات إسمية مختلفة Namespaces، حساب [[حيد (حاسوب)|الإزاحات]] بشكل آلي داخل هياكل البيانات Data Structures، وتحديد تسميات/علامات Labels تشير إلى قيم حرفية أو إلى ناتج حسابات بسيطة تؤدى عبر المجمع.وتستخدم التسميات/العلامات Labels أيضا لتهيئة الثوابت Constants [[متغير (علم الحاسوب)|والمتغيرات]] مع عناوين قابلة للإعادة التعيين Relocatable Addresses.
ومثلها مثل معظم [[لغة برمجة|لغات
ويمكن لحسن استخدام تلك التسهيلات Facilities أن يبسط جدا من مشكلات عمليات التكويد والصيانة الخاصة بكود اللغات منخضفة المستوى
=== وحدات الماكرو ===
سطر 154:
ولتجنب هذا الأمر، تعلم مستخدمو "معالجة الماكرو" أن يقوموا بحصر المعاملات داخل تعريفات الماكرو Macro Definitions، ثم يكون على المناديين Callers أن يفعلوا المثل مع معاملاتهم "الحقيقية" Actual Parameters.
وقد قدمت لغات الـ PL/I و<nowiki/>[[سي (لغة برمجة)|C]] ميزة الماكرو، لكن
=== دعم البرمجة المهيكلة ===
قامت بعض المجمعات بإدماج عناصر [[برمجة مهيكلة|البرمجة المهيكلة]] من أجل تكويد Encode تدفق التنفيذ Execution Flow. وأقرب مثال لهذا النهج كانت مجموعة ماكرو المسماة Concept-14, والتي اقترحت لأول مرة عن طريق الدكتور هـ.د.ميلز(مارس 1970), وتم تنفيذها عبر مارفين كيسلر في قسم الأنظمة الفيدرالية بـ [[آي بي إم]]، والتي مددت إمكانيات مجمع الماكرو من نوع S/360 بـ IF/ELSE/ENDIF وبلوكات أخرى للتحكم في التدفق Flow Control.وقد كانت تلك طريقة لخفض أو إزالة استخدام عمليات GOTO في كود التجميع، حيث أن عمليات الـ GOTO من العوامل الرئيسية التي تسبب في ما يسمى بـ "كود الإسباجتي" -الكود المتشابك والمتعقد- في لغة التجميع. وقد كانت هذه الطريقة مستخدمة ومقبولة على نطاق واسع في أوائل الثمانينات (والتي شكلت الأيام الأخيرة لاستخدام لغة التجميع على نطاق واسع، لم يعد الأمر كذلك الآن).
وقد تم تقديم تصميم غريب سمى A-Natural، وهو عبارة عن مجمع من نوع Stream-Oriented يعمل مع معالجات 8080/Z80 وصممته شركة Whitesmiths Ltd. (تلك الشركة التي طورت نظام التشغيل الشبيهة بيونيكس والمسمى Idris، والذي وصف بأنه أول مترجم تجاري للغة السي C). وقد صنفت اللغة كمجمع، لأنها كانت تعمل مع عناصر الماكينة "الخام" Machine Elements مثل كود التنفيذ Opcodes، المسجلات Registers، ومراجع الذاكرة References؛ ولكنها أدرجت جملا تعبيرية Expression Syntax للإشارة إلى ترتيب التنفيذ. وقد قامت: الأقواس Parentheses، والرموز الخاصة الأخرى، بجانب الـ Constructs الخاصة بالبرمجة المهيكلة المعتمدة على بلوكات Blocks، قام كل ذلك بالتحكم في تتابع توليد التعليمات Instructions.وقد تم بناء لغة A-Natural لتصبح [[محول برمجي|مترجما]] خاص بلغة الـ C، أكثر من بنائها لكي يتم استخدامها في البرمجة اليدوية، لكن جملها المنطقية Syntax أعجبت العديد من المبرمجين الذين عملوا بها وكتبوا بها برامج بالفعل.
سطر 173:
وفي اطار تجاري أكثر، فإن الأسباب الرئيسية لاستخدام لغة التجميع كانت: حجم Size أقل، مشكلات Overhead أقل، سرعة أعلى واعتمادية Reliability أعلى.
وكأمثلة نموذجية لبرامج كبرى كتبت بلغة التجميع في ذاك الوقت، تجد نظام التشغيل [[دوس (نظام تشغيل)|مايكروسوفت دوس]]، وبرنامج آي بي إم لمعالجة الجداول [[لوتس 1-2-3]], وكذلك معظم الألعاب الشهيرة لعائلة
وقد تم كتابة المجمع VIC-20 عبر "دون فرينش" ونشرته شركة "فرينش سيلك".وقد تم كتابته في برنامج يبلغ من الحجم 1639 بايت فقط، مما يجعل صاحبه يعتقد أنه أصغر مجمع رمزي تم كتابته في التاريخ. ويدعم المجمع نظم العنونة الرمزية والتعريفات الخاصة بسلاسل الحروف وسلاسل الرموز ذات النظام الـ<nowiki/>[[نظام عد ستة عشري|ست عشري]]. ويسمح المجمع أيضا بتعيرات العناوين Address Expressions والتي يمكن توحيدها Combined مع عمليات: [[جمع|الجمع]]، [[طرح|الطرح]]، [[ضرب|الضرب]]، [[قسمة (رياضيات)|القسمة]]، Logical AND, Logical OR والمعاملات الأسية Exponentiation Operators.
سطر 188:
* في حالة وجود نظام ذو قيود شديدة على الموارد Resource Constraints (مثال: [[نظام مضمن|الأنظمة المضمنة]])، لذلك وجب استخدام كود مكتوب يدويا لتحقيق الاستفادة القصوى من الموارد المحدودة، ولكن ذلك يصبح أقل شيوعا مع انخفاض أسعار المعالجات وتحسن مستوى الأداء/السرعة.
* في حالة عدم وجود لغة عالية المستوى -على سبيل المثال: على معالج Processor خاص أو جديد-.
* في كتابة برمجيات من نوع "الزمن الحقيقي" Real-Time والتي تحتاج توقيتا دقيقا واستجابات دقيقة Responses، مثل برامج
* في حالة الحاجة إلى تحكم كامل في البيئة المحيطة Environment، في المواقف التي تتطلب اجراءات أمنية مشددة حيث لا يمكن أخذ أمر على أنه مفروغا منه Taken for Granted.
* لكتابة [[فيروس الحاسوب|فيروسات الحاسوب]]، برامج من نوع Bootloaders، مشغلات لأجهزة بعينها، أو لأشياء أخرى تعمل بشكل قريب من [[عتاد الحاسوب|العتاد]] أو من [[نظام تشغيل]] مكتوب بلغة منخفضة المستوى.
سطر 213:
:
::ملاحظة: إطلاق اسم "مجمع"
* عند عمل المجمع، فإن الخطوة الحسابية التي يقوم بها، والتي تتضمن كل عمليات معالجة الماكرو، تسمى بـ "وقت التجميع" Assembly Time.
سطر 328:
* [[محول برمجي]]
* [[المفكك|مفكك]]
* [[كمبيوتر الرجل الصغير]]- عبارة عن نموذج لحاسب تعليمي مزود بلغة تجميع ذات قاعدة عشرية Base-10.
* [[المجمع الدقيق]]
|