کد ماشین(Machine code)

کامپیوترها زبانهایی که ما آدما با هم حرف میزنیم رو نمیفهمن،وبه جاش اونا برای صحبت و درک امور از زبان باینری به نام کد ماشین یا زبان ماشین استفاده می کنند.کد ماشین از دنباله ای از دستورالعمل های ساده رایانه ای تشکیل شده است که هر دستورالعمل به صورت رشته ای از ارقام یا بیت های باینری (به عنوان مثال 1 و 0) بیان می شود.رایانه های مختلف به طور معمول به زبانهای مختلفی از زبان ماشین صحبت می کنند(یا می فهمند).به عنوان مثال یک کامپیوتر ممکنه عملگر ADD(افزودن) رو با 10011111 بفهمه و نشون بده و یه کامپیوتر دیگه همون عمل رو با 000110 بفهمه و نشون بده.نه تنها الگوی بیتها در یک کامپیوتر نسبت به کامپیوتر دیگه می تونه متفاوت باشه، بلکه حتی تعداد بیتهای مورد استفاده برای نشان دادن یک عملکرد هم نیز میتونه متفاوت باشه!!!!درک زبان ماشین توسط کامپیوترها بر اساس سیستم عاملهنگام اجرای یک برنامه سیستم عامل(به عنوان مثال ویندوز ، لینوکس ، OS X و غیره) به عنوان یه میزبان عمل میکنه که به برنامه ها سرویس میده.از جمله این سرویس ها،دسترسی برنامه ها به صفحه کلید، صفحه نمایش و دیسک های سخت است.خب ولی متاسفانه نحوه دسترسی برنامه به اون سرویسها از یک سیستم عامل به یک سیستم عامل دیگه متفاوت است.در نتیجه تفاوت بین زبان های ماشین و نیازمندیهای سیستم عامل، برنامه هایی که به زبان ماشین نوشته شده اند بیشتر بر روی سیستم اجرا کننده برنامه متمرکز هستند تا اینکه چگونه برنامه یک مسئله را حل کند.این به این معنی است که انتقال کد ماشین از یک کامپیوتر به کامپیوتر دیگه بدون ارائه نوع سرویس ترجمه که معمولا به صورت ماشین مجازی است ممکن نیست.(یعنی یک برنامه که روی سیستم عامل ویندوز ارائه شده نمیتونیم روی لینوکس هم اجراش کنیم و اگه بخوایم اینکارو بکنیم باید از ماشین مجازی روی لینوکسمون استفاده کنیم)نوشتن برنامه ها به زبان ماشین کند ، خسته کننده و مستعد خطا است.راه حلش هم باعث کشف زبانهای سطح بالا شد که بیشتر بر روی مشکل تمرکز کرده و کمتر روی سیستم (سخت افزار و سیستم عامل) برنامه که در حال اجراست تمرکز می کند.اما کامپیوترها به طور مستقیم برنامه های نوشته شده به زبان سطح بالا رو اجرا نمیکنن و باید ترجمه بشن.(در این باره مقاله ای منتشر کردم که میتونه درک خوبی بهتون بده)کدها چگونه اجرا میشوند؟کامپایلر برنامه ای است که سایر برنامه های نوشته شده به زبان برنامه نویسی سطح بالا مانند C یا C ++ را به کد ماشین یا زبان ماشین ترجمه می کند.البته زبانهای مثل جاوا و سی شارپ یکم متفاوت ترن. برنامه هایی که به این زبانها نوشته میشن ابتدا به یک نماینده واسط کامپایل میشن(نماینده ای که در جایی بین زبان سطح بالا و زبان ماشین قرار دارد) که اغلب کد ماشین مجازی نامیده می شود(virtual machine code).سپس کد ماشین مجازی وارد برنامه دیگه ای می شه به نام مفسر یا ماشین مجازی (VM ، برنامه ای که پردازنده سخت افزاری را شبیه سازی می کند).نمودار1-کامپالنمودار1:کامپایلر کد منبع C ++ را از فایلی که به cc ختم می شود می خواند و یک پرونده کد ماشین تولید می کند که قابل اجرا است. در رایانه های ویندوزی ، فایلهای اجرایی تولید شده توسط کامپایلر C ++ با .exe خاتمه می یابند. سایر سیستم عامل ها از قراردادهای مختلف نامگذاری پیروی می کنند. سیستم عامل ها قادر به اجرای فایلهای اجرایی بدون پردازش بیشتر هستند.نمودار2-ماشین مجازینمودار2:کامپایل و اجرای برنامه ای که به زبانی نوشته شده که کد ماشین مجازی را تولید می کند. زبانهایی مانند Java و C # ابتدا به کد ماشین مجازی ، یعنی به یک کد ماشین برای یک رایانه مجازی - رایانه ای که واقعاً وجود ندارد ، وارد می شوند. پس از کامپایل کد منبع ، برنامه ای به نام ماشین مجازی (VM) با شبیه سازی عملکردهای یک کامپیوتر واقعی ، کد را اجرا می کندو سپس سیستم عامل، VM را اجرا می کند.نمودار3:مفسرینمودار3:اجرای برنامه ای که به زبان کاملاً تفسیری نوشته شده باشد. زبانهایی مانند Javascript و Perl به هیچ وجه کامپایل نمی شوند. برنامه ای به نام مفسر فایل کد منبع را خط به خط می خواند و هر خط رو اجرا میکند به طور مستقیم. مفسر Javascript در اکثر مرورگرهای وب گنجانده شده است. برای سایر زبانهای تفسیر شده ، سیستم عامل مفسر را به عنوان یک برنامه کاربردی اجرا می کند و باید مفسر روی کامپیوتر نصب شود.هر رویکرد برای اجرای برنامه ای که به زبان برنامه نویسی سطح بالا نوشته شده است دارای مزایا و معایبی است.برنامه های نوشته شده به زبانهایی که کامپایل میشن مثل C و C++، سریعتر از زبانهای نوشته شده به زبانهای با واسط کامپایلری مثل جاوا و سی شارپ و در نهایت هر دو مورد سریعتر از زبانهای مفسری مثل جاوا اسکریپت و perl هستند.و در مقابل برنامه های نوشته شده به زبانهای کامپایلری انعطاف کمتری دارن و فقط روی یم سیستم عامل خاص اجرا میشن به دلایل بالا.ولی زبانهای مفسری این قابلیت رو دارن که روی همه سیستم عاملها اجرا بشن.به طور خلاصه همه زبانها باید به صفر و یک تبدیل بشن تا بتونن اجرا بشن، حالا اینکه سبک چیدمان صفر و یکها و مابقی قوانین برای درک هر کامپیوتر با سیستم عاملهای متفاوت، با هم فرق میکنه مسئله ای هست که باید بهش توجه کنین.دستورالعمل های ماشین چیست؟دستورالعمل های ماشین برنامه ها یا دستورات کد ماشین هستند. به عبارت دیگر ، دستوراتی که در کد ماشین رایانه نوشته شده اند و کامپیوتر میتواند آنها را تشخیص دهد و سپس اجرا کند.دستور العملهای ماشین (machine instruction) دستورات عملیاتی (برنامه) نوشته شده در کد اصلی (کد ماشین) یک ماشین (مانند رایانه یا ربات) که کامپیوتر می تواند آن را تشخیص داده و اجرا کند.یک دستورالعمل ماشین از چندین بایت حافظه تشکیل شده است.اونها به پردازنده کامپیوتر میگن که یک عمل ماشینی انجام بده.CPU به دستورالعمل های دستگاه در حافظه اصلی سیستم نگاه می کند ، یکی پس از دیگری.برای هر دستورالعمل ماشین ، یک عملیات ماشینی را انجام می دهد.دستور العملهای ماشین چهار عمل اصلی دارنچهار مرحله اصلی در چرخه دستورالعمل ماشین وجود دارد:1-مرحله Fetch:پردازنده دستور را از آدرسی که در حافظه دارد می گیرد.این آدرس را در PC (شمارنده برنامه) و IR (ثبت دستورالعمل) ذخیره می کند.PC به دستورالعمل بعدی در پایان عملیات fetch اشاره می کند.2-مرحله Decode: پردازنده دستورالعمل را تفسیر و رمزگشایی می کند. دستورالعمل درون IR رمزگشایی می شود.3-مرحله Execute: واحد کنترل CPU داده ها را به عنوان دنباله ای از سیگنال های کنترل به واحدهای عملکردی مربوط به CPU دیکد(رمزگشایی) می کند. این واحدها اقداماتی را انجام می دهند که دستورالعمل از او خواسته است انجام دهد.4-مرحله Store:این عمل نتیجه ای را که در دستورالعمل بود ایجاد می کند که پردازنده آن را در حافظه اصلی ذخیره می کند. گاهی ممکن است آن را به یک دیوایس خروجی ارسال کند."هر عملكرد كوچك الكترونيكي كه هسته پردازنده مي تواند انجام دهد ، عمليات ماشيني ناميده مي شود. یک پردازنده (یک ماشین) این کارها را همزمان انجام می دهد ، میلیاردها عمل در ثانیه. "امیدوارم که از مقاله خوشتون اومده باشه...کامنت یادتون نره????✌