ما هي لغة التجميع؟

يشار إليها أحيانًا باسم التجميع أو ASM ، لغة التجميع هي لغة برمجة منخفضة المستوى.

يتم تجميع البرامج المكتوبة بلغات التجميع بواسطة مجمع. كل المجمّع لديه لغة التجميع الخاصة به ، والتي تم تصميمها لهندسة كمبيوتر معينة.

لغة الآلة هي مجرد سلسلة من الأرقام ، والتي ليس من السهل على البشر قراءتها. باستخدام ASM ، يمكن للمبرمجين كتابة برامج قابلة للقراءة البشرية تتوافق تقريبًا مع لغة الآلة.

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

لماذا تعتبر ASM لغة "منخفضة المستوى"؟

يُطلق على التجميع لغة برمجة منخفضة المستوى لأن هناك (تقريبًا) علاقة فردية بين ما يخبر الكمبيوتر أن يفعله وما يفعله الكمبيوتر. بشكل عام ، يحتوي سطر واحد من برنامج التجميع على تعليمة واحدة للكمبيوتر بحد أقصى.

كيف يختلف ASM عن اللغة "رفيعة المستوى"؟

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

البرامج المكتوبة بلغات عالية المستوى لن تتوافق أبدًا مع السرعة والكفاءة الأولية للبرامج المكتوبة بالتجميع. تتضمن أمثلة اللغات عالية المستوى Python و Java و JavaScript و Clojure و Lisp.

ما هي لغة "المستوى المتوسط"؟

توفر لغات المستوى المتوسط أو المستوى الأدنى بعض التجريدات عالية المستوى لجعل حياة المبرمج أسهل ، مع توفير إمكانية الوصول إلى العمليات منخفضة المستوى. غالبًا ما يتم استخدامها لكتابة أنظمة التشغيل ، لذلك يطلق عليها أحيانًا لغات برمجة النظام .

يمكن أن تؤدي البرامج المكتوبة بلغات المستوى المتوسط ​​أداءً جيدًا أو تقريبًا مثل البرامج المكتوبة بلغة التجميع. تتضمن أمثلة لغات البرمجة متوسطة المستوى C و C ++ و Ada و Nim و Rust.

هل ASM محمول؟

لا. نظرًا لأن لغات التجميع مرتبطة بهندسة كمبيوتر معينة ، فهي ليست محمولة. يجب إعادة كتابة البرنامج المكتوب بلغة التجميع بالكامل حتى يعمل على نوع آخر من الأجهزة.

تعد قابلية التنقل إحدى المزايا الرئيسية للغات عالية المستوى. غالبًا ما تسمى لغة البرمجة C "التجميع المحمول" لأن برامج التحويل البرمجي C موجودة لكل بنية النظام الحديثة تقريبًا. قد يتطلب البرنامج المكتوب بلغة C بعض التغييرات قبل أن يتم التحويل على جهاز كمبيوتر آخر ، ولكن اللغة الأساسية محمولة.

وبصفة عامة ، كلما كانت اللغة عالية المستوى ، يلزم إجراء تغييرات أقل حتى تعمل على بنية أخرى. اللغات الأقل مستوى - لغة الآلة ولغة التجميع - ليست محمولة.

مثال: مرحبا ، العالم! في التجمع 32 بت ، لنظام التشغيل Windows

هنا هو "مرحبا ، العالم" مكتوبة لمعالج إنتل 32 بت. سيتم تشغيله أيضًا على معالج 64 بت. سنقوم بتجميعها وتشغيلها على نظام التشغيل Windows 10.

 قسم _main extern _printf العام .text _main: استدعاء رسالة الدفع _printf add esp ، 4 رسائل ret: db "مرحبًا ، World!" ، 10 ، 0 

للبدء ، افتح المفكرة. انسخ والصق الشفرة أعلاه في ملف نصي جديد ، واحفظ الملف كـ hello.asm .

لتجميع التجميع ، سوف نستخدم NASM ، مجمع Netwide. يمكن تنزيله على الموقع http://www.nasm.us/.

 nasm -f win32 hello.asm 

عند تشغيل هذا الأمر ، تنشئ NASM ملف كائن. يحتوي ملف الكائن على رمز الجهاز ، لكنه ليس ملفًا قابلاً للتنفيذ تمامًا. يسمى ملف كائن لدينا hello.obj .

لإنشاء الملف القابل للتنفيذ ، سنستخدم الإصدار 32 بت من MinGW (الحد الأدنى من جنو لنظام التشغيل Windows) والذي سيوفر برنامج التحويل البرمجي لـ gcc. يمكن تنزيله على الموقع http://www.mingw.org/.

 gcc -o hello.exe hello.obj 
 مرحبا 
 مرحبا بالعالم! 

مثال: مرحبا ، العالم! في التجمع 64 بت ، لينكس

هنا هو "مرحبا ، العالم" مكتوبة لمعالج إنتل 64 بت. سنقوم بتجميعها وتشغيلها على Linux 64 بت.

 طبع خارجي ؛ وظيفة C printf ، ليتم استدعاؤها. قسم البيانات ، المتغيرات التي تمت تهيئتها msg: db "Hello، world!"، 0؛ تنتهي السلسلة C بـ 0 fmt: db "٪ s"، 10، 0؛ تنسيق printf ، "\ n" ، قسم "0". بدء قسم الكود الرئيسي العالمي ؛ نقطة دخول gcc القياسية الرئيسية:؛ تسمية البرنامج لنقطة الدخول إعداد إطار مكدس ، يجب محاذاة mov rdi ، fmt mov rsi ، msg mov rax، 0؛ يمكن أن يكون أيضًا: xor rax، rax call printf؛ استدعاء C printf وظيفة pop rbp؛ استعادة المكدس mov rax، 0؛ عادي ، لا خطأ ، قيمة الإرجاع ret ؛ إرجاع 

انسخ هذا البرنامج والصقه في ملف جديد يسمى hello.asm .

ثم ، قم بتجميع التجميع باستخدام NASM ، والذي يمكنك تثبيته باستخدام مدير الحزم. على سبيل المثال ، على Ubuntu أو Debian ، يمكنك تثبيت NASM باستخدام apt:

 sudo apt update && sudo apt install nasm 

قم بتشغيل هذا الأمر لإنشاء ملف الكائن الخاص بك:

 nasm -f elf64 hello.asm 

ملف الكائن يدعى hello.o .

بعد ذلك ، استخدم gcc لربط ملف الكائن هذا بالمكتبات اللازمة على جهاز الكمبيوتر الخاص بك ، وتجميعه إلى ملف قابل للتنفيذ يسمى hello :

 مجلس التعاون الخليجي hello.o -o مرحبا 

أخيرًا ، قم بتشغيل الملف القابل للتنفيذ:

 ./مرحبا 
 مرحبا بالعالم! 

للإشارة ، هذا هو نفس البرنامج ، مكتوب في C:

 #include int main () {char msg [] = "Hello world \ n"؛ printf ( "٪ ق \ ن"، جي اس)؛ عودة 0 ؛ } 

  • راجع إجراءات تصحيح الأخطاء للحصول على أمثلة أخرى لرمز التجميع ذي المستوى المنخفض ومعلومات إضافية حول ما يفعله كل روتين.
  • للحصول على أمثلة إضافية عن لغة التجميع ، راجع موقع Happy Codings على الويب.

2GL ، مجمع ، لغة منخفضة المستوى ، لغة الآلة ، مصطلحات البرمجة