الجمعة، 4 يناير، 2013

شرح ماهي لغة التجميع Assembly




ويتكون البرنامج المكتوب بلغة التجميع من سلسلة من التعليمات-سهلة الحفظ Instructions—Mnemonics والتي تماثل دفعة من التعليمات التنفيذية Executable, وعندما يتم ترجمة هذا الكود عبر "مجمع" Assmbler", يمكن هنا تحميل هذا الكود إلى الذاكرة وتنفيذه.

وعلى سبيل المثال, فإن معالجا Processor من نوع x86/IA-32 يمكنه تنفيذ التعليمات التالية والمكتوبة بكود ثنائي Binary يمثل لغة الآلة Machine Language (انظر لغة التجميع الخاصة بمعالج x86):

Binary: 10110000 01100001 (Hexadecimal: B0 61)
ومع قرائتك للسطر السابق تشعر بأن تمثيل الكود عبر لغة التجميع لهو أسهل للقراءة وللتذكر (مثال باستخدام تراكيب شركة إنتل, انظر Mnemonic):

MOV AL, #61h
وتعني هذه التعليمات ما يلي:

انقل القيمة 61h (والتي تعني بالنظام العشري القيمة "97"؛ حيث تعني اللاحقة h النظام الست-عشري Hexadecimal؛ وتعني علامة الجنيه # أن يتم نقل "القيمة 97" ولا يعني أن يتم نقل "القيمة المخزنة في عنوان الذاكرة رقم 97") إلى "سجل المعالج" Register ذو الاسم AL.
الأمر "mov" يكتب بكود التشغيل بالشكل 1011, ويقوم بنقل Move القيمة المذكورة بمعامل Operand الأمر الثاني, إلى السجل المذكور عبر المعامل الأول.وقداختار "مصمم مجموعة التعليمات" تلك الحروف الثلاثة mov لتمثيل الأمر, مما يجعل الأمر سهلا على المبرمج لتذكر واستخدام الأمر.ويتم الفصل بين مجموعة معامل (برمجة حاسوب) ‏(en)‏ والمعطيات التي تتبع شفرة التشغيل عبر فاصلة ","؛ إن ما سبق لهو نموذج جيد لجملة Statement من جمل لغة التجميع.

وأثناء الممارسة يقوم العديد من المبرمجين بإسقاط الكلمة Mnemonic (أمر سهل التذكر) وإطلاق وصف "كود تشغيلي" Opcode على اللفظة "mov", وذلك خطأ تقني بكل تأكيد.فعندما يفعلون ذلك, فهم يشيرون إلى الكود الثنائي والذي تمثله لغة التجميع.ولتوضيح الأمر بشكل آخر, إن "الأمر سهل التذكر" Mnemonic مثل الأمر mov ليس كودا تشغيليا Opcode, لكنه يمثل أو يرمز إلى الكود التشغيلي, لذلك فعندما يشير أحدهم إلى "الكود التشغيلي للأمر mov" فهو يقصد إلى الإشارة للكود التشغيلي الثنائي Binary ولا يشير إلى الأمر المكتوب بلغة التجميع.وحاليا, يوجد عدد محدود من المبرمجين الذين يحتاجون للتعامل مع النماذج الثنائية التي تمثل كود التشغيل الخاص بتعليمات معينة, فهذا التمييز لم يعد يحتاجه أحد بين المبرمجين -لم تعد عملية البرمجة التي تطورت إمكانياتها تحتاجه-, لكنه مطلوبا جدا في أوساط مصممي المعالجات Processor Designers.

ويتم تحويل لغة التجميع إلى لغة الآلة عبر "المجمع" Assembler, وتتم العملية العكسية عبر برنامج يدعى "فك التجميع" Disassembler.وبخلاف اللغات عالية المستوى, فدائما ما يكون هناك توافق Correspondence بين التعليمات البسيطة المكتوبة بلغة التجميع وبين التعليمات المكتوبة بلغة الآلة.إلا أنه, وفي بعض الحالات, يمكن للمجمع أن يخرج تعلميات من نوع Pseudoinstructions, والتي يتم تمثيلها عبر "عدة" تعليمات بلغة الآلة, من أجل القيام بوظائف يشيع الاحتياج لها.وعلى سبيل المثال, بفرض أن هناك آلة ينقصها الأمر Branch-if-greater-or-equal "انتقل لمكان آخر إذا تساوت القيمة عن x أو زادت عن x" في مجموعة أوامر المجمع الخاص بها, يمكن لحل هذه المشكلة, أن يقوم المجمع بتوفير تعليمات Pseudoinstructions تجمع بين الأمرين "Set if less than" و"branch if zero" -الأمر الأخير يعمل مع ناتج الأوامر التي تسبقه-.وتوفر معظم المجمعات ذات "المميزات الكاملة" Full-Featured, لغة ماكرو Macro ثرية (والتي يتم مناقشتها أدناه) والتي يتم استخدامها من قبل الشركات Vendors والمبرمجين لإنتاج كود وتسلسل بيانات أكثر تعقيدا.

غني عن الذكر, أن كل بناء حاسوبي وكل معالج له لغة الآلة الخاصه به. وعلى هذا المستوى, تكون كل تعليمة Instruction ممثلة بشكل بسيط بحيث يتم تنفيذها من خلال عدد صغير نسبيا من الدوائر الإلكترونية Electronic Circuits.وتختلف أجهزة الكمبيوتر باختلاف نوع وعدد العمليات التي تدعمها.وعلى سبيل المثال, فإن آلة جديده من نوع 64 بت تتكون من نوع مختلف من الدوائر التي تمتلكها آلة من نوع 32 بت.وقد يختلفان أيضا في أحجام وأعداد المسجلات Registers في كل منهما, وقد يختلفان أيضا في تمثيل البيانات داخل مخازن البيانات -المخازن مثل: الذاكرة Memory, المسجلات Registers-.وفي حين أن معظم أجهزة الكمبيوتر التي تستخدم في الأغراض العامة قادرة على تنفيذ نفس الوظائف, فإن طريقة أداء كل جهاز تختلف عن بقية الأجهزة؛ وتعكس لغات التجميع الخاصة بكل منهم هذا الاختلاف.

وقد تحتوي مجموعة واحدة من أوامر لغة التجميع "Instruction Set" مجموعات متعددة من التراكيب اللغوية التي تستخدم في كتابة الأوامر Mnemonics. وفي مثل هذه الحالات, فإن المجموعة الأكثر استخداما هي تلك التي توفرها الشركة المصنعة -للنظام الحاسوبي- وتستخدمها في وثائق منتجها Documentation.

ليست هناك تعليقات:

إرسال تعليق