لغة التجميع: الفرق بين النسختين
[مراجعة غير مفحوصة] | [نسخة منشورة] |
تم حذف المحتوى تمت إضافة المحتوى
Ghaderkurdi (نقاش | مساهمات) تنقيح اللغة وسوم: تمت إضافة وسم nowiki تعديلات طويلة تحرير مرئي |
Ghaderkurdi (نقاش | مساهمات) تنسيق وتنقيح لغوي وسمان: تعديلات طويلة تحرير مرئي |
||
سطر 153:
=== دعم البرمجة المهيكلة ===
قامت بعض المُجمعات بإدماج عناصر [[برمجة مهيكلة|البرمجة المهيكلة]] من أجل تكويد Encode تدفق التنفيذ
وقد تم تقديم تصميم غريب سمى A-Natural، وهو عبارة عن مجمع من نوع Stream-Oriented يعمل مع معالجات 8080/Z80 وصممته شركة Whitesmiths Ltd. (تلك الشركة التي طورت نظام التشغيل الشبيهة بيونيكس والمسمى Idris، والذي وصف بأنه أول مترجم تجاري للغة السي C). وقد صنفت اللغة كمجمع، لأنها كانت تعمل مع عناصر الماكينة "الخام" Machine Elements مثل كود التنفيذ Opcodes،
وقد ظهرت الحاجة والطلب إلى مترجمات أكثر تعقيدا بعد أن انحدر تطوير البرمجيات باستخدام لغات التجميع على نطاق واسع. وعلى الرغم من ذلك، فإن تلك المُجمعات لا تزال تستخدم في بعض الحالات، والتي تحوي قيودا مفروضة على الموارد -وقت، نفقات..الخ- أو أن الخصوصيات Peculiarities المتعلقة بهندسة النظام -الخاص بالتطبيق الجاري تطويره- تمنع الاستخدام الكفؤ للغات البرمجة عالية المستوى.
سطر 247:
* عند الحاجة لبرنامج تنفيذي ثنائي Binary قائم بذاته Stand-Alone، بمعنى: برنامج يجب أن يتم تنفيذه بدون اللجوء إلى مكونات Components أو [[مكتبة برمجية|مكتبات]] مرتبطة بلغة برمجة عالية المستوى أثناء [[وقت التنفيذ]]؛ وربما يكون هذا الوضع هو الأكثر شيوعا.وهذه أنواع مدمجة Embedded من البرامج، والتي تقوم بتخزين جزء صغير فقط من الذاكرة ويقوم الجهاز Device بتنفيذ مهام ذات غرض واحد Single Purpose. من تلك الأمثلة، تجد: الهواتف، أنظمة الوقود/إشعال الوقود في السيارات، أنظمة التحكم في تكييف الهواء، أنظمة الأمن وأجهزة الاستشعار.
* التفاعل المباشر مع العتاد، وعلى سبيل المثال في مشغلات الأجهزة Drivers ومعالجات الاعتراضات Interrupt Handlers.
* استخدام تعليمات خاصة بالمعالج Processor-Specific، غير متوفرة للمترجم Compiler.ومن الأمثلة الشائعة على ذلك، تعليمة الدوران في اتجاه البت Bitwise Rotation، والتي تستخدم في العديد من خوارزميات التشفير
* عند الحاجة لتحسين شديد Extreme Optimization، ومثال على ذلك: في دوارة داخلية Inner Loop في خوارزمية تستهلك المعالج بشكل كثيف. ويستفيد مبرمجو الألعاب من الإمكانيات الخاصة بخصائص [[عتاد الحاسوب|العتاد]] في تلك الأنظمة، مما يمكن ألعابهم لتعمل بشكل أسرع.
* في حالة وجود نظام ذو قيود شديدة على الموارد Resource Constraints (مثال: [[نظام مضمن|الأنظمة المضمنة]])، لذلك وجب استخدام كود مكتوب يدويا لتحقيق الاستفادة القصوى من الموارد المحدودة، ولكن ذلك يصبح أقل شيوعا مع انخفاض أسعار المعالجات وتحسن مستوى الأداء/السرعة.
* في حالة عدم وجود لغة عالية المستوى -على سبيل المثال: على معالج
* في كتابة برمجيات من نوع "الزمن الحقيقي" Real-Time والتي تحتاج توقيتا دقيقا واستجابات دقيقة Responses، مثل برامج [[محاكاة بالحاسوب|المحاكاة]]، نظم الملاحة الجوية والمعدات الطبية. وعلى سبيل المثال، في نظام التحكم في الطيران من نوع Fly-by-Wire، يجب ترجمة القياس عن بعد Telemetry واتخاذ إجراءات على أساس هذا القياس في ظل قيود زمنية صارمة -في أجزاء ضئيلة جدا من الوحدات الزمنية-. ويجب على تلك الأنظمة أن تتخلص من أي تأخيرات لا يمكن التنبؤ بها والتي قد تنشأ عبر لغات البرمجة المترجمة Interpreted، أو عبر الجمع الآلي للقمامة Garbage Collection، عمليات الـ Paging، أو تعدد المهام بشكل وقائي Preemptive Multitasking. وعلى الرغم من ذلك، فإن بعض لغات البرمجة عالية المستوى تقوم بإدماج مكونات من نوع Run-Time وإدماج واجهات لنظم التشغيل OS Interfaces والتي يمكنها أن تسبب مثل هذا التأخير. وهنا يعتبر اختيار لغة التجميع أو أي لغة منخفضة المستوى Lower-Level اختيارا جيدا مما يعطي المبرمج وضوح Visibility أكبر وسيطرة أفضل على تفاصيل المعالجة Processing.
* في حالة الحاجة إلى تحكم كامل في البيئة المحيطة Environment، في المواقف التي تتطلب اجراءات أمنية مشددة حيث لا يمكن أخذ أمر على أنه مفروغا منه Taken for Granted.
سطر 267:
وتقوم معظم [[محول برمجي|المترجمات]] بمعالجة لغات عالية المستوى إلى لغة تجميع أولا قبل الترجمة النهائية، وبذلك تتيح لكود التجميع التعرض لعمليات [[تصحيح برمجي|التصحيح]] والتحسين Optimization. وتوفر لغات البرمجة منخفضة المستوى نسبيا، مثل لغة السي C، بناء لغويا خاصا [[نحو (برمجة)|(تركيب نحوي)]] لدمج الكود المكتوب بلغة التجميع مباشرة في كود المصدر الخاص بها. ويمكن للبرامج التي تستخدم مثل هذه التسيهلات، كـ [[نواة لينكس]] على سبيل المثال، أن تبني تجريديات Abstractions عبر استخدام عدة لغات تجميع على كل منصة عتادة مختلفة Hardware Platform.ويمكن للكود النقال Portable الخاص بالنظام أن يستخدم المكونات الخاصة بكل معالج -للعمل مع مختلف المنصات- خلال [[واجهة (حوسبة)|واجهة]] موحدة.
وتعد لغة التجميع شيئا ذي قيمة كبيرة مع "الهندسة العكسية"، لأن العديد من البرامج يتم تداولها في صيغة
هناك أيضا [[دموسين|الدموسين]] والذي يجعل من استخدام لغة التجميع حقلا فريدا له. فهناك العديد من المسابقات الخاصة التي تقيد المتسابقين بتقييد إبداعاتهم -من البرامج- إلى حجم صغير جدا (أمثلة: 256 بايت, 1 كيلو بايت, 4 كيلو بايت أو 64 كيلو بايت)، وبالطبع فإن لغة التجميع هي أمثل حل لتحقيق هذا الهدف. وعندما يكون الحفاظ على
== المصطلحات ذات الصلة ==
سطر 279:
* عند عمل المُجمع، فإن الخطوة الحسابية التي يقوم بها، والتي تتضمن كل عمليات معالجة الماكرو، تسمى بـ "وقت التجميع" Assembly Time.
* يرجع المسمى "تجميع"
* المُجمع العابر Cross Assembler (انظر المترجم العابر Cross Compiler) تشبه وظيفته وظيفة المُجمع. لكن تم إطلاق هذا المصطلح عليه، للإشارة أن المُجمع يعمل على جهاز كمبيوتر مختلف، عن ذلك الذي سيتم تنفيذ الكود الناتج عليه:
* الـ "توجيه المُجمع" Assembler Directive، هو أمر
== قائمة بالمُجمعات الخاصة بمعمارية الحاسبات المختلفة ==
|