لغة التجميع: الفرق بين النسختين

[نسخة منشورة][مراجعة غير مفحوصة]
تم حذف المحتوى تمت إضافة المحتوى
ط بوت:إضافة وصلة أرشيفية.
تنقيح اللغة
وسوم: تمت إضافة وسم nowiki تعديلات طويلة تحرير مرئي
سطر 26:
|مسار=https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/toc.htm
|تاريخ=2014 |سنة النشر الأصلية=1990 |ناشر=[[آي بي إم]]
| مسار أرشيف = https://web.archive.org/web/20201109020112/https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/toc.htm | تاريخ أرشيف = 9 نوفمبر 2020 }}</ref> '''{{إنج|Assembly Languages}}''' والتي يمكن اختصارها إلى ('''asm''')، هي أي [[لغة البرمجة منخفضة المستوى|لغة برمجة منخفضة المستوى]] يوجد بها تطابق قوي جدًا بين التعليمات المستخدمة في اللغة و[[مجموعة التعليمات|تعليمات]] [[لغة الآلة]] الخاصة [[معمارية الحاسوب|بمعمارية الحاسوب]].<ref name="Saxon_1962">{{استشهاد بكتاب |author-first1=James A. |author-last1=Saxon |author-first2=William S. |author-last2=Plette |عنوان=Programming the IBM 1401, a self-instructional programmed manual |مكان=Englewood Cliffs, New Jersey, USA |ناشر=[[Prentice-Hall]] |تاريخ=1962 |lccn=62-20615 |مسار= https://babel.hathitrust.org/cgi/pt?id=mdp.39015000480718;view=2up;seq=6|مسار أرشيف= https://web.archive.org/web/20201004162940/https://babel.hathitrust.org/cgi/pt?id=mdp.39015000480718;view=2up;seq=6
|تاريخ أرشيف=2020-10-04}} (NB. Use of the term ''assembly program''.)</ref> نظرًا لأن التجميع يعتمد على تعليمات لغة الآلة، فقد تم تصميم كل لغة تجميع لمعمارية كمبيوتر محددة واحدة بالضبط. قد تسمى لغة التجميع أيضًا رمز الآلة الرمزي.<ref name="Ohio_2016">{{استشهاد ويب |عنوان=Assembly: Review |المجلد=Lecture 14 |سلسلة=Computer Science and Engineering |ناشر=College of Engineering, [[جامعة ولاية أوهايو]] |تاريخ=2016 |مسار=http://web.cse.ohio-state.edu/~sivilotti.1/teaching/3903.recent/lectures/lecture14.pdf |تاريخ الوصول=2020-03-24 |حالة المسار=live |مسار أرشيف=https://web.archive.org/web/20200324153925/http://web.cse.ohio-state.edu/~sivilotti.1/teaching/3903.recent/lectures/lecture14.pdf |تاريخ أرشيف=2020-03-24}}</ref><ref name="Archer_2016">{{استشهاد بكتاب |عنوان=Assembly Language For Students |مسار=https://dl.acm.org/citation.cfm?id=3125846 |author-first=Benjamin |author-last=Archer |تاريخ=November 2016 |ناشر=[[CreateSpace Independent Publishing]] |مكان=North Charleston, South Carolina, USA |isbn=978-1-5403-7071-6 |اقتباس=Assembly language may also be called symbolic machine code.| مسار أرشيف = https://web.archive.org/web/20201210201054/https://dl.acm.org/doi/book/10.5555/3125846 | تاريخ أرشيف = 10 ديسمبر 2020 }}</ref>
 
يتم تحويل لغة التجميع إلى لغة آلة قابلة للتنفيذ بواسطة [[برمجيات الخدمات|البرنامج المساعد]] المشار إليه بإسم [[لغة التجميع#المجمع|المُجمع]]. يشار إلى عملية التحويل بإسم التجميع، كما هو الحال في تجميع [[شيفرة مصدرية|شفرةالشيفرة المصدرالمصدرية]]. عادةً ما تحتوي لغة التجميع على جملة واحدة لكل تعليمه للآلة (1: 1)، ولكن [[تعليق (برمجة)|التعليقات]] والجمل هي توجيهات للمُجمِّع،<ref name="Kornelis_2010">{{استشهاد ويب |عنوان=High Level Assembler – Opcodes overview, Assembler Directives |author-first=A. F. |author-last=Kornelis |تاريخ=2010 |سنة النشر الأصلية=2003 |مسار=http://www.bixoft.nl/english/opcd00.htm |تاريخ الوصول=2020-03-24 |حالة المسار=live |مسار أرشيف=https://web.archive.org/web/20200324151326/http://www.bixoft.nl/english/opcd00.htm |تاريخ أرشيف=2020-03-24}}</ref> [[ماكرو (علم الحاسوب)|ماكرو]]،<ref name="IBM_2014_Macro">{{استشهاد بكتاب
|عنوان=High Level Assembler for z/OS & z/VM & z/VSE Language Reference Version 1 Release 6
|المعرف=SC26-4940-06
سطر 38:
| مسار أرشيف = https://web.archive.org/web/20201109020112/https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/toc.htm | تاريخ أرشيف = 9 نوفمبر 2020 }}</ref><ref name="IBM_2014_ASM" /> وغالبًا ما يتم أيضًا دعم التسميات الرمزية لمواقع البرامج و[[عنوان الذاكرة|الذاكرة]].
 
يُنسب مصطلح المُجمع {{إنج|assembler}} بشكل عام إلى [[موريس ويلكس]]، و<nowiki/>[[ديفيد ويلر (عالم حاسب)|ديفيد ويلر]]، وستانلي جيل في كتابهم الصادر عام 1951 بعنوان "'''إعداد البرامج لجهاز كمبيوتر رقمي إلكتروني"''' {{إنج|The preparation of programs for an electronic digital computer}}،<ref name="Wilkes_1951">{{استشهاد بكتاب |author-last1=Wilkes |author-first1=Maurice Vincent |وصلة مؤلف1=Maurice Vincent Wilkes |author-last2=Wheeler |author-first2=David John |وصلة مؤلف2=David John Wheeler |author-last3=Gill |author-first3=Stanley J. |وصلة مؤلف3=Stanley J. Gill |عنوان=The preparation of programs for an electronic digital computer |تاريخ=1951 |ناشر=[[Tomash Publishers]] |isbn=978-0-93822803-5 |oclc=313593586 |إصدار=Reprint 1982 }}</ref> والذي قام باستخدام المصطلح ليعني "برنامج يجمع برنامجًا آخر يتكون من عدة أقسام في برنامج واحد".<ref name="Fairhead_2017">{{استشهاد ويب |author-last=Fairhead |author-first=Harry |عنوان=History of Computer Languages - The Classical Decade, 1950s |عمل=I Programmer |تاريخ=2017-11-16 |مسار=https://www.i-programmer.info/history/57-computer-languages/471-the-classical-decade.html |تاريخ الوصول=2020-03-06 |حالة المسار=live |مسار أرشيف=https://web.archive.org/web/20200102192823/https://www.i-programmer.info/history/57-computer-languages/471-the-classical-decade.html |تاريخ أرشيف=2020-01-02}}</ref>
 
تكون لغة التجميع خاصة [[معمارية الحاسوب|بمعمارية حاسوب]] معينة وأحيانًا [[نظام تشغيل|لنظامبنظام تشغيل]] معين.<ref name="OS360_2011">{{استشهاد ويب |عنوان=How do assembly languages depend on operating systems? |تاريخ=2011-07-28 |عمل=Stack Exchange |ناشر=[[ستاك إكستشينج]] |مسار=https://stackoverflow.com/questions/6859348/how-do-assembly-languages-depend-on-operating-systems |تاريخ الوصول=2020-03-24 |حالة المسار=live |مسار أرشيف=https://web.archive.org/web/20200324152747/https://stackoverflow.com/questions/6859348/how-do-assembly-languages-depend-on-operating-systems |تاريخ أرشيف=2020-03-24}} (NB. System calls often vary, e.g. for [[OS/360 and successors|MVS]] vs. [[DOS/360 and successors|VSE]] vs. VM/CMS; the binary/executable formats for different operating systems may also vary.)</ref> ومع ذلك، لا توفر بعض لغات التجميع [[نحو (برمجة)|نحواً]] محددًا لمخاطبة نظام التشغيل، ويمكن استخدام معظم لغات التجميع عالميًا مع أي نظام تشغيل، حيث توفر اللغة الوصول إلى جميع الإمكانات الحقيقية [[وحدة معالجة مركزية|للمعالج]]، والتي تعتمد عليها جميع آليات [[طلبات النظام]] في النهاية. على عكس لغات التجميع، تكون معظم [[لغة برمجة عالية المستوى|لغات البرمجة عالية المستوى]] [[حمل (برامج)|محمولة]] بشكل عام عبر بنيات متعددة ولكنها تتطلب [[مفسر (برمجة)|تفسير]] أو [[محول برمجي|محولتحويل]]، وهي مهمة أكثر تعقيدًا من التجميع.
 
تسمى الخطوة الحسابية عندما يقوم المُجمّع بمعالجة برنامج بوقت التجميع.
 
== تركيب لغة التجميع ==
تستخدم لغة التجميع أسلوب [[استذكار|ذاكري]] (مُعتمد علي الذاكرة بشكل كبير) لتمثيل كل من [[لغة الآلة|التعليمات]] أو [[كود العملية|كود التشغيل المنخفض المستوى للآلة]]، وعادةً ما يكون أيضًاوأيضًا كل [[سجل المعالج|سجل معماري]] و{{وإو|حقل بت|Bit field|نص=حقل البت}} وما إلى ذلك. تتطلب العديد من العمليات [[معامل حسابي|معاملًا]] واحدًا أو أكثر من أجل تكوين تعليمات كاملة. تسمح معظم المجمعاتالمُجمعات بالثوابت والسجلات و{{وإو|التسمية (علم الحاسوب)|Label (computer science)|نص=التسميات}} المُسماة لمواقع البرامج والذاكرة، ويمكنها حساب {{وإو|التعبير (علم الحاسوب)|Expression (computer science)|نص=التعبيرات}} للمعاملات. وبالتالي، يتم تحرير المبرمجين من الحسابات المتكررة المملة وتكون برامج المجمّع أكثر قابلية للقراءة من لغة الآلة. اعتمادًا على المعمارية، يمكن أيضًا دمج هذه العناصر للحصول على تعليمات محددة أو {{وإو|وضع التوجيه|Addressing mode|نص=أوضاع التوجيه}} باستخدام [[حيد (حاسوب)|إزاحات]] أو بيانات أخرى بالإضافة إلى العناوين الثابتة. تقدم العديد من المُجمعات آليات إضافية لتسهيل تطوير البرنامج، والتحكم في عملية التجميع، والمساعدة في [[تصحيح برمجي|تصحيح الأخطاء]].
 
== المصطلح ==
سطر 52:
 
:''قارن مع: مجمع دقيق Microassembler.''
عادة ما يقوم أي مجمعمُجمع حديث بتكوين كود غرضي/نهائى (Object Code) عبر ترجمة تعليمات لغة التجميع إلى شفرة تشغيل Opcode) Operation Code)، وعبر تحليل الأسماء الرمزية لمواقع تخزين البيانات بالذاكرة (Memory Locations) وغيرها من الكيانات. ويعتبر استخدام "الإشارات الرمزية" (Symbolic References) سمة أساسية من سمات المجمعات،المُجمعات، حيث يتم حفظ حسابات طويلة ومملة، وتحديث عناوين الذاكرة بعد تعديلات البرنامج. وتحتوي معظم المجمعاتالمُجمعات على تسهيلات Facilities من نوع "ماكرو" تقوم بعمليات "استبدال النصوص" (Textual Substitution). على سبيل المثال، لتوليد متواليات قصيرة من التعليمات تعمل Inlineضمنيا بدلا من أن تعمل في [[دالة (برمجة)|دالة]].
 
وبصفة عامة، فإن كتابة المجمعاتالمُجمعات -لأن المجمعالمُجمع أساسا عبارة عن [[برنامج (حاسوب)|برنامج]] يتم كتابته- أسهل من كتابة [[محول برمجي|مترجمات]] اللغات عالية المستوى، وقد ظهرت المجمعاتالمُجمعات منذ خمسينات القرن الماضي. وتقوم المجمعات،المُجمعات، خصوصا تلك المعتمدة على بناءمعمارية/هندسة حاسوبية Architecture من نوع [[حاسوب مجموعة تعليمات مخفضة|RISC]]، مثل نماذج: مبس (MIPS) وSPARKوسبارك (SPARK) من شركة "صن مايكروسيستمز وPA-RISC من شركة "[[هوليت-باكارد|هيوليت باكارد]] وأيضاومعالجات معالجات x86(x86-64), بالوصول لجدولة التعليمات للدرجة المثلى، من أجل استغلال خط Pipeline [[وحدة معالجة مركزية|وحدة المعالجة المركزية]] أكفأ استغلال.
 
وهناك نوعين من المُجمعات، وتم تقسيم النوعين على أساس عدد مرات المرور خلال الكود&nbsp;المطلوب لإنتاج الكود النهائي، أو البرنامج [[تنفيذي|القابل للتنفيذ Executable]] بمعنى آخر.
 
* يعرف النوع الأول بالمجمعبالمُجمع ذو المرور الواحد، وهو المجمعالمُجمع الذي يمر على الكود مرة واحدة فقط، مفترضا أن تعريف كل رموز الكود (مثل أسماء المتغيرات) سبق أي تعليمات قد تشير لهذه الرموز.
* يعرف النوع الثاني بالمجمعبالمُجمع متعدد المرور، وهو المجمعالمُجمع الذي يمر مرتين -أو أكثر من مرة- على الكود، ويقوم أثناء المرور الأول بتكوين جدول يضع فيه كل الرموز التي لم يتعرف عليها Unresolved،(Unresolved)، ويستخدم تلك الرموز في المرور الثاني كي يقوم بحل تلك العناوين Addresses.
أما ميزة المجمعالمُجمع ذو النوع الأول "مرور واحد" فهي السرعة والتي لم تعد مهمة كما كانت يوما ما، بعد أن تطورت سرعات وإمكانيات أجهزة الكمبيوتر. أما ميزة النوع الثاني من المجمعاتالمُجمعات التي تقوم بمرورين فيما فوق فهي أن رموز البرنامج يمكن أن تعرف في أي مكان [[شيفرة مصدرية|بالشيفرة المصدرية]] للبرنامج. وكنتيجة لذلك، فيمكن تعريف البرنامج بطريقة أكثر منطقية وذات مغزى. على سبيل المثال، يستطيع المبرمج قراءة برامج زملاءه بسهولة أكثر. مما يجعل برامج المجمعالمُجمع متعدد المرور أسهل في القراءة والصيانة -القيام بتعديلات عليها مثلا-.
 
أما المجمعاتالمُجمعات عالية المستوى وذات الإمكانيات الأكثر تعقيدا، فتوفر [[تجريد (حاسوب)|تجريدا]] أكثر للغة، يمكن توضيحه فيما يلي:
 
* بناءات تحكم (Control Structures) أكثر تقدما Control Structures
* إمكانية الإعلان عن وظائف/إجرائات عالية المستوى، واستدعائها.
* أنواع بيانات مجردة (Abstract) عالية المستوى، بما في ذلك الهياكل Structures،(Structures) السجلاتوالسجلات Records،(Records) الاتحاداتوالاتحادات Unions،(Unions) الأصنافوالأصناف (Classes) والمجموعات (Sets).
* معالجة ماكرو Macro متطورة
* مميزات [[برمجة كائنية التوجه|البرمجة كائنية التوجه]]، مثل [[تغليف (علوم حاسوب)|التغليف]]، و<nowiki/>[[تعدد الأشكال (علم الحاسوب)|تعدد الأشكال]]، [[وراثة (حوسبة)|الوراثةوالوراثة]]، و[[واجهة (حوسبة)|الواجهات]].
لتفاصيل أخرى، انظر "تصميم اللغة" أدناه.
 
لاحظ أنه في حالة الاستخدام المهني العادي، يتم استخدام اللفظ "مُجمع" بشكل غامض:غامض، فكثيرا ما يتم استخدامه للإشارة للغة التجميع نفسها، بدلا من الإشارة لـ "أداة التجميع".وبالتالي:وبالتالي، فإن عبارة "إن نموذج CP/CMS تم كتابته بلغة التجميع Assembler ذو الاسم S/360" تختلف عن العبارة "إن نموذج ASM-H لهو مجمع تم استخدامه على نطاق واسع مع S/370".
 
=== لغة التجميع ===
ويتكون البرنامج المكتوب بلغة التجميع من سلسلة من [[مجموعة التعليمات|التعليمات]] -سهلة الحفظ (Mnemonics) والتي تماثل دفعة من التعليمات التنفيذية Executable،(Executable)، وعندما يتم ترجمة هذا الكود عبر المجمع،المُجمع، يمكن تحميل هذا الكود إلى الذاكرة وتنفيذه.
 
وعلىعلى سبيل المثال، فإن التعليمة التالية الخاصة بمعالج من نوع x86/IA-32 تخبره بنقل قيمة مكونة من 8ثمانية بايت إلى المسجل. هذه التعليمة مكتوبة بكود ثنائي[[نظام Binaryعد ثنائي|ثنائي]] يمثل [[لغة الآلة]]. الكود الثنائي لهذه التعلية هو 10110 متبوعًا بمعرّف 3 بت للمسجل المراد إستخدامه. المعرف الخاص بالمسجل AL هو 000، لذلك يقوم الكود التالي بتحميل سجل AL بالبيانات 01100001.<syntaxhighlight>10110000 01100001
</syntaxhighlight>يمكن جعل كود الكمبيوتر الثنائي السابق أكثر قابلية للقراءة من خلال التعبير عنه [[نظام عد ستة عشري|بالنظام الست عشري]] على النحو التالي.<syntaxhighlight>B0 61
</syntaxhighlight>
سطر 86:
* انقل القيمة 61h (والتي تعني [[نظام عد عشري|بالنظام العشري]] القيمة "97"؛ حيث تعني اللاحقة "h" [[نظام عد ستة عشري|النظام الست-عشري]]؛ وتعني علامة الهاش "#" أن يتم نقل القيمة 97 ولا تعني أن يتم نقل القيمة المخزنة في عنوان الذاكرة رقم 97) إلى [[سجل المعالج]] ذو الاسم "AL".
 
الأمر "mov" يكتب بكود التشغيل بالشكل 1011,1011، ويقوم بنقل القيمة المذكورة بمعامل Operand الأمر الثاني، إلى السجل المذكور عبر المعامل الأول. وقد اختار "مصمم مجموعة التعليمات" تلك الحروف الثلاثة mov لتمثيل الأمر، مما يجعل الأمر سهلا على المبرمج لتذكر واستخدام الأمر. ويتم الفصل بين مجموعة {{وإو|معامل (برمجة حاسوب)|Parameter (computer programming)نص=المعاملات}} و[[معطى (علم حاسوب)|المعطيات]] التي تتبع شفرة التشغيل عبر فاصلة "،"؛ إن ما سبق لهو نموذج جيد لجملة من جمل لغة التجميع.
 
وأثناء الممارسة يقوم العديد من المبرمجين بإسقاط الكلمة Mnemonic (أمر سهل التذكر) وإطلاق وصف "كود تشغيلي" Opcode على اللفظة "mov"، وذلك خطأ تقني بكل تأكيد. فعندما يفعلون ذلك، فهم يشيرون إلى الكود الثنائي والذي تمثله لغة التجميع. ولتوضيح الأمر بشكل آخر، إن "الأمر سهل التذكر" Mnemonic مثل الأمر mov ليس كودا تشغيليا Opcode، لكنه يمثل أو يرمز إلى الكود التشغيلي، لذلك فعندما يشير أحدهم إلى "الكود التشغيلي للأمر mov" فهو يقصد إلى الإشارة للكود التشغيلي الثنائي Binary ولا يشير إلى الأمر المكتوب بلغة التجميع. وحاليا، يوجد عدد محدود من المبرمجين الذين يحتاجون للتعامل مع النماذج الثنائية التي تمثل كود التشغيل الخاص بتعليمات معينة، فهذا التمييز لم يعد يحتاجه أحد بين المبرمجين -لم تعد عملية البرمجة التي تطورت إمكانياتها تحتاجه-، لكنه مطلوبا جدا في أوساط مصممي المعالجات Processor Designers.
 
يمكن أن يكون بناء جملة MOV أكثر تعقيدًا كما تظهر الأمثلة التالية<syntaxhighlight lang="asm" line="1">MOV EAX, [EBX] ; Move the 4 bytes in memory at the address contained in EBX into EAX
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>
ويتم تحويل لغة التجميع إلى [[لغة الآلة]] عبر المجمع،المُجمع، وتتم العملية العكسية عبر برنامج يدعى "[[المفكك]]". وبخلاف اللغات عالية المستوى، فدائما ما يكون هناك توافق أو تناظر بين التعليمات البسيطة المكتوبة بلغة التجميع وبين التعليمات المكتوبة بلغة الآلة. إلا أنه، وفي بعض الحالات، يمكن للمجمع أن يخرج تعلميات من نوع Pseudoinstructions، والتي يتم تمثيلها عبر عدة تعليمات بلغة الآلة، من أجل القيام بوظائف يشيع الاحتياج لها. على سبيل المثال، بفرض أن هناك آلة ينقصها الأمر Branch-if-greater-or-equal "انتقل لمكان آخر إذا ساوت القيمة x أو زادت عن x" في مجموعة أوامر المجمعالمُجمع الخاص بها، يمكن لحل هذه المشكلة، أن يقوم المجمعالمُجمع بتوفير تعليمات Pseudoinstructions تجمع بين الأمرين "Set if less than" و"branch if zero" -الأمر الأخير يعمل مع ناتج الأوامر التي تسبقه-. وتوفر معظم المجمعاتالمُجمعات ذات "المميزات الكاملة" Full-Featured، لغة ماكرو ثرية (والتي يتم مناقشتها أدناه) يتم استخدامها من قبل الشركات Vendors والمبرمجين لإنتاج كود وتسلسل بيانات أكثر تعقيدا.
 
غني عن الذكر، أن كل بناء حاسوبي وكل معالج له لغة الآلة الخاصة به. وعلى هذا المستوى، تكون كل تعليمة Instruction ممثلة بشكل بسيط بحيث يتم تنفيذها من خلال عدد صغير نسبيا من الدوائر الإلكترونية Electronic Circuits. وتختلف أجهزة الكمبيوتر باختلاف نوع وعدد العمليات التي تدعمها. على سبيل المثال، فإن آلة جديده من نوع 64 بت تتكون من نوع مختلف من الدوائر التي تمتلكها آلة من نوع 32 بت. وقد يختلفان أيضا في أحجام وأعداد [[سجل المعالج|المسجلات]] في كل منهما، وقد يختلفان أيضا في تمثيل البيانات داخل مخازن البيانات -المخازن مثل: الذاكرة Memory، المسجلات Registersوالمسجلات-. وفي حين أن معظم أجهزة الكمبيوتر التي تستخدم في الأغراض العامة قادرة على تنفيذ نفس الوظائف، فإن طريقة أداء كل جهاز تختلف عن بقية الأجهزة؛ وتعكس لغات التجميع الخاصة بكل منهم هذا الاختلاف.
 
وقد تحتوي مجموعة واحدة من أوامر لغة التجميع "Instruction Set" مجموعات متعددة من التراكيب اللغوية التي تستخدم في كتابة الأوامر Mnemonics. وفي مثل هذه الحالات، فإن المجموعة الأكثر استخداما هي تلك التي توفرها الشركة المصنعة -للنظام الحاسوبي- وتستخدمها في وثائق منتجها [[توثيق|Documentation]].
سطر 101:
== تصميم اللغة ==
=== العناصر الأساسية ===
تتكون أي لغة تجميع من 3 أنواع من جمل[[مجموعة التعليمات|جمل Instruction Statementsالتعليمات]] والتي تستخدم في تعريف عمليات البرنامج:
 
* أوامر كود التشغيل Opcode
سطر 108:
 
==== أوامر كود التشغيل ====
عادة ما تكون التعليمات (الجمل) في لغة التجميع بسيطة للغاية، بعكس تلك الموجودة في [[لغة برمجة عالية المستوى|لغات البرمجة عالية المستوى]]. بصفة عامة، فإن "كود التشغيل" هو اسم رمزي لتعليمة تنفيذية واحدة مكتوبة بلغة الآلة، ويوجد على الأقل أمر واحد من الكود التنفيذي محدد لكل تعليمة مكتوبة بلغة الآلة. وكل تعليمة تتكون عادة من "عملي أحد Byte، مكودة داخل التعليمة نفسها)، ويمكن أن تكون "غير مباشرة" وتشير إلى عنوان الذاكرة الذي يتم تخزين البيانات فيه. ويتحدد ذلك عبر البنية الأساسية للمعالج Architecture: فالمجمعفالمُجمع يعبر عن كيفية عمل هذه البنية فحسب.
 
==== مقاطع البيانات ====
سطر 114:
 
==== توجيهات لغة التجميع 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.
 
=== وحدات الماكرو ===
تدعم العديد من المجمعاتالمُجمعات وحدات الماكرو '''{{إنج|Macros}}'''، وهي عبارة عن رموز مُعرفة عن طريق المبرمج وتحوي مجموعة من سطور النص المتسلسلة. هذا التسلسل للسطور النصية، قد يحوي سلسلة من التعليمات، أو سلسلة من تعليمات Pseudo-Ops خاصة بالبيانات. وطالما تم تعريف الماكرو عبر استخدام الـ Pseudo-Op المناسب، فإنه من الممكن استخدام اسمه، مثلما يتم استخدام أسماء الأوامر Mnemonic تماما. وعندما يقوم المجمعالمُجمع بمعالجة جملة من تلك النوعية، فإنه يقوم باستبدال الجملة التي تحوي اسم الماكرو بالسطور النصية المرتبطة بذلك الماكرو. بعد ذلك، يقوم بمعالجة تلك السطور كما لو أنها قد ظهرت في ملف [[شيفرة مصدرية|الشيفرة المصدرية]] (متضمنا، كما يحدث في بعض المجمعات،المُجمعات، محتويات أي ماكرو قد يظهر في السطور المُستبدلة -ماكرو داخل ماكرو-).
 
وبما أن وحدات الماكرو يمكن أن تحمل أسماء قصيرة يتم توسعتها إلى سطور طويلة من الكود، فإن وحدات الماكرو يمكن أن تستخدم لتجعل البرامج المكتوبة بلغة التجميع تبدو وكأنها أقصر (بمعنى أن يتطلب بناء التطبيق عددا أقل من سطور الكود، كما هو الحال مع [[لغة برمجة عالية المستوى|لغات البرمجة عالية المستوى]]). ويمكن أيضا أن يتم استخدامها لإضافة هياكل Structures عالية المستوى إلى البرامج المكتوبة بلغة التجميع، ويمكن أن تقدم -بشكل اختياري- كود يستخدم لإدارة و [[تصحيح برمجي|إصلاح الأخطاء البرمجية]] بشكل ضمني، عبر [[وسيط (برمجة حاسوب)|المعاملات]] وعبر خصائص أخرى.
 
معظم المجمعاتالمُجمعات تمتلك وحدات ماكرو مدمجة Built-in من أجل الاستدعائات عبر النظام System Calls ومن أجل بعض تسلسلات الكود الخاصة.
 
وغالبا ما تسمح المجمعاتالمُجمعات لوحدات ماكرو بأن تمتلك [[وسيط (برمجة حاسوب)|معاملات]]. وبعض المجمعاتالمُجمعات تمتلك لغة ماكرو معقدة جدا، وتقوم بدمج عناصر هذه اللغة عالية المستوى للقيام بوظائف متعددة: معاملات اختيارية Optional Parameters، متغيرات رمزية، جمل شرطية، معالجة لسلاسل الحرفية Strings، عمل عمليات حسابية، وجميع تلك الأشياء يمكن إعادة استخدامها أثناء تنفيذ وحدات ماكرو بعينها، وتسمح -تلك المجمعاتالمُجمعات- لوحدات الماكرو بحفظ السياق Context أو تبادل المعلومات بين بعضها البعض. ولذلك، فإن الماكرو يمكنه توليد عدد ضخم من تعليمات لغة التجميع أو من تعريفات البيانات، استنادا إلى معاملات الماكرو Arguments. ويمكن استخدام ذلك لتوليد هياكل بيانات ذات شكل "سجلي" Record-Style، ويمكن استخدام ذلك أيضا لتولييد دوارات مبسوطة Unrolled Loops، على سبيل المثال، ويمكن أيضا استخدام نفس التقنية في توليد [[خوارزمية|خوارزميات]] كاملة Algorithms تستند على [[وسيط (برمجة حاسوب)|معاملات]] معقدة. ويمكن اعتبار مؤسسة تستخدم هذه النوعية من لغات التجميع والتي تم تمديد قدراتها بشكل مكثف عبر استخدام مجموعة وحدات الماكرو، يمكن اعتبارها وكأنها تستخدم لغة برمجة عالية المستوى، حيث أن مبرمجي الشركة لا يعملون مع عناصر الكمبيوتر المفاهيمية ذات المستوى المنخفض (مثال: لا يعملون مع [[سجل المعالج|المسجلات)]].
 
وقد تم استخدام وحدات الماكرو في عهد [[حاسوب كبير|الحاسبات الكبيرة]] من أجل تخصيص Customize نظم برمجية واسعة النطاق Large Scale لتلبية طلبات محددة لعملاء معينين، واستخدت أيضا عبر فريق عمل أحد العملاء من أجل تلبية احتياجات موظفيه عبر بناء نسخ محددة من نظم تشغيل مصنع الكمبيوترات Manufacturer-الذي قد اشتراها هذا العميل-. وعلى سبيل المثال، فقد سبق فعل ذلك، مع مبرمجي النظم الذين كانوا يعملون لشركة [[آي بي إم]]، وبشكل أكثر تحديدا، كانوا يعملون على نظام مراقبة المحادثات/ النظام الافتراضي CMS/VM، وعلى نظام "معالجة المعاملات بشكل لحظي Real Time"، وعلى نظام "التحكم في بيانات العملاء"، وعلى ACP/TPF، وهو نظام مالي إداري -خاص بخطوط الطيران- بدأ في السبعينات وما زال يقوم بتشغيل نظم عالمية كبرى للتوزيع GDS ونظم بطاقات الائتمان حتى يومنا هذا.
 
وكان من الممكن أيضا أن يتم استخدام قدرات الماكرو المعالجة Processing فقط بحيث يقوم المجمعالمُجمع [[توليد الكود (توضيح)|بتوليد كود]] مكتوب بلغات مختلفة تماما، وعلى سبيل المثال، يمكن استخدام تلك التقنية في توليد نسخة من البرنامج مكتوبة بلغة [[كوبول]] عبر استخدام مجمع مزود ببرنامج ماكرو يحتوي على سطور من كود الكوبول، وأثناء وقت التجميع Assembly Time يمكن لمعاملات Operators أن توجه المجمعالمُجمع لتوليد الكود بشكل تحكمي Arbitrary.
 
ويرجع سبب ذلك، كما تم إدراكه في السبعينات، أن مفهوم "معالجة الماكرو" Macro Processing يختلف عن مفهوم "التجميع" Assembly،التجميع، حيث يشير المصطلح الأول في لغتنا الحاسوبية الحديثة إلى إمكانيات في برامج معالجة الكلمات، معالجة النصوص، أكثر من إشارته إلى توليد الكود. وحقيقة، فإن مفهوم "معالجة الماكرو" قد ظهر -وما زال يظهر- في لغة البرمجة "سي" C، حيث تدعم "تعليمات ما قبل المعالجة" Preprocessor Instructions من أجل تحديد قيم المتغيرات Set Variables. لاحظ أنه على عكس الأنواع المحددة لمعالجات الماكرو التي تم ذكرها والتي تعمل داخل المجمعات،المُجمعات، فإن المعالج القبيل للغة الـ C لم يكن Turing-Complete (متكامل مع معايير تورنغ) لنقص إمكانية "الدوارات" Loops أو الذهاب إلى تعليمة محددة عبر أمر Go To.
 
وبالرغم من قوة معالجة الماكرو، فقد تم إهمالها في اللغات عالية المستوى، بينما تظل مهمة وموجودة في المجمعاتالمُجمعات Assemblers.
 
وذلك يرجع إلى الحيرة والارتباك التي وقع فيهما العديد من المبرمجين، حيث شكل لهم "تعويض معاملات" الماكرو مشكلة، ولم يستطيعوا فك الخلط بين معالجة الماكرو أثناء التجميع وأثناء التنفيذ.
سطر 153:
 
=== دعم البرمجة المهيكلة ===
قامت بعض المجمعاتالمُجمعات بإدماج عناصر [[برمجة مهيكلة|البرمجة المهيكلة]] من أجل تكويد 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 أعجبت العديد من المبرمجين الذين عملوا بها وكتبوا بها برامج بالفعل.
 
وقد ظهرت الحاجة والطلب إلى مترجمات أكثر تعقيدا بعد أن انحدر تطوير البرمجيات باستخدام لغات التجميع على نطاق واسع. وعلى الرغم من ذلك، فإن تلك المجمعاتالمُجمعات لا تزال تستخدم في بعض الحالات، والتي تحوي قيودا مفروضة على الموارد -وقت، نفقات..الخ- أو أن الخصوصيات Peculiarities المتعلقة بهندسة النظام -الخاص بالتطبيق الجاري تطويره- تمنع الاستخدام الكفؤ للغات البرمجة عالية المستوى.
 
== التركيب النحوي ==
سطر 204:
 
=== التعليقات ===
ومثلها مثل معظم [[لغة برمجة|لغات البرمجة]] الأخرى، تسمح لغات التجميع بإضافة [[تعليق (برمجة)|تعليقات]] إلى [[شيفرة مصدرية|الشيفرة المصدرية]]، وتتم تجاهل هذه التعليقات عن طريق "المجمعالمُجمع" -أي لا تتم ترجمتها للغة الآلة-. تبدأ تعليقات لغة التجميع بالفاصلة المنقوطة "؛". ويعد استخدام التعليقات بشكل جيد مع شيفرة لغة التجميع أكثر أهمية من استخدام التعليقات مع اللغات عالية المستوى، لأنه من الصعب استنباط معنى ومغزى سلسلة تعليمات لغة التجميع عبر قراءة الشيفرة فقط دون تعليقات توضحها.
 
ويمكن لحسن استخدام تلك التسهيلات Facilities أن يبسط جدا من مشكلات عمليات التكويد والصيانة الخاصة بكود اللغات منخضفة المستوى وإذا دعت الحاجة لتغييره فإن من الصعب جدا قراءة كود لغة التجميع الخام الذي يتم توليده عبر [[محول برمجي|المترجمات]] أو [[المفكك|برامج فك التجميع]]، حيث يتكون من مجموعة تعليمات متراصة، بدون أي تعليقات، بدون أي رموز لها مغزى، وبدون أي تعريفات للبيانات.
سطر 236:
وفي اطار تجاري أكثر، فإن الأسباب الرئيسية لاستخدام لغة التجميع كانت: حجم Size أقل، مشكلات Overhead أقل، سرعة أعلى واعتمادية Reliability أعلى.
 
وكأمثلة نموذجية لبرامج كبرى كتبت بلغة التجميع في ذاك الوقت، تجد نظام التشغيل [[دوس (نظام تشغيل)|مايكروسوفت دوس]]، وبرنامج آي بي إم لمعالجة الجداول [[لوتس 1-2-3]], وكذلك معظم الألعاب الشهيرة لعائلة [[آتاري|الأتاري]] Atari 800 للحواسب المنزلية. وحتى في التسعينات، معظم ألعاب الفيديو من نوع Console تم كتابتها عبر لغة التجميع، بما في ذلك معظم ألعاب شركات Mega Drive/Gensis وشركة [[سوبر نينتندو إنترتينمنت سيستم|Super Nintendo]] لأنظمة الترفيه. ووفقا لبعض المطلعين داخل صناعة البرمجيات، فإن لغة التجميع كانت أفضل لغة حوسبة يمكن استخدامها من أجل أداء/سرعة عاليين لأجهزة [[سيغا ساترن]] -وهي أجهزة Console كانت تشتهر في مجال تطوير وبرمجة الألعاب-. وكذلك لعبة NBA Jam والتي ظهرت عام 1993 كلعبة من نوع [[ألعاب آركيد|Arcade]] ونالت شعبية كبيرة، تعتبر مثالا آخر. واعتبرت لغة التجميع هي لغة التطوير الأساسية على عدة منصات لوقت طويل، منها: [[كومودور 64]]، [[أتاري إس تي]] وكذلك حواسب المنزل من نوع [[زد إكس سبكتروم|إكس سبكتروم]]. وقد تسببت عدم كفاءة لغة [[بيسيك|البيسيك]] -في ذلك الوقت- في استمرار اعتماد تلك الآلات على لغة التجميع، لقد عاب البيسيك سببين: لم يوفر سرعة تنفيذ عالية مع هذه النظم، لم يقدم تسهيلات كافية من أجل أفضل استخدام لإمكانيات [[عتاد الحاسوب|العتاد]] الخاصة بتلك النظم. بعض الأنظمة، وعلى الأخص [[أميغا]]، لديها "[[بيئة تطوير متكاملة]] مع إمكانيات عالية لاكتشاف و [[تصحيح برمجي|معالجة الأخطاء]] وإمكانيات "ماكرو"، مثل المجمعالمُجمع المجاني ASM-One، مقارنة بإمكانيات برنامج [[مايكروسوفت فيجوال ستوديو]] (على الرغم من أن ASM-One يسبق [[مايكروسوفت فيجوال ستوديو]] من حيث وقت الإصدار).
 
وقد تم كتابة المجمعالمُجمع VIC-20 عبر "دون فرينش" ونشرته شركة "فرينش سيلك".وقد تم كتابته في برنامج يبلغ من الحجم 1639 بايت فقط، مما يجعل صاحبه يعتقد أنه أصغر مجمع رمزي تم كتابته في التاريخ. ويدعم المجمعالمُجمع نظم العنونة الرمزية والتعريفات الخاصة بسلاسل الحروف وسلاسل الرموز ذات النظام الـ<nowiki/>[[نظام عد ستة عشري|ست عشري]]. ويسمح المجمعالمُجمع أيضا بتعيرات العناوين Address Expressions والتي يمكن توحيدها Combined مع عمليات: [[جمع|الجمع]]، [[طرح|الطرح]]، [[ضرب|الضرب]]، [[قسمة (رياضيات)|القسمة]]، Logical AND, Logical OR والمعاملات الأسية Exponentiation&nbsp;Operators.
 
=== الاستخدام الحالي ===
سطر 273:
== المصطلحات ذات الصلة ==
 
* عادة ما يطلق على "لغة التجميع" أو "لغة المجمعالمُجمع" الأسماء التالية: assembly, assembler, ASM أو symbolic machine code.وقد أطلق عليها بعض المبرمجين من أجيال [[حاسوب كبير|الحاسب الكبير]] IBM اسم BAL ويعود اختصار الاسم للجملة "لغة التجميع الأساسية" Basic Assembly Language.
 
:
::ملاحظة: إطلاق اسم "مجمع" على "اللغة" هو بالطبع أمر مربك وغامض، لأن "المجمعالمُجمع" هو البرنامج الذي يقوم بتحويل الكود المكتوب بلغة التجميع إلى كود الآلة Machine Code.وقد يرى البعض هذا الأمر على أنه خطأ، وينقصه الدقة. وعلى الرغم من ذلك، فإن ذلك اللفظ شاع استخدامه بين المتخصصين والكتاب على مدى عقود. وبشكل مشابه، قام مصمموا بعض أجهزة الكمبيوتر بإطلاق اسم "المجمعالمُجمع" على "برنامج التجميع" الخاص بهم Assembly Program.
 
* عند عمل المجمع،المُجمع، فإن الخطوة الحسابية التي يقوم بها، والتي تتضمن كل عمليات معالجة الماكرو، تسمى بـ "وقت التجميع" Assembly Time.
* يرجع المسمى "تجميع" Assembly إلى السنوات الأولى لظهور الكمبيوتر (راجع. الكود القصير short code، الكود السريع speed code).
* المجمعالمُجمع العابر Cross Assembler (انظر المترجم العابر Cross Compiler) تشبه وظيفته وظيفة المجمعالمُجمع. لكن تم إطلاق هذا المصطلح عليه، للإشارة أن المجمعالمُجمع يعمل على جهاز كمبيوتر مختلف، عن ذلك الذي سيتم تنفيذ الكود الناتج عليه: الكمبيوتر المستهدف Target System.ولأنه، في الوقت الحاضر، يتم كتابة المجمعاتالمُجمعات بشكل "متنقل" Portable وبلغات عالية المستوى مثل لغة السي C، فإن المجمعاتالمُجمعات الحالية لا تمت لذلك الموضوع بصلة. فأهمية المجمعالمُجمع العابر تظهر بشكل جلي إذا احتاج النظام المستهدف Target System إلى إمكانية تشغيل "المجمعالمُجمع" بنفسه. وهذا هو الحال عادة مع [[نظام مضمن|الأنظمة المضمنة الصغيرة]]. وكذلك، فإن أهم ملمح مميز للـ "مجمع العابر" هو أنه يوفر [[واجهة (حوسبة)|واجهات]] تسهل من نقل الكود إلى المعالج المستهدف Target Processor، بمعنى: أن يكون على [[ذاكرة وميضية]] أو [[ذاكرة القراءة فقط القابلة للبرمجة والمسح]]. ويقوم بتوليد صورة ثنائية Binary Image أو ملف من نوع Intel Hex بدلا من أن يقوم بتوليد ملف مستهدف Object File.
* الـ "توجيه المجمعالمُجمع" Assembler Directive، هو أمر Command يتم توجيهه إلى المجمعالمُجمع. وقد تؤدي هذه الموجهات أي شيء، مثل إخبار المجمعالمُجمع بأن يدمج مع البرنامج ملفات كود أخرى Source Files، أو يخبر البرنامج بتخصيص أماكن معينة في الذاكرة لتحمل بيانات ثابتة Constants.
 
== قائمة بالمجمعاتبالمُجمعات الخاصة بمعمارية الحاسبات المختلفة ==
تحتوي الصفحة التالية على قائمة بأنواع مختلفة من المجمعاتالمُجمعات التي تعمل مع هندسات/أبنية مختلفة من الحواسب، وتحوي القائمة معلومات مرتبطة بكل نوع من أنواع تلك المجمعاتالمُجمعات:
 
* قائمة بالمجمعاتبالمُجمعات Assemblers
 
== مزيد من التفاصيل ==
لقد تم كتابة ما لا يقل عن عشرات من المجمعاتالمُجمعات لكل [[حاسوب شخصي|كمبيوتر شخصي]]، [[حاسوب كبير|حاسب كبير]]، [[نظام مضمن]] ولعبة كونسول Console Game، في الماضي والحاضر. ولمطالعة بعض الأمثلة، راجع قائمة المجمعاتالمُجمعات.
 
وعلى أنظمة [[يونكس|يونيكس]]، غالبا ما يطلع على المجمعالمُجمع التقليدي اسم as، على الرغم من أنه ليس كيان واحد من الكود، لأنه يجري عادة كتابة مجمع جديد لكل بورت Port.وهناك العديد من اصدارات [[يونكس|يونيكس]] تستخدم GAS.
 
لكل مجمع لهجة خاصة Dialect، داخل مجموعة من المجمعاتالمُجمعات.وأحيانا، تستطيع بعض المجمعاتالمُجمعات قراءة اللهجة الخاصة بمجمع آخر، وعلى سبيل المثال، يمكن لمجمع TASM من قراءة كود الـ MASM القديم، لكن العكس ليس صحيحا.ويمتلك مجمعي الـ FASM والـ NASM [[نحو (برمجة)|بناء لغوي]] متشابه، لكن كلا منهم يدعم مجموعة مختلفة من الماكرو مما يجعل من الصعب الترجمة من أحدهم للآخر. وبالطبع فإن الأساسيات تظل واحدة، لكن المميزات المتقدمة Advanced Features تختلف.
 
أيضا، يمكن للغة التجميع أن تكون منقولة Portable عبر عدة أنظمة تشغيل، وعلى [[وحدة معالجة مركزية]] واحدة. فاصطلاحات Conventions استدعاء الوظائف لا تختلف كثيرا بين أنظمة التشغيل المختلفة وأحيانا لا تختلف على الإطلاق، وببعض الحرص، يمكن الحصول على "نقالية" Portability في لغة التجميع، وعادة يتم ذلك عبر الربط مع مكتبة سي C والتي لا تتغير بين نظم التشغيل.
سطر 386:
|}
 
مثال على مجموعة مختارة من التعليمات (من أجل كمبيوتر افتراضي Virtual Computer) مع العناوين المقابلة في الذاكرة حيث يتم وضع كل تعليمة.هذه العناوين ليست ثابتة Static، انظر [[إدارة الذاكرة]]. ويقوم بمصاحبة كل تعليمة مولدة (عبر المجمعالمُجمع) الكود النهائي Object Code والذي يتوائم مع هندسة الكمبويتر الافتراضي Virtual Computer's Architecture.
 
== انظر أيضًا ==
سطر 393:
* [[المفكك|مفكك]]
* [[كمبيوتر الرجل الصغير]]- عبارة عن نموذج لحاسب تعليمي مزود بلغة تجميع ذات قاعدة عشرية Base-10.
* [[المجمع الدقيق|المُجمع الدقيق]]
* [[لغة البرمجة منخفضة المستوى|لغات برمجة منخفضة المستوى]]
* [[قائمة لغات البرمجة]]
سطر 410:
* راندال هايد: فن لغة التجميع.دار "نو سكراتش" للطباعة، 2003. ISBN 1-886411-97-2<br />تتوافر مسودات الكتاب على شبكة الإنترنت في صيغ PDF وHTML
* بيتر نورتون، جون سوتشا، كتاب بيتر نورتون حول لغة التجميع لأجهزة الحاسب الشخصي من نوع IBM، دار برادي للكتب، نيويورك: 1986.
* مايكل سينجر، PDP-11.البرمجة باستخدام لغة المجمع،المُجمع، وتنظيم الآلة Machine Organization، دار جون ويلي وأبناؤه للنشر: نيويورك: 1980.
* دومينيك سويتمان: انظر لـ MIPS وهو يعمل.مورجان كوفان للنشر, 1999.ISBN 1-55860-410-3
* جون والدورن: مقدمة للبرمجة باستخدام لغة التجميع RISC.دار أديسون ويسلي للنشر، 1998. ISBN 0-201-39828-1