stanford-oval/wikipedia huggingface dataset:
لغة التجميع

لغة تجميع
| 0 | 1 |
| --- | --- |
التصنيف:  لغة برمجة 
التنميط:  برمجة غير منظمة 
ظهرت في:  1949 
| 0 | 1 |
| --- | --- |
الإصدار الأول:   1949  
| 0 | 1 |
| --- | --- |
امتدادات الملفات:  asm — s 
تعديل - تعديل مصدري - تعديل ويكي بيانات
لغة التجميع أو لغة المُجمع (بالإنجليزية: Assembly Languages)‏ والتي يمكن اختصارها إلى (asm)، هي أي لغة برمجة منخفضة المستوى (Low Level) يوجد بها تطابق قوي جدًا بين التعليمات المستخدمة في اللغة وتعليمات لغة الآلة الخاصة بمعمارية الحاسوب. نظرًا لأن التجميع يعتمد على تعليمات لغة الآلة، فقد صُمِّمَت كل لغة تجميع لمعمارية كمبيوتر محددة واحدة بالضبط. قد تسمى لغة التجميع أيضًا رمز الآلة الرمزي.
تُحَوَّل لغة التجميع إلى لغة آلة قابلة للتنفيذ بواسطة البرنامج المساعد المشار إليه باسم المُجمع (Assembler)، يشار إلى عملية التحويل باسم التجميع، كما هو الحال في تجميع الشيفرة المصدرية (source code)، وعادةً ما تحتوي لغة التجميع على جملة واحدة لكل تعليمه للآلة (1:1)، ولكن التعليقات والجمل هي توجيهات للمُجمِّع، ماكرو، وغالبًا ما يتم أيضًا دعم التسميات الرمزية لمواقع البرامج والذاكرة.
يُنسب مصطلح المُجمع (بالإنجليزية: assembler)‏ بشكل عام إلى موريس ويلكس وديفيد ويلر وستانلي جيل في كتابهم الصادر عام 1951 بعنوان «إعداد البرامج لجهاز كمبيوتر رقمي إلكتروني» (بالإنجليزية: The preparation of programs for an electronic digital computer)‏، والذي قام باستخدام المصطلح ليعني «برنامج يجمع برنامجًا آخر يتكون من عدة أقسام في برنامج واحد».
تكون لغة التجميع خاصة بمعمارية حاسوب معينة وأحيانًا بنظام تشغيل معين. ومع ذلك، لا توفر بعض لغات التجميع نحواً محددًا لمخاطبة نظام التشغيل، ويمكن استخدام معظم لغات التجميع عالميًا مع أي نظام تشغيل، حيث توفر اللغة الوصول إلى جميع الإمكانات الحقيقية للمعالج، والتي تعتمد عليها جميع آليات طلبات النظام في النهاية، على عكس لغات التجميع، تكون معظم لغات البرمجة عالية المستوى محمولة بشكل عام عبر بنيات متعددة ولكنها تتطلب تفسير أو تحويل، وتسمى الخطوة الحسابية عندما يقوم المُجمّع بمعالجة برنامج بوقت التجميع.
تركيب لغة التجميع

تستخدم لغة التجميع أسلوب ذاكري (مُعتمد على الذاكرة بشكل كبير) لتمثيل كل من التعليمات أو كود التشغيل المنخفض المستوى للآلة، وأيضًا كل سجل معماري وحقل البت [Bit field]  وما إلى ذلك، تتطلب العديد من العمليات معاملًا واحدًا أو أكثر من أجل تكوين تعليمات كاملة، تسمح معظم المُجمعات بالثوابت والسجلات والتسميات (Labels)  المُسماة لمواقع البرامج والذاكرة، ويمكنها حساب التعبيرات (Expressions)  للمعاملات. وبالتالي، يُحَرَّر المبرمجين من الحسابات المتكررة المملة وتكون برامج المجمّع أكثر قابلية للقراءة من لغة الآلة، اعتمادًا على المعمارية، يمكن أيضًا دمج هذه العناصر للحصول على تعليمات محددة أو أوضاع التوجيه باستخدام إزاحات أو بيانات أخرى بالإضافة إلى العناوين الثابتة، تقدم العديد من المُجمعات آليات إضافية لتسهيل تطوير البرنامج، والتحكم في عملية التجميع، والمساعدة في تصحيح الأخطاء.
المصطلح > المُجمع

عادة ما يقوم أي مُجمع حديث بتكوين كود غرضي/نهائي (Object Code) عبر ترجمة تعليمات لغة التجميع إلى شفرة تشغيل Opcode) Operation Code)، وعبر تحليل الأسماء الرمزية لمواقع تخزين البيانات بالذاكرة (Memory Locations) وغيرها من الكيانات، ويعتبر استخدام الإشارات الرمزية (Symbolic References) سمة أساسية من سمات المُجمعات، حيث يتم حفظ حسابات طويلة ومملة، وتحديث عناوين الذاكرة بعد تعديلات البرنامج. وتحتوي معظم المُجمعات على تسهيلات من نوع ماكرو تستبدل النصوص (Textual Substitution). على سبيل المثال، لتوليد متواليات قصيرة من التعليمات تعمل ضمنيا بدلا من أن تعمل في دالة.
وبصفة عامة، فإن كتابة المُجمعات -لأن المُجمع أساسا عبارة عن برنامج يُكْتَب- أسهل من كتابة مترجمات اللغات عالية المستوى، وقد ظهرت المُجمعات منذ خمسينات القرن الماضي. وتقوم المُجمعات، خصوصًا تلك المعتمدة على معمارية/هندسة حاسوبية من نوع RISC، مثل نماذج مبس (MIPS) وسبارك (SPARK) من شركة صن مايكروسيستمز وPA-RISC من شركة هيوليت باكارد ومعالجات (x86-64) بالوصول لجدولة التعليمات للدرجة المثلى، من أجل استغلال وحدة المعالجة المركزية أكفأ استغلال.
وهناك نوعين من المُجمعات، وقُسِّم النوعين على أساس عدد مرات المرور خلال الكود المطلوب لإنتاج الكود النهائي، أو البرنامج القابل للتنفيذ بمعنى آخر.
يعرف النوع الأول بالمُجمع ذو المرور الواحد، وهو المُجمع الذي يمر على الكود مرة واحدة فقط، مفترضا أن تعريف كل رموز الكود (مثل أسماء المتغيرات) سبق أي تعليمات قد تشير لهذه الرموز.
يعرف النوع الثاني بالمُجمع متعدد المرور، وهو المُجمع الذي يمر مرتين -أو أكثر من مرة- على الكود، ويقوم أثناء المرور الأول بتكوين جدول يضع فيه كل الرموز التي لم يتعرف عليها (Unresolved)، ويستخدم تلك الرموز في المرور الثاني كي يقوم بحل تلك العناوين.
أما ميزة المُجمع ذو النوع الأول «مرور واحد» فهي السرعة والتي لم تعد مهمة كما كانت يوما ما، بعد أن تطورت سرعات وإمكانيات أجهزة الكمبيوتر. أما ميزة النوع الثاني من المُجمعات التي تقوم بمرورين فيما فوق فهي أن رموز البرنامج يمكن أن تعرف في أي مكان بالشيفرة المصدرية للبرنامج. وكنتيجة لذلك، فيمكن تعريف البرنامج بطريقة أكثر منطقية وذات مغزى. على سبيل المثال، يستطيع المبرمج قراءة برامج زملائه بسهولة أكثر. مما يجعل برامج المُجمع متعدد المرور أسهل في القراءة والصيانة -القيام بتعديلات عليها مثلا-.
أما المُجمعات عالية المستوى وذات الإمكانيات الأكثر تعقيدا، فتوفر تجريدًا أكثر للغة، يمكن توضيحه فيما يلي:
بناءات تحكم (Control Structures) أكثر تقدما.
إمكانية الإعلان عن وظائف/إجراءات عالية المستوى، واستدعائها.
أنواع بيانات مجردة (Abstract) عالية المستوى، بما في ذلك الهياكل (Structures) والسجلات (Records) والاتحادات (Unions) والأصناف (Classes) والمجموعات (Sets).
معالجة ماكرو متطورة.
مميزات البرمجة كائنية التوجه، مثل التغليف وتعدد الأشكال والوراثة والواجهات.
لتفاصيل أخرى، انظر «تصميم اللغة» أدناه.
لاحظ أنه في حالة الاستخدام المهني العادي، يُسْتَخْدَم اللفظ مُجمع بشكل غامض، فكثيراً ما يُسْتَخْدَم للإشارة للغة التجميع نفسها، بدلا من الإشارة لـ «أداة التجميع». وبالتالي، فإن عبارة «إن نموذج CP/CMS تم كتابته بلغة التجميع Assembler ذو الاسم S/360» تختلف عن العبارة «إن نموذج ASM-H لهو مجمع تم استخدامه على نطاق واسع مع S/370».
تصميم اللغة > العناصر الأساسية

تتكون أي لغة تجميع من 3 أنواع من جمل التعليمات والتي تستخدم في تعريف عمليات البرنامج:
أوامر كود التشغيل Opcode
مقاطع البيانات
توجيهات لغة التجميع Directives
تصميم اللغة > العناصر الأساسية > أوامر كود التشغيل

عادة ما تكون التعليمات (الجمل) في لغة التجميع بسيطة للغاية، بعكس تلك الموجودة في لغات البرمجة عالية المستوى. بصفة عامة، فإن "كود التشغيل" هو اسم رمزي لتعليمة تنفيذية واحدة مكتوبة بلغة الآلة، ويوجد على الأقل أمر واحد من الكود التنفيذي محدد لكل تعليمة مكتوبة بلغة الآلة. وكل تعليمة تتكون عادة من "عملي أحد Byte، مكودة داخل التعليمة نفسها)، ويمكن أن تكون "غير مباشرة" وتشير إلى عنوان الذاكرة الذي يتم تخزين البيانات فيه. ويتحدد ذلك عبر البنية الأساسية للمعالج Architecture: فالمُجمع يعبر عن كيفية عمل هذه البنية فحسب.
تصميم اللغة > العناصر الأساسية > مقاطع البيانات

هناك تعليمات تستخدم في تحديد عناصر البيانات Data Elements التي تحمل البيانات وتحمل المتغيرات. وتحدد تلك العناصر: نوعية البيانات، طول البيانات، وموائمة البيانات Alignment.ويمكن لتلك التعليمات أيضا أن تحدد إذا ما كانت تلك البيانات متاحة لبرامج خارجية Outside Programs (برامج يتم تجميعها بشكل منفصل عن البرنامج الذي يحتوي البيانات)، أو أنها متاحة فقط للبرنامج الذي يحمل قسما يحتوي تعريف تلك البيانات.
تصميم اللغة > العناصر الأساسية > توجيهات لغة التجميع Assembly Directives/ Pseudo-Ops

«توجيهات لغة التجميع» Assembly Directives هي تعليمات يتم تنفيذها عن طريق المُجمع أثناء وقت التجميع Assembly Time، ولا يتم تنفيذها عبر وحدة المعالجة المركزية في وقت تنفيذ البرنامج.ويمكن لتلك التوجيهات أن تجعل لغة التجميع الخاصة بالبرنامج تعتمد على «معامل» يتم إدخاله عبر المبرمج، بحيث يمكن تجميع البرنامج الواحد بأكثر من طريقة، وربما من أجل تطبيقات مختلفة -لكل نسخة مجمعة مختلفة-.ويمكن أن تستخدم «التوجيهات» Directives أيضا للتلاعب Manipulate بطريقة عرض البرنامج Presentation، مما يجعل البرنامج أسهل في القراءة والصيانة من ناحية المبرمج.
(على سبيل المثال، يمكن استخدام الـ Pseudo-Ops في حجز مساحات تخزين وملأها بقيمها المبدأية بشكل اختياري.)وغالبا ما تبدأ أسماء العمليات من نوع Pseudo-Ops بنقطة Dot لتمييزها عن باقي تعليمات الجهاز.
وتدعم بعض المُجمعات أيضا تعليمات من نوع Pseudo-Instructions، والتي تقوم بتوليد تعليمتين أو أكثر من تعليمات الجهاز Machine Instructions.
وتسمح المُجمعات الرمزية Symbolic للمبرمجين بتحديد أسماء من اختيارهم (علامات أو رموز) لمواقع الذاكرة Memory Locations. وعادة ما يتم إعطاء كل متغير وكل ثابت Constant أسماء، بحيث يمكن الإشارة لتلك العناصر داخل التعليمات بأسمائها، وبالتالي يساعد المبرمج نفسه في توثيق الكود الذي يكتبه Self-Documenting.وفي الكود القابل للتنفيذ، يتم ربط اسم كل «روتين فرعي» Subroutine بـ نقطة دخوله Entry Point، بحيث يتم استدعاء الروتين الفرعي عبر استخدام اسمه. وداخل الروتينات الفرعية، يتم إعطاء علامات Labels لوجهات الأمر GOTO. وتدعم بعض المُجمعات «رموزا محلية» Local Symbols والتي تختلف مفرداتها عن الرموز العادية (مثال: استخدام التركيب "10$" كوجهة للأمر GOTO).
وتوفر معظم المُجمعات إدارة مرنة للرموز، بحيث تتيح للمبرمجين: إدارة مساحات إسمية مختلفة Namespaces، حساب الإزاحات بشكل آلي داخل هياكل البيانات Data Structures، وتحديد تسميات/علامات Labels تشير إلى قيم حرفية أو إلى ناتج حسابات بسيطة تؤدى عبر المُجمع. وتستخدم التسميات/العلامات Labels أيضا لتهيئة الثوابت Constants والمتغيرات مع عناوين قابلة للإعادة التعيين Relocatable Addresses.
تصميم اللغة > دعم البرمجة المهيكلة

قامت بعض المُجمعات بإدماج عناصر البرمجة المهيكلة من أجل تكويد Encode تدفق التنفيذ. وأقرب مثال لهذا النهج كانت مجموعة ماكرو المسماة 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، المسجلات، ومراجع الذاكرة References؛ ولكنها أدرجت جملا تعبيرية Expression Syntax للإشارة إلى ترتيب التنفيذ. وقد قامت: الأقواس Parentheses، والرموز الخاصة الأخرى، بجانب الـ Constructs الخاصة بالبرمجة المهيكلة المعتمدة على بلوكات Blocks، قام كل ذلك بالتحكم في تتابع توليد التعليمات Instructions.وقد تم بناء لغة A-Natural لتصبح مترجما خاص بلغة الـ C، أكثر من بنائها لكي يتم استخدامها في البرمجة اليدوية، لكن جملها المنطقية Syntax أعجبت العديد من المبرمجين الذين عملوا بها وكتبوا بها برامج بالفعل.
وقد ظهرت الحاجة والطلب إلى مترجمات أكثر تعقيدا بعد أن انحدر تطوير البرمجيات باستخدام لغات التجميع على نطاق واسع. وعلى الرغم من ذلك، فإن تلك المُجمعات لا تزال تستخدم في بعض الحالات، والتي تحوي قيودا مفروضة على الموارد -وقت، نفقات..الخ- أو أن الخصوصيات Peculiarities المتعلقة بهندسة النظام -الخاص بالتطبيق الجاري تطويره- تمنع الاستخدام الكفؤ للغات البرمجة عالية المستوى.
التركيب النحوي > الأوامر

يتبع كل أمر من أوامر لغة التجميع التنسيق التالي:
[label] mnemonic [operands]
فيما يلي يصف هذا الدليل بعض التعليمات الخاصة بلغة التجميع لحاسوب انتل 32 بت x86
| mnemonic | التوضيح |
| --- | --- |
ADD: جمع الأعداد الصحيحة
SUB: طرح الأعداد الصحيحة
IMUL: ضرب الأعداد الصحيحة
IDIV: قسمة الأعداد الصحيحة
MOV: نقل
CMP: مقارنة
IN: إدخال
OUT: إخراج
التركيب النحوي > التعليقات

ومثلها مثل معظم لغات البرمجة الأخرى، تسمح لغات التجميع بإضافة تعليقات إلى الشيفرة المصدرية، وتتم تجاهل هذه التعليقات عن طريق «المُجمع» -أي لا تتم ترجمتها للغة الآلة-. تبدأ تعليقات لغة التجميع بالفاصلة المنقوطة "؛". ويعد استخدام التعليقات بشكل جيد مع شيفرة لغة التجميع أكثر أهمية من استخدام التعليقات مع اللغات عالية المستوى، لأنه من الصعب استنباط معنى ومغزى سلسلة تعليمات لغة التجميع عبر قراءة الشيفرة فقط دون تعليقات توضحها.
ويمكن لحسن استخدام تلك التسهيلات Facilities أن يبسط جدا من مشكلات عمليات التكويد والصيانة الخاصة بكود اللغات منخضفة المستوى وإذا دعت الحاجة لتغييره فإن من الصعب جدا قراءة كود لغة التجميع الخام الذي يتم توليده عبر المترجمات أو برامج فك التجميع، حيث يتكون من مجموعة تعليمات متراصة، بدون أي تعليقات، بدون أي رموز لها مغزى، وبدون أي تعريفات للبيانات.
التركيب النحوي > التعليقات > مثال

برنامج "Hello World" بلغة التجميع (من موقع tutorialspoint)
section	.text
   global _start     ;must be declared for linker (ld)

_start: ;tells linker entry point
   mov	edx,len     ;message length
   mov	ecx,msg     ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel

   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
استخدام لغة التجميع > التطبيقات العملية

غالبا ما يتم استخدام الكود المكتوب بلغة التجميع في نظام ROM عند تحميل النظام (BIOS على نظم PC المتوافقة مع IBM) - كلمة BIOS اختصارا لـ Basic Input Output System-.ويستخدم هذا الكود المكتوب بلغة منخفضة المستوى، مع أشياء أخرى، في تهيئة واختبار العتاد قبل تحميل نظام التشغيل، ويخزن ذلك الكود في الذاكرة من نوع القراءة فقط. وحالما تم الوصول لمستوى معين من تهيئة الجهاز، يتم الانتقال إلى تنفيذ كود آخر، وغالبا ما يكون مكتوبا بلغة عالية المستوى؛ لكن الكود الذي يتم تشغيله بعد الضغط على زر تشغيل الكمبيوتر Power Button غالبا ما يكون مكتوب بلغة التجميع. ونطبق نفس الشئ على معظم برامج التحميل Boot Loaders.
وتقوم معظم المترجمات بمعالجة لغات عالية المستوى إلى لغة تجميع أولا قبل الترجمة النهائية، وبذلك تتيح لكود التجميع التعرض لعمليات التصحيح والتحسين Optimization. وتوفر لغات البرمجة منخفضة المستوى نسبيا، مثل لغة السي C، بناء لغويا خاصا (تركيب نحوي) لدمج الكود المكتوب بلغة التجميع مباشرة في كود المصدر الخاص بها. ويمكن للبرامج التي تستخدم مثل هذه التسيهلات، كـ نواة لينكس على سبيل المثال، أن تبني تجريديات Abstractions عبر استخدام عدة لغات تجميع على كل منصة عتادة مختلفة Hardware Platform.ويمكن للكود النقال Portable الخاص بالنظام أن يستخدم المكونات الخاصة بكل معالج -للعمل مع مختلف المنصات- خلال واجهة موحدة.
وتعد لغة التجميع شيئا ذي قيمة كبيرة مع «الهندسة العكسية»، لأن العديد من البرامج يتم تداولها في صيغة لغة الآلة، وغالبا ما تكون ترجمة لغة الآلة سهلة في الترجمة إلى لغة التجميع ويختبر بعناية في هذا الشكل، أما تحويله إلى لغة عالية المستوى لهو أمر صعب للغاية. وتستخدم أدوات مثل «المفكك التفاعلي» Interactive Disassembler نفس التقنية على شكل واسع من أجل نفس الأهداف.
هناك أيضا مجال يُدعى مشهد توضيحي والذي يجعل من استخدام لغة التجميع حقلا فريدا له. فهناك العديد من المسابقات الخاصة التي تقيد المتسابقين بتقييد إبداعاتهم -من البرامج- إلى حجم صغير جدا (أمثلة: 256 بايت، 1 كيلو بايت، 4 كيلو بايت أو 64 كيلو بايت)، وبالطبع فإن لغة التجميع هي أمثل حل لتحقيق هذا الهدف. وعندما يكون الحفاظ على الموارد، وخاصة وحدة المعالجة المركزية للأنظمة التي تفرض قيودا على المعالجة، مثل النماذج السابقة لأجهزة أميغا وأجهزة Commodore 64, هنا تصبح البرمجة بلغة التجميع أمرا لا بد منه: حيث يتم كتابة كود التجميع «يدويا» ويتم إعداد تسلسل التعليمات عبر المبرمجين في محاولة لخفض عدد دورات وحدة المعالجة المركزية المستخدمة؛ لأن القيود المفروضة على وحدة المعالجة المركزية غاية في الصرامة، لدرجة أن كل دورة لوحدة المعالجة المركزية يحب وضعها في الحسبان. ومع ذلك، فإن الفضل يرجع لاستخدام مثل تلك التطبيقات والتي أتاحت نظما مثل Commodore 64 أن ينتج رسوميات ثلاثية الأبعاد 3D Graphics تعمل في نمط «الزمن الحقيقي» Real-Time، مع تأثيرات متقدمة Effects، وهو الإنجاز الذي قد يعتبر تحقيقه بعيد الاحتمال على أجهزة حديثة ومتطورة مع معالج 0.99 ميجا هيرتز.
المصطلحات ذات الصلة

عادة ما يطلق على «لغة التجميع» أو «لغة المُجمع» الأسماء التالية: assembly, assembler, ASM أو symbolic machine code.وقد أطلق عليها بعض المبرمجين من أجيال الحاسب الكبير IBM اسم BAL ويعود اختصار الاسم للجملة «لغة التجميع الأساسية» Basic Assembly Language.
عند عمل المُجمع، فإن الخطوة الحسابية التي يقوم بها، والتي تتضمن كل عمليات معالجة الماكرو، تسمى بـ «وقت التجميع» Assembly Time.
يرجع المسمى «تجميع» إلى السنوات الأولى لظهور الكمبيوتر (راجع. الكود القصير short code، الكود السريع speed code).
المُجمع العابر Cross Assembler (انظر المترجم العابر Cross Compiler) تشبه وظيفته وظيفة المُجمع. لكن تم إطلاق هذا المصطلح عليه، للإشارة أن المُجمع يعمل على جهاز كمبيوتر مختلف، عن ذلك الذي سيتم تنفيذ الكود الناتج عليه: النظام المستهدف.ولأنه، في الوقت الحاضر، يتم كتابة المُجمعات بشكل «متنقل» Portable وبلغات عالية المستوى مثل لغة السي C، فإن المُجمعات الحالية لا تمت لذلك الموضوع بصلة. فأهمية المُجمع العابر تظهر بشكل جلي إذا احتاج النظام المستهدف Target System إلى إمكانية تشغيل «المُجمع» بنفسه. وهذا هو الحال عادة مع الأنظمة المضمنة الصغيرة. وكذلك، فإن أهم ملمح مميز للـ «مجمع العابر» هو أنه يوفر واجهات تسهل من نقل الكود إلى المعالج المستهدف Target Processor، بمعنى: أن يكون على ذاكرة وميضية أو ذاكرة القراءة فقط القابلة للبرمجة والمسح. ويقوم بتوليد صورة ثنائية Binary Image أو ملف من نوع Intel Hex بدلا من أن يقوم بتوليد ملف مستهدف Object File.
الـ «توجيه المُجمع» Assembler Directive، هو أمر يتم توجيهه إلى المُجمع. وقد تؤدي هذه الموجهات أي شيء، مثل إخبار المُجمع بأن يدمج مع البرنامج ملفات كود أخرى Source Files، أو يخبر البرنامج بتخصيص أماكن معينة في الذاكرة لتحمل بيانات ثابتة Constants.
قائمة بالمُجمعات الخاصة بمعمارية الحاسبات المختلفة

تحتوي الصفحة التالية على قائمة بأنواع مختلفة من المُجمعات التي تعمل مع هندسات/أبنية مختلفة من الحواسب، وتحوي القائمة معلومات مرتبطة بكل نوع من أنواع تلك المُجمعات:
قائمة بالمُجمعات Assemblers
مزيد من التفاصيل

لقد كُتِّب ما لا يقل عن عشرات من المُجمعات لكل كمبيوتر شخصي، حاسب كبير، نظام مضمن ولعبة كونسول Console Game، في الماضي والحاضر. ولمطالعة بعض الأمثلة، راجع قائمة المُجمعات.
وعلى أنظمة يونيكس، غالبا ما يطلع على المُجمع التقليدي اسم as، على الرغم من أنه ليس كيان واحد من الكود، لأنه يجري عادة كتابة مجمع جديد لكل بورت Port.وهناك العديد من إصدارات يونيكس تستخدم GAS.
لكل مجمع لهجة خاصة Dialect، داخل مجموعة من المُجمعات.وأحيانا، تستطيع بعض المُجمعات قراءة اللهجة الخاصة بمجمع آخر، وعلى سبيل المثال، يمكن لمجمع TASM من قراءة كود الـ MASM القديم، لكن العكس ليس صحيحا.ويمتلك مجمعي الـ FASM والـ NASM بناء لغوي متشابه، لكن كلا منهم يدعم مجموعة مختلفة من الماكرو مما يجعل من الصعب الترجمة من أحدهم للآخر. وبالطبع فإن الأساسيات تظل واحدة، لكن المميزات المتقدمة Advanced Features تختلف.
أيضا، يمكن للغة التجميع أن تكون منقولة Portable عبر عدة أنظمة تشغيل، وعلى وحدة معالجة مركزية واحدة. فاصطلاحات Conventions استدعاء الوظائف لا تختلف كثيرا بين أنظمة التشغيل المختلفة وأحيانا لا تختلف على الإطلاق، وببعض الحرص، يمكن الحصول على «نقالية» Portability في لغة التجميع، وعادة يتم ذلك عبر الربط مع مكتبة سي C والتي لا تتغير بين نظم التشغيل.
وعلى سبيل المثال، العديد من الأشياء داخل مكتبة لغة السي libc تعتمد على «ما قبل المعالجة» Preprocessor لتقوم بأشياء مرتبطة بنظام التشغيل OS-Specific، واشياء مرتبطة بلغة السي C-Specific، وتقوم بعمل ذلك للبرنامج قبل أن تبدأ في الترجمة Compiling.وفي واقع الأمر، فإن بعض الوظائف والرموز لا يمكن ضمان وجودها خارج الـ Preprocessor. الأسوأ من ذلك، أن حجم وترتيب البنيات Structs، فضلا عن حجم بعض أنواع من تعريف الأنواع typedefs مثل off_t، لا يوجد تعريف مثل هذه الاشياء في لغة التجميع -بدون مساعدة من ملف خارجي لتحديد هذه القيم Configure Script-، وتختلف حتى بين الإصدارات المختلفة من لينكس، مما يجعل من المستحيل أن يتم استدعاء وظائف من مكتبة السي libc بشكل نقال Portable، غير تلك التي تتعامل بشكل بسيط مع القيم الصحيحة والمؤشرات كمعاملات.ولمعالجة هذه المسألة، يقوم مشروع FASMLIB (مكتبة للمجمع FASM) بتوفير مكتبة نقالة للمجمع تعمل على منصات Win32 ولينكس، لكنها ليست كاملة بشكل كافي حتى الآن.
بعض لغات برمجة الحاسوب عالية المستوى، مثل لغة السي C ولغة «بورلاند باسكال» Borland Pascal، تدعم التجميع الداخلي Inline Assembly حيث يمكن دمج فقرات صغيرة نسبيا من كود التجميع داخل الكود المكتوب باللغة عالية المستوى.وغالبا ما تحتوي لغة البرمجة Forth على مجمعاً يستخدم في كلمات CODE Words.
ويستخدم العديد من الأشخاص نظم المحاكاة من أجل كشف وتصحيح أخطاء البرامج المكتوبة بلغة التجميع.
مثال يقوم بعرض كود المصدر الخاص بلغة التجميع

| العنوان | العلامة Label | التعليمات (AT&T Syntax) | الكود الناتج Object Code |
| --- | --- | --- | --- |
|  |  | .begin	 |  |
|  |  | .org 2048	 |  |
|  | a_start | . equ 3000 |  |
| 2048 |  | ld length,%  |  |
| 2064 |  | be done	 | 00000010 10000000 00000000 00000110 |
| 2068 |  | ٪ addcc r1، -4، ٪ r1 | 10000010 10000000 01111111 11111100 |
| 2072 |  | ٪ addcc r1، r2 ٪، ٪ r4 | 10001000 10000000 01000000 00000010 |
| 2076 |  | ld %r4,%r5	 | 11001010 00000001 00000000 00000000 |
| 2080 |  | ba loop	 | 00010000 10111111 11111111 11111011 |
| 2084 |  | ٪ addcc r3، r5 ٪، ٪ r3 | 10000110 10000000 11000000 00000101 |
| 2088 | done:	 | +4 ٪ jmpl R15، r0 ٪ | 10000001 11000011 11100000 00000100 |
| 2092 | length:	 | 20<Q2 Q2≤30 | 00000000 00000000 00000000 00010100 |
| 2096 | address:	 | a_start | 00000000 00000000 00001011 10111000 |
|  |  | .org a_start	 |  |
| 3000 | a:  |  |  |
مثال على مجموعة مختارة من التعليمات (من أجل كمبيوتر افتراضي Virtual Computer) مع العناوين المقابلة في الذاكرة حيث يتم وضع كل تعليمة.هذه العناوين ليست ثابتة Static، انظر إدارة الذاكرة. ويقوم بمصاحبة كل تعليمة مولدة (عبر المُجمع) الكود النهائي Object Code والذي يتوائم مع هندسة الكمبويتر الافتراضي Virtual Computer's Architecture.
لمزيد من المطالعة

«كتاب مجتمع التجميع ASM»، كتاب متوفر على الويب ويحتوي معلومات مفيدة عن الـ ASM، بجانب دروس تعليمية، وأمثلة للكود. By ASM Community
جوناثان بارتليت: البرمجة من الألف إلى الياء.دار بارتليت للنشر، 2994. ISBN 0-9752838-4-7
ومتوافر أيضا على شبكة الإنترنت في صيغة PDF
روبرت بريتون: البرمجة باستخدام لغة التجميع MIPS.دار برنتيس هول للنشر، 2003. ISBN 0-13-142044-5
بول كارتر: لغة التجميع للحاسب الشخصي PC.كتاب مجاني، 2001.
المصدر: شبكة الإنترنت
جيف دانتيمان: لغة التجميع خطوة بخطوة.دار وايلي للنشر، 2000. ISBN 0-471-37523-3
راندال هايد: فن لغة التجميع.دار «نو سكراتش» للطباعة، 2003. ISBN 1-886411-97-2
تتوافر مسودات الكتاب على شبكة الإنترنت في صيغ PDF وHTML
بيتر نورتون، جون سوتشا، كتاب بيتر نورتون حول لغة التجميع لأجهزة الحاسب الشخصي من نوع IBM، دار برادي للكتب، نيويورك: 1986.
مايكل سينجر، PDP-11.البرمجة باستخدام لغة المُجمع، وتنظيم الآلة Machine Organization، دار جون ويلي وأبناؤه للنشر: نيويورك: 1980.
دومينيك سويتمان: انظر لـ MIPS وهو يعمل.مورجان كوفان للنشر، 1999.ISBN 1-55860-410-3
جون والدورن: مقدمة للبرمجة باستخدام لغة التجميع RISC.دار أديسون ويسلي للنشر، 1998. ISBN 0-201-39828-1
وصلات خارجية

البرمجة باستخدام لغة التجميع الخاصة بيونيكس
PPR: تعلم لغة التجميع
أمثلة على البرمجة باستخدام لغة التجميع
كتابة تطبيقات لويندوز باستخدام لغة التجميع
نصائح لتحسين كود التجميع، مارك لارسون
دليل NASM
| ع ن لغات برمجة | ع ن لغات برمجة |
| --- | --- |
 إي شارب (.نت)  أيدا  أكشن سكربت  إرلانج  باسكال  بايثون  بلو  برولوغ  بوو  بي إتش بي  بيرل  بيسيك  بيتا  تايب سكريبت  جافا  جافا سكريبت  ديبول  رياكت  جايثون  دلفي  دي  هاسكل  روبي  سكالا  سي  سي#  سويفت  سي++/سي إل آي  سي++  غراف كيو إل  فورتران  فيجوال بيسك  كوبول  كريستال  كومال  كريبتون  كوتلن  كوبرا  لغة تجميع  ليسب  لنكس  مودولا  نيم القائمة :  إي شارب (.نت)  أيدا  أكشن سكربت  إرلانج  باسكال  بايثون  بلو  برولوغ  بوو  بي إتش بي  بيرل  بيسيك  بيتا  تايب سكريبت  جافا  جافا سكريبت  ديبول  رياكت  جايثون  دلفي  دي  هاسكل  روبي  سكالا  سي  سي#  سويفت  سي++/سي إل آي  سي++  غراف كيو إل  فورتران  فيجوال بيسك  كوبول  كريستال  كومال  كريبتون  كوتلن  كوبرا  لغة تجميع  ليسب  لنكس  مودولا  نيم القائمة 
| ع ن أنواع لغات البرمجة | ع ن أنواع لغات البرمجة |
| --- | --- |
النمط:  مُعتمد على الفاعل ‏  مصفوفية  جانبية المنحى  فصيلية  تسلسلية ‏  متزامنة  نقل المعطيات  تصريحية  تفاضلية  مخصصة النطاق  ديناميكية  غير إعتيادية  مدفوعة بالحدث ‏  قابلة للتوسع ‏  وظيفية  أمرية  منطقية  ماكرو  وصفية  كائنية ‏  كائنية التوجه  أنابيب التجزئة ‏  إجرائية  نموذجية ‏  منعكسة  قائم على القواعد ‏  نصية  مُكدسة ‏  متزامنة ‏  لمسية ‏  قالبية 
المُستوي:  التجميع  مُجمعة  مُفسرة  الآلة منخفضة المستوى  عالية المستوى  فائقة المستوى 
الجيل:  الأول  الثاني  الثالث  الرابع  الخامس 
ذا صلة:  غير إنجليزية  مرئية 
| 0 | 1 |
| --- | --- |
ضبط استنادي: وطنية :  المكتبة الوطنية الفرنسية (BnF)  الملف الاستنادي المتكامِل (GND)  المكتبة القومية الإسرائيلية (J9U)  مكتبة الكونغرس (LCNAF)  قاعدة البيانات الوطنية التشيكية (NLCR AUT) 
بوابة برمجة الحاسوب
بوابة تقانة المعلومات
بوابة علم الحاسوب
المعهد العلمي السعودي

المعهد العلمي السعودي كان اسمه أولاً المعهد الإسلامي وهو أول مدرسة حكومية نظامية أنشأها الملك عبد العزيز آل سعود في مكة المكرمة سنة 1345هـ الموافق 1927م.