# لغة الآلة

لغة الآلة أو كود الآلة (بالإنجليزية: Machine code)‏ هي برنامج كمبيوتر مكتوب في تعليمات لغة الآلة يمكن تنفيذه مباشرة من خلال وحدة المعالجة المركزية للكمبيوتر (CPU). تتسبب كل تعليمة في قيام وحدة المعالجة المركزية بأداء مهمة محددة جدًا، مثل التحميل أو القفز $^{[الإنجليزية]}$ أو عملية وحدة الحساب والمنطق على وحدة البيانات في سجل وحدة المعالجة المركزية أو الذاكرة.
كود الآلة عبارة عن لغة رقمية بحتة تهدف إلى التشغيل في أسرع وقت ممكن، ويمكن اعتبارها أدنى مستوى تمثل برنامج كمبيوتر مُترجم أو مُجمع أو كلغة برمجة بدائية تعتمد على عتاد الحاسوب. في حين أنه من الممكن كتابة البرامج مباشرة في كود الآلة، فإنه من الممل والخطأ التعرض لإدارة البتات الفردية وحساب العناوين الرقمية والثوابت يدوياً. لهذا السبب، في السياقات الحديثة نادراً ما يتم كتابة البرامج مباشرة في كود الآلة، ولكن يمكن القيام بها لتصحيح الأخطاء على مستوى منخفض، وإنتاج باتش لبرنامج ما، وتفكيك لغة التجميع.
تتم كتابة الغالبية العظمى من البرامج العملية اليوم بلغات عالية المستوى أو لغة التجميع. يتم بعد ذلك ترجمة الكود المصدري إلى كود الآله القابل للتنفيذ من خلال الأدوات المساعدة مثل المترجم، والمجمع، والرابط، مع الاستثناء المهم للبرامج المفسرة، التي لا تترجم إلى كود الآلة. ومع ذلك، فإن المترجم نفسه، والذي يمكن أن يُرى كمنفذ أو معالج، يقوم بتنفيذ تعليمات الكود المصدري، عادة ما يتكون من كود آلة قابل للتنفيذ مباشرة (تم إنشاؤه من التجميع أو شفرة مصدر لغة عالية المستوى).
إن كود الآلة هو، بالتعريف، أدنى مستوى من تفاصيل البرمجة المرئية للمبرمج، ولكن العديد من المعالجات تستخدم داخليا الكود المصغر أو تحسن تعليمات كود الآلة وتحولها إلى تتابعات من العمليات المصغرة $^{[الإنجليزية]}$، وهذا لا يعتبر بشكل عام رمز الآلة في حد ذاته.

## مجموعة التعليمات

كل معالج أو عائلة معالجات لديها مجموعة التعليمات الخاصة بها. التعليمات هي أنماط من البتات التي تتوافق مع التصميم المادي لأوامر مختلفة إلى الجهاز. وبالتالي، فإن مجموعة التعليمات خاصة بفئة المعالجات التي تستخدم (في الغالب) نفس البنية. غالباً ما تتضمن تصميمات المعالج اللاحقة أو المشتقة كل تعليمات المعالجات السابقة وربما تضيف تعليمات إضافية. من حين لآخر، سيؤدي التصميم التالي إلى إيقاف أو تغيير معنى بعض تعليمات التعليمات البرمجية (عادةً لأنها مطلوبة لأغراض جديدة)، مما يؤثر على توافق التعليمات البرمجية إلى حد ما؛ حتى المعالجات المتوافقة تمامًا تقريبًا قد تظهر سلوكًا مختلفًا بعض الشيء لبعض التعليمات، ولكن نادرًا ما تكون هذه مشكلة. قد تختلف الأنظمة أيضًا في التفاصيل الأخرى، مثل ترتيب الذاكرة أو أنظمة التشغيل أو الأجهزة الطرفية. نظرًا لاعتماد البرنامج على هذه العوامل بشكل طبيعي، لن تعمل الأنظمة المختلفة عادةً على نفس كود الآلة، حتى في حالة استخدام نفس نوع المعالج.
قد تحتوي مجموعة التعليمات الخاصة بالمعالج على كافة التعليمات من نفس الطول، أو قد يكون لها تعليمات متغيرة الطول. تختلف كيفية تنظيم الأنماط اختلافًا كبيرًا مع البنية المحددة، وغالبًا أيضًا مع نوع التعليمة. تحتوي معظم التعليمات على واحد أو أكثر من حقول كود التشغيل التي تحدد نوع التعليمة الأساسية (مثل الحساب، والعمليات المنطقية، والقفز $^{[الإنجليزية]}$، وما إلى ذلك) والتشغيل الفعلي (مثل إضافة أو مقارنة) والحقول الأخرى التي قد تعطي نوع المعامل، أو وضع العنونة، أو موازنة وتسجيل العناوين، أو القيمة الفعلية نفسها (تسمى هذه المعاملات المستمرة الواردة في التعليمة بـ المعاملية أو instantiates).
ليس كل الآلات أو التعليمات الفردية لها معاملات صريحة. تحتوي الآلة المراكمة على مُجمّع مدمج يسفر عن تراكم ضمني لمعظم التعليمات الحسابية. تشتمل المعماريات الأخرى (مثل 8086 و عائلة x86) على إصدارات من تراكمات التعليمات الشائعة، مع اعتبار جهاز التراكم كأحد السجلات العامة من خلال إرشادات أطول. يحتوي الجهاز المكدس $^{[الإنجليزية]}$ على معظم أو كافة المعاملات الخاصة به على مكدس ضمني. غالبًا ما تحتوي تعليمات الأغراض الخاصة أيضًا على معاملات صريحة (على سبيل المثال، تعمل وحدة المعالجة المركزية في بنية x86 على كتابة القيم في أربعة سجلات للمقصد الضمني). هذا التمييز بين المعاملات الصريحة والضمنية مهم في مولدات الكود، خاصة في أجزاء تخصيص المسجل وتتبع النطاق الحي. يمكن لمُحسِّن الشفرة الجيد أن يتتبع المعامِلات الضمنية والصريحة التي قد تسمح بالانتشار المستمر $^{[الإنجليزية]}$ على نحو متكرر، مع طي مستمر $^{[الإنجليزية]}$ للمسجلات (مسجل يُنسب نتيجة تعبير ثابت يتم تحريره باستبداله بذلك الثابت) وتحسينات أخرى في الكود.

## برامج الحاسوب

سميت برامج الحاسوب بهذا الاسم لتمييزها عن مكونات جهاز الحاسوب"الهارد وير" والتي تشمل ما يُعرف باسم لغة الآلة، «البرمجيات» عبارة عن سلسلة مرتبة من التعليمات .
وعادةً ما تكون هذه التعليمات مكتوبة بلغة برمجة عالية المستوى يمكن للإنسان التعامل معها بسهولة وكفاءة وهي أقرب إلى لغة البشر الطبيعية من اللغة البرمجية التي يفهمها جهاز الحاسب وهي لغة الآلة (Machine Language).
ويتم تحويل جميع الجمل البرمجية المكتوبة بلغات برمجة عالية المستوى وتنفيذها جملة جملة باستخدام المفسر (Interpreter) أو تنفيذها دفعة واحدة باستخدام المترجم Compiler.
والشفرة الناتجة من هذا التحويل يُطلق عليها لغة الآلة Machine Language أو شفرة الهدف Object Code. يمكن أيضًا كتابة البرامج باستخدام لغة الأسيمبلي(Assembly)- وهي - عبارة عن ترميز للغة البرمجية التي يفهمها الحاسب باستخدام الأحرف الهجائية الإنجليزية. هذا ويجب تحويل لغة Assembly إلى اللغة البرمجية التي يفهمها الحاسب باستخدام أداة المجمـِّع Assembler