زبان ماشین چیست؟ زبان اصلی رایانه بر پایهٔ صفر و یک
چرا رایانه فقط صفر و یک میفهمد؟
برای پاسخ به این پرسش، باید نگاهی به درون رایانه بیندازیم. پردازنده یا «واحد پردازش مرکزی»، از میلیونها قطعهٔ کوچک به نام ترانزیستور ساخته شده است. هر ترانزیستور مانند یک کلید برق عمل میکند؛ میتواند روشن یا خاموش باشد. در دنیای دیجیتال، حالت روشن با عدد 1 و حالت خاموش با عدد 0 نشان داده میشود. به این ترتیب، صفر و یک در واقع نمایشی از وضعیت فیزیکی جریان برق در مدارهای رایانه هستند. هرچه تعداد ترانزیستورها بیشتر باشد، رایانه میتواند تعداد بیشتری از این حالتهای روشن و خاموش را همزمان پردازش کند و در نتیجه، عملیات پیچیدهتری انجام دهد.
به دنبالههای صفر و یک، «کد دودویی» گفته میشود. هر رقم در این کد، یک «بیت» نام دارد که کوتاهشدهٔ عبارت «رقم دودویی» است. برای نمونه، عدد 10 در زبان دودویی به صورت 1010 نوشته میشود و حرف «الف» در استانداردهای رایج، با دنبالهای مشخص از بیتها نمایش داده میشود. تمام دادهها، از یک عکس ساده تا یک فیلم بلند، در حافظهٔ رایانه به صورت میلیونها بیت صفر و یک ذخیره میشوند. وقتی شما دکمهای را روی صفحهکلید فشار میدهید، مدارهای رایانه آن را به یک کد دودویی تبدیل کرده و پردازنده آن را اجرا میکند.
از صفر و یک تا اجرای یک برنامه
شاید این پرسش برایتان پیش بیاید که چگونه دنبالههای طولانی صفر و یک میتوانند یک بازی رایانهای یا یک نرمافزار را اجرا کنند. پاسخ در «دستورالعملهای ماشین» نهفته است. هر پردازنده، مجموعهای از دستورهای ابتدایی دارد که به آنها «مجموعه دستورات» گفته میشود. این دستورها کارهای سادهای مانند جمع کردن دو عدد، مقایسهٔ دو مقدار، خواندن داده از حافظه یا ارسال آن به خروجی را انجام میدهند.
برای نمونه، یک دستور سادهٔ جمع ممکن است به شکل 0110 0001 نوشته شود. بخشی از این عدد، نوع عملیات (مثلاً جمع) و بخش دیگر، آدرس اعدادی را که باید با هم جمع شوند، مشخص میکند. برنامهنویسان حرفهای در گذشته، برنامهها را مستقیماً با همین کدهای دودویی مینوشتند که کار بسیار دشواری بود. اما امروزه، ما از زبانهای برنامهنویسی سطحبالا مانند پایتون یا جاوا استفاده میکنیم. این زبانها دستورهای انسانیتری دارند و یک برنامهٔ دیگر به نام «مترجم» یا «تفسیرگر»، آن دستورها را به زبان ماشین تبدیل میکند تا پردازنده بتواند آنها را اجرا کند. به این ترتیب، زبان ماشین همچنان تنها زبان قابلفهم برای رایانه باقی میماند، اما ما مجبور نیستیم مستقیماً با آن کار کنیم.
| ویژگی | زبان ماشین (دودویی) | زبان برنامهنویسی (مانند پایتون) |
|---|---|---|
| سطح درک | قابلفهم فقط برای پردازنده | قابلفهم برای برنامهنویس و رایانه (پس از ترجمه) |
| نمادها | فقط صفر و یک | کلمات، اعداد، عملگرها و نمادهای گوناگون |
| سرعت اجرا | بسیار سریع، چون مستقیم اجرا میشود | نیاز به زمان ترجمه دارد، اما برای انسان آسانتر است |
| کاربرد برای انسان | بسیار دشوار و زمانبر | آسان و همهگیر |
باورهای نادرست دربارهٔ زبان ماشین
پرسش: آیا زبان ماشین برای همهٔ رایانهها یکسان است؟
پاسخ: خیر. هر خانواده از پردازندهها (مانند پردازندههای شرکتهای اینتل یا ایامدی) مجموعه دستورات مخصوص به خود را دارند. به همین دلیل، یک برنامه که به زبان ماشین برای یک پردازنده نوشته شده است، روی پردازندهٔ دیگر کار نمیکند. به این تفاوت، «معماری پردازنده» میگویند.
پرسش: آیا رایانه فقط از صفر و یک استفاده میکند یا اعداد دیگری هم هست؟
پاسخ: در سطح سختافزار، فقط دو حالت «روشن» و «خاموش» وجود دارد؛ بنابراین پایه و اساس کار، همان صفر و یک است. اما برای سادهتر شدن کار انسان، گاهی از مبناهای دیگر مانند مبناي شانزدهشانزدهی (شانزدهشانزدهی) نیز استفاده میشود که هر رقم آن میتواند یکی از 16 مقدار را نشان دهد و تبدیل آن به دودویی آسانتر است.
پرسش: آیا برنامهنویسان امروزی هنوز از زبان ماشین استفاده میکنند؟
پاسخ: به ندرت. بیشتر برنامهنویسان از زبانهای سطحبالا و گاهی از «زبان اسمبلی» استفاده میکنند که یک مرحله بالاتر از زبان ماشین است و از کلمات کوتاه به جای صفر و یک بهره میبرد. اما در موارد خاص مانند بهینهسازی فوقالعادهٔ سرعت یا برنامهنویسی برای سختافزارهای بسیار ساده، ممکن است مستقیماً با زبان ماشین سروکار داشته باشند.
پرسش: آیا همهٔ دادهها در رایانه به صفر و یک تبدیل میشوند؟
پاسخ: بله. هر نوع دادهای، از یک جملهٔ ساده تا یک تصویر رنگی، به دنبالهای از بیتها تبدیل میشود. برای نمونه، تصاویر به صورت شبکهای از نقاط رنگی (پیکسل) ذخیره میشوند و برای هر پیکسل، میزان رنگهای قرمز، سبز و آبی به صورت عددی بین صفر تا 255 ثبت میشود که خود این عددها هم در حافظه به شکل دودویی ذخیره میشوند.
زبان ماشین، الفبای اصلی ارتباط با رایانه است که بر پایهٔ دو حالت صفر و یک (روشن و خاموش) شکل گرفته است. پردازنده با خواندن دنبالههای دودویی، دستورهای سادهای مانند جمع، تفریق یا انتقال داده را اجرا میکند. اگرچه نوشتن برنامه به این زبان برای انسان بسیار دشوار است، اما ابزارهای امروزی مانند مترجمها، کدهای سطحبالا را به این زبان ترجمه میکنند تا رایانه بتواند آنها را اجرا کند. درک این موضوع نشان میدهد که چگونه سادهترین مفاهیم میتوانند پیچیدهترین فناوریها را ممکن کنند.