در روند ایجاد یک برنامه کامپیوتری، برنامه نویس با مراحل مختلفی روبهرو میشود و متخصصان با بخشهای زیادی در ارتباط هستند، یکی از این بخشها به «زبان ماشین» (Machine Language) مرتبط است. زبان ماشین شامل دستورالعملهای زبانهای برنامه نویسی میشود که مدار پردازش کامپیوتر آنها را میخواند و کدهای برنامه را اجرا میکند. زبان ماشین یک «زبان برنامه نویسی سطح پایین» (Low Level Programming Language) به حساب میآید. در این نوشتار به این سوال پاسخ داده شده است که زبان ماشین چیست و سایر نکات و مباحث مهم پیرامون مفهوم زبان ماشین از جمله «زبان اسمبلی» (Assembly) شرح داده شدهاند.
زبان ماشین چیست ؟
زبان ماشین، یک زبان سطح پایین است که با استفاده از اعداد باینری یا بیتها ساخته و نوشته میشود و کامپیوترها میتوانند آنها را درک کنند. در واقع همانطور که از نام آن پیدا است، زبان ماشین، زبانی مخصوص ماشین یا همان سیستمهای کامپیوتری به حساب میآید. همچنین این زبان با نامهای «کد ماشین» (Machine Code) یا «کد شی» (Object Code) نیز شناخته میشود و درک آن برای انسان بسیار دشوار است. به طور کلی میتوان گفت، تنها زبانی که سیستمهای کامپیوتری، آن را درک میکنند، زبان ماشین به حساب میآید. همه برنامهها و زبانهای برنامه نویسی از جمله «سوئیفت» (Swift)، ++C و سایر زبانها، قبل از پیادهسازی به زبان ماشین تبدیل میشوند.
هنگامی که یک وظیفه خاص، حتی کوچکترین برنامه و فرایندی در کامپیوتر ایجاد میشود، پردازنده ماشین آن را به زبان ماشین تبدیل میکند. کامپیوترها به دلیل اینکه دستگاههایی دیجیتالی هستند، تنها دادههای دودویی یا همان باینری را درک میکنند. در کامپیوتر، تمام دادهها از جمله دادههای فیلمها، برنامهها و تصاویر به صورت باینری نمایش داده میشوند. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی زبان سطح پایین، «زبان سطح میانی» (middle level language) و «زبان برنامه نویسی سطح بالا» (High Level Language) پرداخته شده است. ابتدا به بررسی زبانهای سطح پایین پرداخته میشود.
زبان برنامه نویسی سطح پایین چیست؟
زبانهای برنامه نویسی سطح پایین، نوعی از زبانها هستند که انتزاع سطح پایینی از معماری مجموعه دستورات یارانه را ارائه میدهند. این زبانها دستورات و توابعی دارند که از نظر ساختار شبیه به دستورالعملهای پردازنده هستند. به طور کلی میتوان زبان اسمبلی یا کدهای ماشین را نمونههایی از این زبانها در نظر گرفت. به دلیل وجود انتزاع کم بین این سطح از زبانها و زبان ماشین، گاهی اوقات به عنوان زبانهای نزدیک به سخت افزار نیز در نظر گرفته میشوند. زبانهای سطح پایین میتوانند بدون نیاز به «کامپایلر» (Compiler) و «مفسر» (Interpreter) به کدهای ماشین تبدیل شوند.
«زبانهای برنامه نویسی نسل دوم» (Second-Generation Programming Language | 2GL) یا همان زبانهای اسمبلی از «مترجمی» (Translator) به نام «اسمبلر» (Assembler) استفاده میکنند و کدهای حاصل از آن به طور مستقیم روی پردازنده اجرا میشوند. زبانهای برنامه نویسی سطح پایین میتوانند به سرعت پیادهسازی شوند و همچنین، نیازمند حافظه کمی هستند. اما همین برنامه اگر با زبانی سطح بالا نوشته شود، ممکن است کارایی کمتری داشته باشد و از ظرفیت حافظه بیشتری استفاده کند. زبانهای سطح پایین ساده هستند، اما به دلیل داشتن نمادها و جزئیات زیاد فنی و دشواری به خاطر سپردن آنها، استفاده از این زبانها برای برنامه نویسان ساده نیست.
این سطح از زبانها در مقایسه با زبانهای برنامه نویسی سطح بالا معنای اجرای معماری کامپیوتر را از خود برنامه جدا میکنند و این موضوع باعث ساده شدن توسعه میشود. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی و شرح مفهوم زبان برنامه نویسی سطح میانی پرداخته شده است.
زبان برنامه نویسی سطح میانی چیست؟
زبانهای برنامه نویسی سطح میانی، نوعی از زبانها هستند که دستورالعملهای آنها با استفاده از نمادهایی از جمله حروف، اعداد و کاراکترهای خاص ایجاد میشوند. زبان برنامه نویسی «اسمبلی» مثالی برای این سطح از زبانها در نظر گرفته میشود. البته در بیشتر منابع نیز به عنوان زبانی سطح پایین شناخته شده است و زبان سطح میانی کاربرد زیادی ندارد. در واقع زبان ماشین پایینترین سطح زبان در نظر گرفته میشود و زبانهای دیگری نیز از جمله اسمبلی، «فرترن» (Fortran) میتوانند در گروه زبانهای سطح پایین نیز قرار بگیرند. زبان اسمبلی را میتوان به عنوان مرزی بین زبانهای سطح پایین و سطح بالا نیز در نظر گرفت.
در زبان اسمبلی از کلماتی استفاده شده است که از پیش تعریف شدهاند و با نام «Mnemonic» (نماد) شناخته میشوند. در این زبان برنامه نویسی دستورالعملهای کدهای باینری که در یک زبان سطح پایین وجود داشتند، با نمادها و «عملوندها» (Operand) در زبانهای سطح میانی جابهجا میشوند. اما با این حال، کامپیوترها نمیتوانند این نمادها را درک کنند، بنابراین با استفاده از مترجم اسمبلر این کدها و نمادها به زبان ماشین تبدیل میشوند. مترجم نرم افزای است که کدهای غیر قابل درک برای ماشین را به کدهای زبان ماشین تبدیل میکند.
اسمبلر مترجمی است که کدهای اسمبلی را به عنوان ورودی دریافت میکند و در خروجی کدهای زبان ماشین را ارائه میدهد. این موضوع به این مفهوم است که کامپیوترها زبانهای برنامه نویسی سطح میانی را درک نمیکنند و به یک مترجم برای تبدیل کدهای آنها به زبان سطح پایین یا همان زبان ماشین نیاز دارند. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی و شرح تعریف زبانهای برنامه نویسی سطح بالا پرداخته شده است.
زبان برنامه نویسی سطح بالا چیست؟
زبانهای برنامه نویسی سطح بالا، آن دسته از زبانهایی به حساب میآیند که توسط کاربران و برنامه نویسان قابل فهم و درک هستند. این زبانها به زبانهای انسانی بسیار شباهت دارند و با استفاده از مجموعهای از قوانین گرامری باعث میشوند به راحتی بتوان دستورالعملهای آنها را ایجاد کرد. هر زبان سطح بالا دارای مجموعهای از کلمات از پیش تعریف شده به نام کلیدواژهها و مجموعهای از قوانین نحوی به نام سینتکسها برای ساخت دستورالعملها است. این زبانها به هیچ عنوان توسط کامپیوترها قابل درک نیستند.
برای اینکه زبانهای سطح بالا برای کامپیوتر قابل درک شوند، نیاز است که با استفاده از مترجمهایی از جمله کامپایلر و مفسر به زبانهای سطح پایین قابل درک برای ماشین تبدیل شوند. زبانهای برنامه نویسی از جمله «جاوا» (Java)، ++C، «پایتون» (Python) و سایر موارد، مثالهایی برای زبانهای برنامه نویسی سطح بالا هستند. منابع مختلف درباره جایگاه برخی از زبانها نظرات متفاوتی دارند که زبان C یکی از آنها در نظر گرفته میشود، برخی از منابع آن را در دسته زبانهای سطح پایین در نظر میگیرند و اکثر منابع آن را به عنوان زبانی سطح بالا میشناسند.
زبان فرترن نیز معمولاً در دسته زبانهای سطح پایین است، اما در برخی از منابع به عنوان زبانی سطح بالا نیز در نظر گرفته میشود. همه این زبانها توسط کاربر قابل درک هستند و مانند زبان انسانی انگلیسی نوشته میشوند. در بخش بعدی از مقاله «زبان ماشین چیست» به گردش کار، اجرا و پیادهسازی یک برنامه کامپیوتری پرداخته شده است.
نحوه اجرای یک برنامه کامپیوتری چگونه است؟
روند اجرای یک برنامه به این صورت انجام میشود که پردازنده CPU کدهای ماشین یا دادههای باینری را به عنوان ورودی برنامه پردازش میکند. سپس یک برنامه یا سیستم عامل، خروجی برنامه را از پردازنده CPU دریافت کرده و به صورت بصری نمایش میدهد. به عنوان مثال، کد «اسکی» (ASCII) 01000001
نشان دهنده حرف «A» در زبان ماشین است، اما روی صفحه نمایش کامپیوتر به صورت «A» برای افراد نشان داده میشود. کدهای ماشین مختلف از معماری پردازنده متفاوتی استفاده میکنند، با این حال، در هر صورت و نوع، کدهای ماشین فقط شامل اعداد صفر و یک هستند.
برای مثال، کدهای زبان ماشین پردازنده «Intel x86» که دارای نوع معماری «CISC» و پردازنده «PowerPC» با نوع معماری «RISC» با یکدیگر تفاوت دارند. برای اجرای صحیح برنامهها و تبدیل کدهای سطح بالای نوشته شده توسط انسان به کدهای زبان ماشین، یک «مترجم» مانند «کامپایلر»، «مفسر» یا «اسمبلر» بسته به نوع زبان برنامه نویسی مربوطه، باید مورد استفاده قرار بگیرد و این وظیفه را انجام دهد.
زبان ماشین میتواند بر اساس سیستم عاملهای مختلف نیز تفاوت داشته باشد. به عبارت دیگر یک برنامه در سیستمهای مختلف به زبانهای ماشین متفاوتی تبدیل میشود. به طور مشابه، یک عکس دارای دهها هزار داده باینری است که رنگ هر پیکسل آن را مشخص میکنند. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی نمونههایی از کدهای آن پرداخته شده است.
نمونه هایی از کدهای زبان ماشین
همانطور که در ابتدای یادگیری هر زبان برنامه نویسی از مثال چاپ عبارت «Hello World» استفاده میشود، در این بخش نیز به عنوان مثالی از زبان ماشین این عبارت به صورت زیر نوشته شده است:
01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100
به عنوان مثال دیگری از این زبان سیستمی میتوان به مسئلهای پرداخت که حرف «A» هزار بار در صفحه نمایش نشان داده میشود که کدهای این مثال در ادامه ارائه شدهاند:
169 1 160 0 153 0 128 153 0 129 153 130 153 0 131 200 208 241 96
همانطور که در کدهای بالا مشاهده میشود، این کدها به هیچ عنوان بدون در اختیار داشتن مستندات زبان ماشین مربوطه، توسط انسان و برنامه نویسان زبانهای سطح بالا، قابل درک نیستند. در بخش بعدی از این مقاله، به بررسی روش پیادهسازی کدهای زبان ماشین پرداخته شده است.
روش پیاده سازی کدهای زبان ماشین چگونه است؟
هر مجموعهای از پردازندهها از دستورالعملهای خاصی پیروی میکنند که به طور خاص برنامه نویسی شدهاند و این دستورالعملها توسط کدهای زبان ماشین متفاوتی تنظیم میشوند. برای پیادهسازی برنامهها، همه اجزای برنامههای نوشته شده به زبان ماشین تبدیل و با مقدارهای دودویی نوشته خواهند شد. از آنجایی که هر کلاس پردازنده به یک پیکربندی ساختاری نیاز دارد که با مجموعه دستورالعملهای منحصربهفرد خود تناسب داشته باشد، مجموعه دستورالعملهای اصلی پیکربندی کدهای زبان ماشین به کلاس پردازنده مشابهی مرتبط میشوند. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی کاربردهای آن پرداخته شده است.
کاربردهای زبان ماشین چیست ؟
زبان ماشین کاربردهای بسیاری دارد که رایجترین کابردهای آن در این بخش به طور مختصر ارائه شدهاند:
- زبان ماشین برای پردازش دستورالعملهای انسانی در کامپیوتر مورد استفاده قرار میگیرد.
- پردازشهای دستورالعملهای انسانی تنها در صورتی امکانپذیر هستند که به زبان CPU تبدیل شوند. به همین دلیل زبان ماشین استفاده میشود و کاربرد فراوانی در پردازشهای کامپیوتر دارد.
- همچنین زبان ماشین برای مدیریت و استفاده از حافظه کامپیوتر به صورت کارآمد استفاده میشود. از آنجایی که حافظه کامپیوتر توسط کدهای ماشین به صورت مستقیم در دسترس هستند، چنین فرایندهایی توسط زبان ماشین به صورت یکپارچه انجام میشوند.
ویژگی های زبان ماشین
در این بخش از این نوشتار به طور خلاصه برخی از ویژگیهای مهم زبان ماشین فهرست شدهاند:
- میتوان گفت که زبان ماشین پایینترین سطح زبانی به حساب میآید که دستورالعملهای آن به طور کامل توسط کامپیوتر درک میشوند، همچنین این زبان دیگر نیازی به مفسر، کامپایلر یا اسمبلر ندارد.
- کامپایلرها و مفسرها نقش مهمی بین انسانها و کامپیوترها دارند؛ زیرا میتوانند زبان ماشین را به کدهای زبان برنامه نویسی دیگر تبدیل کنند که برای انسان قابل درک باشند.
- زبان ماشین دنبالهای از «الگو بیتها» (Bit Pattern) است که قابل درک برای کاربران نیستند و فقط کامپیوترها آنها را درک میکنند، به همین دلیل به عنوان کدهای ماشین نیز شناخته میشوند.
- زبان ماشین امکان رفع خطا به کاربر نمیدهد و نمیتوان هیچ تغییری در کدهای آن ایجاد کرد.
- از آنجایی که همه دادههای این زبان در فرمت قابل خواندن برای کامپیوتر هستند، بنابراین، پیادهسازی برنامههای زبان ماشین نسبت به برنامههای نوشته شده با زبانهای برنامه نویسی دیگر سریعتر انجام میشوند.
- زبان اسمبلی برای درک زبان ماشین گزینه خوبی به حساب میآید؛ زیرا این دو زبان شباهت بسیاری با یکدیگر دارند، اما زبان ماشین از زبان اسمبلی نیز در سطح پایینتری قرار دارد.
زبان اسمبلی و زبان ماشین شباهتهای بسیاری با یکدیگر دارند، از این رو در بخش بعدی به تعریف و شرح این زبان پرداخته شده است. البته، در ادامه مقاله «زبان ماشین چیست»، قبل از پرداختن به چیستی زبان اسمبلی، مجموعه آموزشهای مهندسی و علوم کامپیوتر تم آف به علاقهمندان معرفی میشوند.
معرفی فیلم های آموزش مهندسی و علوم کامپیوتر تم آف
دورههای آموزشی در مجموعه تم آف بر اساس موضوع در قالب مجموعههای آموزشی مختلفی دستهبندی شدهاند. یکی از این مجموعهها مربوط به آموزش مهندسی و علوم کامپیوتر است که جهت آشنایی علاقهمندان با این مجموعه آموزشی در این بخش معرفی میشود. در زمان تدوین این مقاله، مجموعه دورههای مهندسی و علوم کامپیوتر تم آف حاوی بیش از ۴۹۸ ساعت محتوای ویدیویی است و ۴۲ دوره مختلف را شامل میشود. دورههای متفاوتی پیرامون آموزش دروس علوم و مهندسی کامپیوتر و زبان ماشین در این مجموعه در دسترس قرار دارند. در ادامه، برخی از دورههای این مجموعه به طور مختصر معرفی شدهاند:
- فیلم آموزش طراحی الگوریتم (طول مدت: ۱۵ ساعت و ۱۲ دقیقه، مدرس: دکتر فرشید شیرافکن): در این دوره آموزشی درس طراحی الگوریتم به دانشجویان و علاقهمندان آموزش داده میشود. درس طراحی الگوریتم، یکی از دروس مهم رشته مهندسی کامپیوتر در مقطع کارشناسی است که یادگیری آن نسبتا سخت به حساب میآید. برای مشاهده فیلم آموزش طراحی الگوریتم + کلیک کنید.
- فیلم آموزش ساختمان داده ها (طول مدت: ۱۰ ساعت و ۲۸ دقیقه، مدرس دکتر فرشید شیرافکن): ساختمان دادهها، یکی از دروس مهم و پایهای دانشگاهی است و به عنوان مبحثی که نکات فراوانی دارد، در کنکور کارشناسی ارشد کامپیوتر و دکتری هوش مصنوعی و نرم افزار از دروس با ضریب بالا به شمار میرود. در این تم آف ساختمان دادهها به طور جامع آموزش داده شده است. برای مشاهده فیلم آموزش ساختمان داده ها + کلیک کنید.
- فیلم آموزش نظریه زبان ها و ماشین ها (طول مدت: ۸ ساعت و ۴۸ دقیقه، مدرس: دکتر فرشید شیرافکن): در این تم آف دانشجویان با سه موضوع «زبان»، «گرامر» و «ماشین» آشنا میشوند. این درس پیشنیاز درس طراحی کامپایلر است. با یادگیری زبانها و گرامرها میتوان نحوه کار کامپایلر و همچنین طراحی زبانهای برنامهسازی را متوجه شد. برای مشاهده فیلم آموزش نظریه زبانها و ماشینها + کلیک کنید.
- فیلم آموزش نظریه زبان ها و ماشین – مرور و تست کنکور ارشد (طول مدت: ۸ ساعت و ۲۰ دقیقه، مدرس: دکتر فرشید شیرافکن): در این دوره آموزشی ابتدا مفاهیم عبارت منظم، زبان منظم، گرامر و ماشین متناهی تدریس شده است و سپس تستهای مربوط به این مفاهیم بررسی شدهاند. برای مشاهده فیلم آموزش نظریه زبانها و ماشین – مرور و تست کنکور ارشد + کلیک کنید.
- فیلم آموزش طراحی و پیاده سازی زبان های برنامه سازی (طول مدت: ۱۰ ساعت و ۳۱ دقیقه، مدرس: دکتر فرشید شیرافکن): در این تم آف نحوه طراحی و پیادهسازی انواع دادهها، دستورات و ساختمان دادهها در چند زبان برنامه نویسی بررسی شدهاند و امتیازها و معایب آنها مقایسه شده است. برای مشاهده فیلم آموزش طراحی و پیادهسازی زبانهای برنامهسازی + کلیک کنید.
- آموزش طراحی کامپایلر (طول مدت: ۱۴ ساعت و ۵۴ دقیقه، مدرس: منوچهر بابایی): این دوره آموزشی برای دانشجویان و علاقهمندان به طراحی کامپایلر مناسب است. همچنین این درس یکی از دروس مهم رشته کامپیوتر در مقطع کارشناسی به حساب میآید. برای مشاهده فیلم آموزش طراحی کامپایلر + کلیک کنید.
حال پس از معرفی مجموعه آموزشهای مهندسی و علوم کامپیوتر، در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی زبان اسمبلی پرداخته شده است.
زبان اسمبلی چیست؟
اسمبلی یکی از سطح پایینترین زبانهای برنامه نویسی به حساب میاد که بسیار نزدیک به زبان ماشین است و با ترجمه کلمه به کلمه کدهای این زبان به کدهای باینری، زبان ماشین بدست میآید. دستورهای این زبان برنامه نویسی، به کدهای ماشین و سخت افزار کامپیوتر بسیار نزدیک است و شباهت بالایی با زبان ماشین دارند. به همین دلیل یادگیری این زبان ساده نیست و فقط در برخی موارد خاص و منحصربهفرد مورد استفاده قرار میگیرد.
برخی از کاربردهای زبان اسمبلی در قطعات کامپیوتر از جمله پردازنده CPU و حافظه کامپیوتر است. برای تبدیل این زبان به زبان ماشین از ابزار مخصوص به آن یعنی همان اسمبلر استفاده میشود. در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی ویژگیهای زبان برنامه نویسی اسمبلی پرداخته شده است.
ویژگی های زبان برنامه نویسی اسمبلی
در این بخش از مقاله به طور خلاصه به بررسی انواع ویژگیهای زبان برنامه نویسی اسمبلی پرداخته شده است. این ویژگیها در ادامه فهرست شدهاند:
- زبان اسمبلی از نمادها، کدها و عددهایی برای ایجاد برنامهها و نشان دادن انواع دستورالعملهای گوناگونی استفاده میکند که توسط انسانها قابل خواندن هستند.
- دستورالعملهای زبان اسمبلی دارای سینتکسهایی بسیار شبیه به زبان انگلیسی هستند.
- برای کدنویسی با زبان برنامه نویسی اسمبلی، برنامه نویس باید دانشی نیز درباره سخت افزار دستگاه، مانند معماری، «ثباتهای» (Register) موجود و سایر موارد داشته باشد.
- پیادهسازی برنامههای زبان اسمبلی کند است؛ زیرا باید برای اجرا به وسیله یک مترجم به زبان ماشین تبدیل و سپس پیادهسازی شود تا دستگاه بتواند کدهای آن را درک کند.
- کدهای زبان اسمبلی توسط انسانها درک میشوند و قابل یادگیری هستند، اما این زبان به صورت کلی، زبان برنامه نویسی دشواری به حساب میآید
- کدهای زبان اسمبلی به سطح سخت افزار نزدیک هستند، بنابراین این زبان، یک زبان وابسته به سخت افزار در نظر گرفته میشود.
- به دلیل اینکه کدهای این زبان به صورت دودویی و صفر و یکی نوشته نشدهاند، ویرایش و اصلاح آنها توسط برنامه نویس امکانپذیر است.
تفاوت زبان اسمبلی و زبان ماشین چیست ؟
تفاوتهای بسیاری بین زبان اسمبلی و زبان ماشین وجود دارند. باید به این نکته مهم نیز توجه داشته که زبان ماشین پایینترین سطح برنامه نویسی است و همچنین از زبان اسمبلی نیز سطح پایینتری دارد و نباید این دو زبان به اشتباه و به جای یکدیگر مورد استفاده قرار بگیرند. در ادامه به طور جامع به تفاوتهای میان آنها پرداخته شده است:
- زبان ماشین یک زبان برنامه نویسی سطح پایین است که با استفاده از اعداد باینری و بیتها نوشته میشود و فقط کامپیوترها قابلیت خواندن آنها را دارند. اما زبان اسمبلی، زبان برنامه نویسی است که انسان قابلیت درک آن را دارد و توسط کامپیوترها قابل درک نیست. این زبان برای کاربردهای خاص از جمله برنامه نویسی یک چیپ کامپیوتری یا یک سخت افزار مورد استفاده قرار میگیرد. کدهای زبان اسمبلی با استفاده از اسمبلر به کدها و دستورالعملهای زبان ماشین تبدیل میشوند.
- زبان ماشین شامل اعداد دودویی یعنی صفر و یک، اعداد اعشاری هگزا دسیمال و اکتال دسیمال میشود که فقط توسط کامپیوتر قابل درک هستند و انسان توانایی درک آنها را ندارد. اما در زبان اسمبلی «نمادهایی» (Mnemonic) از جمله Mov ،Add ،Sub ،End و سایر موارد وجود دارند که برای انسان قابل درک هستند و میتوان در صورت نیاز از آنها استفاده کرد.
- تصحیح خطاها و ویرایش کدها در زبان ماشین امکانپذیر نیست، اما زبان اسمبلی دارای مجموعه دستورالعملهای رایجی است و توانایی تصحیح خطاها و ویرایش برنامه در آن وجود دارد.
- زبان ماشین، زبانی «وابسته به پلتفرم» (Platform Dependent) است و توسط انسانها قابل درک نیست. اما سینتکس زبان برنامه نویسی اسمبلی نزدیک به زبان انگلیسی است و به راحتی توسط انسانها درک میشود.
- یادگیری زبان ماشین برای انسان ممکن نیست، زیرا به خاطر سپردن کدهای آن دشوار است و فقط برای ماشین عملیات انجام میدهد. به خاطر سپردن زبان اسمبلی ساده است و در دستگاهها و اپلیکیشنهای مبتنی بر «ریزپردازندهها» (Microprocessor) و سیستمهای «بلادرنگ» (Real Time) کاربرد دارد.
- در زبان ماشین همه دادهها در فرمت باینری نمایش داده میشوند و این موضوع باعث افزایش سرعت پیادهسازی برنامههای این زبان خواهد شد. همچنین، نسبت به زبان ماشین، سرعت پردازش برنامههای زبان اسمبلی پایینتر است.
- دنباله بیتها در زبان ماشین برای دادن دستورات استفاده میشود. عدد صفر نشاندهنده حالت خاموش یا غلط است، در صورتی که عدد یک حالت صحیح یا درست را نشان میدهد. برنامههای زبان ماشین برای تبدیل زبانهای سطح بالا به زبان ماشین به پردازنده CPU وابسته هستند. در زبان اسمبلی به جای استفاده از دنبالههای «خامی» (Raw) از بیتها، از نمادها و سمبلها استفاده میشود. بنابراین، نیازی نیست که کاربران «کدهای عملیاتی» (Op-Code) زبان اسمبلی را به خاطر داشته باشند. در زبان اسمبلی کاربران میتوانند کدها را به زبان ماشین نگاشت کنند و این کدها نسبت به کدهای زبان ماشین کمی خواناتر هستند.
- اولین نسل از زبانهای برنامه نویسی، زبانهای ماشین هستند که نیازی به مترجم ندارند. دومین نسل از زبانهای برنامه نویسی شامل زبانهای اسمبلی میشوند که از اسمبلر به عنوان مترجم برای تبدیل کدها به زبان قابل فهم برای ماشین استفاده میکنند.
- زبان ماشین وابسته به سخت افزار است، به همین دلیل امکان تغییر و ویرایش کدهای آن وجود ندارد. زبان اسمبلی «قابل انتقال» (Portable) نیست و همچنین وابسته به ماشین است و میتواند به راحتی ویرایش شود و تغییر پیدا کند.
- در سینتکس زبان ماشین، احتمال وجود خطا زیاد است. اما در مقایسه با زبان ماشین، احتمال خطاهای کمتری در سینتکس زبان اسمبلی وجود دارد.
در ادامه مقاله «زبان ماشین چیست» به بررسی روش نوشتن کدهای زبان ماشین پرداخته شده است.
روش نوشتن کدهای زبان ماشین چگونه است؟
کدهای ماشین با استفاده از روشهای گوناگونی میتوانند نوشته شوند که در ادامه برخی از این روشها فهرست شدهاند:
- در ابتدا برای نوشتن کدهای زبان ماشین از «گزاره سوییچ» (Switch Statement) استفاده میشد. این عبارت میتواند دنبالهای از صفر و یکها ایجاد کند. این نوع کدها تا سال ۱۳۴۹ شمسی (۱۹۷۰ میلادی) و امروزه کاملاً منسوخ شدهاند.
- میتوان از ویرایشگر «Hex Editor» برای نوشتن کدهای زبان ماشین استفاده کرد. این ابزار به کاربران امکان استفاده از کدهای عملیاتی را به جای اعداد دستوری میدهد.
- با استفاده از زبان اسمبلی میتوان کدهای ماشین را ایجاد کرد. زبان اسمبلی از کدهای عملیاتی سادهتر است. سینتکسهای این زبان از کدهای ماشین سادهتر هستند و از کدهای زبانهای سطح بالا دشوارتر به حساب میآیند.
- استفاده از یک زبان برنامه نویسی سطح بالا به کاربران این امکان را میدهد که بتوانند از کدهایی استفاده کنند که خواندن و نوشتن آنها سادهتر است. سپس با استفاده از یک مترجم این کدها به زبان ماشین تبدیل میشوند.
در بخش بعدی از مقاله «زبان ماشین چیست» دستوالعملهای رایج کدهای زبان ماشین مورد بررسی قرار میگیرند.
دستورالعمل های رایج کدهای ماشین کدامند؟
معمولاً کدهای ماشین انواع دستورالعملهای گوناگونی ارائه میدهند که در ادامه این بخش به صورت خلاصه ارائه شدهاند:
- «عملیات حسابی» (Arithmetical Operation): جمع، تفریق، ضرب و تقسیم
- «عملیات منطقی» (Logical Operation): «اتصال» (Conjunction)، «تفکیک» (Disjunction) و «نفی» (Negation)
- عملیات انجام شده روی بیتهای تکواحدی: شیفت به راست و شیفت به چپ
- استفاده از حافظه در عملیات: کپی کردن مقداری از یک ثبات به ثبات دیگر
- عملیات مقایسهای بین دو مقدار: بزرگتر، کوچکتر و مساوی
- عملیات ترکیب دو مقدار: اضافه کردن، مقایسه و کپی مقدارها
- عملیات عمل کننده روی جریان کار برنامه: پریدن به آدرس مورد نظر
- عملیات تبدیل نوع دادهها: برای مثال، تبدیل یک مقدار صحیح ۳۲ بیتی به یک مقدار صحیح ۶۴ بیتی یا تبدیل مقدارهای اعشاری به مقدارهای عدد صحیح به وسیله «Truncating»
بسیاری از پردازنده های مدرن از «میکرو کدها» (Microcode) برای برخی از دستورات استفاده میکنند. این موارد اغلب با معماری «مجموعه دستورات محاسباتی پیچیده» (Complex Instruction Set Computing | CISC) انجام میشوند. این معماری یکی از طراحیهای پردازنده است و طبق جمع کردن مجموعهای از دستورات سطح پایین به عنوان تنها یک دستور ساخته میشود. در بخش بعدی از این مقاله، انواع دستورالعملهای زبان ماشین بررسی میشوند.
دستورالعمل زبان ماشین چیست ؟
هر پردازنده یا خانوادهای از یک پردازنده دارای مجموعهای از دستورالعملهای مخصوص به زبان ماشین خود است. آنها میتوانند توسط دستورات مختلف مخصوص به خود ترجمه شوند. مجموعه دستورالعملهایی که مختص به یک پردازنده یا خانوادهای از پردازندهها است، دارای دستورات مشابهی هستند. پردازندههای جدید اغلب همه این دستورالعملها را کپی میکنند، به عبارت دیگر، پردازندههایی که سعی میکنند شبیه به پردازندههای اصلی باشند، میتوانند تمام دستورات آنها را نیز کپی کنند.
معمولاً پردازندههای جدید، دستورالعملهای بیشتری دارند که در پردازنده اصلی وجود ندارند. گاهی نیز پردازندههای جدید معنی برخی از دستورالعملهای اصلی را تغییر میدهند و ممکن است زیاد پشتیبانی نشوند. این موارد میتوانند سازگاری کدها را تغییر دهند. گاهی برخی از کدهای قدیمی روی پردازندههای جدید کار نمیکنند. پردازندههایی که مشابه هستند گاهی اوقات متفاوت عمل میکنند که این موضوع در برخی از موارد باعث ایجاد مشکل میشود.
ممکن است بسیاری از سیستمها از جهتهای دیگری نیز متفاوت باشند، برای مثال، روش دسترسی به حافظه یا ترتیب آنها به صورتهای مختلف انجام شوند. سخت افزارهای کامپیوتر میتوانند با رویکردهای متفاوتی به برنامهها متصل شوند، همچنین، دسترسی به سخت افزارهای دیگر تغییر پیدا کند. یک برنامه به طور معمول با چنین عواملی در ارتباط است، به همین دلیل برنامههای سیستمهای مختلف معمولاً با کدهای یکسانی اجرا نمیشوند. این موضوع معمولاً زمانی صادق است که از پردازندههای یکسان استفاده شود.
اکثر دستورالعملها دارای یک یا چندین فیلد کدهای عملیاتی یا همان Opcode هستند. آنها دستورالعملهای اصلی را مشخص میکنند. فیلدهای دیگر ممکن است، نوع عملوندها، روش آدرسدهی و سایر موارد را مشخص کنند. همچنین ممکن است دستورالعملهای خاصی وجود داشته باشند که در Opcode قرار دارند و «فوری» (Immediate) نامیده میشوند. طراحی پردازنده میتواند با روشهای مختلفی انجام شود، برای مثال، دستورالعملهای متفاوت دارای طولهای مختلفی هستند.
همچنین، این دستورالعملها میتوانند طولهای یکسانی نیز داشته باشند. اگر همه دستورالعملها طول یکسانی داشته باشند، طراحی پردازنده سادهتر انجام میشود. بخش بعدی از مقاله «زبان ماشین چیست» به بررسی مثالهایی از زبان ماشین اختصاص داده شده است.
مثال هایی از کدهای زبان ماشین
در این بخش به مثالهایی از کدهای معماری «MIPS» پرداخته شده است و این معماری کامپیوتر دستورالعملهای ۳۲ بیتی دارد. نوع کلی این دستورالعملها در فیلد op
یا همان «Operation» قرار دارند. بزرگترین دستورالعمل آن دارای ۶ بیت است. دستورالعملهای J-type
که یک دستورالعمل «پرش» (Jump) و I-type
که یک دستورالعمل فوری به حساب میآیند در فیلد op
قرار دارند. همچنین، دستورالعملهای R-type
یا همان ثباتها شامل فیلد funct
میشوند. این فیلد، عملکرد دقیق کدها را تعیین میکند. در کدهای زیر فیلدها با انواع خود نشان داده شدهاند:
6 5 5 5 5 6 bits [ op | rs | rt | rd |shamt| funct] R-type [ op | rs | rt | address/immediate] I-type [ op | target address ] J-type
در مثال فوق rs
، rt
و rd
نشاندهنده عملوند ثباتها هستند. shamt
میزان شیفت را نشان میدهد. فیلدهای address
یا immediate
به طور مستقیم شامل عملوندها میشوند. در مثال بعدی، نشان داده خواهد شد که چگونه ثباتهای ۱ و ۲ به یک برنامه اضافه میشوند، نتیجه نهایی نیز در ثبات ششم ذخیره میشود.
[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binary
در مثال زیر، مقداری در ثبات هشتم بارگذاری خواهد شد. این مقدار باید از سلول حافظه ۶۸ بعد از مکان فهرست شده در ثبات سوم گرفته شود.
[ op | rs | rt | address/immediate] 35 3 8 68 decimal 100011 00011 01000 00000 00001 000100 binary
در ادامه و به عنوان مثال آخر این مبحث، با استفاده از کدهای زیر به آدرس ۱۰۲۴ پرش انجام شده است:
[ op | target address ] 2 1024 decimal 000010 00000 00000 00000 10000 000000 binary
در بخش بعدی از مقاله «زبان ماشین چیست» به بررسی درس «نظریه زبانها و ماشینها» در دانشگاهها پرداخته شده است.
درس نظریه زبان ها و ماشین ها
درس نظریه زبانها و ماشینها یکی از دروس مهم و پایهای رشتههای مهندسی کامپیوتر و فناوری اطلاعات در مقطع کارشناسی به حساب میآید. درک زبان ماشین یکی از مسائل مهم رشتههای کامپیوتر و مرتبط با آن است؛ زیرا یک متخصص در این حوزه، حتی اگر در زمینه زبانهای برنامه نویسی سطح پایین نیز فعالیتی نداشته باشد، باید با تئوری و روند کارکرد و پیادهسازی یک برنامه آشنا باشد. با وجود دانستن این علم درک برنامه نویسی و روش عملکرد برنامههای کامپیوتری برای فرد سادهتر خواهد شد. این دوره از مقطع کارشناسی ارتباط بسیاری با نظریه یا تئوری محاسبات نیز دارد.
این درس، انتزاعات مختلف محاسبات را در فرم ماشینهایی با قابلیتهای متفاوت معرفی میکند و همچنین به طور رسمی مفهوم گرامر و زبانها در کامپیوتر را مورد بررسی قرار میدهد. در درس نظریه زبانها و ماشینها، ارتباط بین گرامر و زبان برنامه نویسی در کامپیوتر به طور جامع بررسی میشود و انواع محاسبات در زمینه زبان ماشین به دانشجویان معرفی خواهد شد. درس دیگری به نام زبان اسمبلی نیز در مقطع کارشناسی رشته کامپیوتر آموزش داده میشود که به طور جامع مسائل مربوط به زبان اسمبلی و روش کدنویسی آن را دربرمیگیرد. یادگیری این درس نیز کمک بسیار زیادی به درک زبان ماشین خواهد کرد.
جمعبندی
در برنامه نویسی با هر زبانی، زبانهای سطح پایین مانند زبان ماشین یکی از بخشهای اصلی این مهارت در نظر گرفته میشوند و بهتر است که برنامه نویسان با چیستی آن و نوع تبدیل کدها به این زبان برای درک برنامه نوشته شده توسط کامپیوتر آگاهی داشته باشند. در مقاله «زبان ماشین چیست» پس از بررسی مفهوم، ویژگیها، اهداف و دلیلهای استفاده از زبان ماشین در برنامه نویسی به بررسی تفاوت آن با زبانهای سطح میانی و سطح بالا و همچنین زبان سطح میانی، پرداخته شده است.
همچنین، در آخرین بخش از این مقاله، به صورت کوتاه درس نظریه زبانها و ماشینها در مقطع کارشناسی مورد بررسی قرار گرفته است. در نهایت، سعی شد در این مقاله فیلمهای آموزشی که بیشترین ارتباط را با موضوع زبان ماشین دارند نیز برای علاقهمندان و توسعه دهندگان معرفی شوند.