زبان ماشین و اسمبلی چیست؟
بعد از این که در مورد زبان های برنامه نویسی مقالات جدایی منتشر کردیم در این مطلب جواب سوال زبان ماشین و اسمبلی چیست؟ را خواهیم داد. اول این نکته رو بگویم که زبان اسمبلی و زبان ماشین، دو زبان کاملا جدا از یکدیگر هستند. پس اگر میخواهید جواب زبان ماشین و اسمبلی چیست؟ را بگیرید تا انتهای مقاله همراه ما باشید.
زبان اسمبلی چیست؟
اسمبلی یک زبان برنامه نویسی سطح پایین برای رایانه ها و دیگر دستگاه های برنامه پذیر است. زبان اسمبلی با استفاده از برنامه اسمبلر یا همگذار، به کد ماشین قابل اجرا تبدیل می شود. به این فرآیند تبدیل، اسمبل کردن گفته می شود. زبان برنامه نویسی اسمبلی بعد از زبان ماشین قدیمی ترین زبان برنامه نویسی سطح پایین است که ساختار و عملکردی وابسته به ماشین دارد و وسیله خوبی برای یادگیری نحوه کار کامپیوتر، سیستم عامل، کامپایلرها و زبان های سطح بالا است.
زبان اسمبلی از یادیارها برای نشان دادن هر دستور ماشین سطح پایین یا آپکد استفاده میکند. بعضی آپکدها به یک یا چند عملوند به عنوان بخشی از دستورالعمل نیاز دارند، و بیشتر اسمبلرها میتوانند لیبلها و نمادهایی را به عنوان عملوند، برای نشان دادن آدرسهای حافظه و ثابتهای عددی بپذیرند. ماکرو اسمبلرها نیز قابلیت درشتدستوری را شامل میشوند که این امکان را به وجود میآورد که متن یک کد زبان اسمبلی با یک نام از پیش تعیین شده در خلال متن یک کد دیگر استفاده شود. بیشتر اسمبلرها مکانیزمهای اضافی برای تسهیل فرایند توسعه برنامه، کنترل فرایند اسمبل کردن و پشتیبانی از اشکالزدایی ارائه کردهاند.
نکته ۱: برنامه های اسمبلی مانند برنامه های سطح بالا به صورت متنی نوشته می شوند.
نکته ۲: هر دستورالعمل زبان اسمبلی یک کد الفبائی کوتاه (mnemonic) از یک دستورالعمل ماشین است، که به این صورت معنی دستور واضح تر از کد زبان ماشین می شود.
نکته ۳: بین عبارات زبان اسمبلی و دستورالعمل های زبان ماشین تناظر یک به یک برقرار است. یعنی هر دستورالعمل اسمبلی دقیقا یک دستورالعمل زبان ماشین را نشان می دهد و بالعکس، در حالیکه در زبان سطح بالا یک عبارت معمولا به چندین دستورالعمل ماشین تبدیل می شود.
نکته ۴: برنامهای که به زبان اسمبلی نوشته میشود شامل مجموعهای از دستورالعملهای پردازنده (یادیارها)، شبه دستورها، کامنتها و دادهها است.
اسمبلر چیست؟
اسمبلر برنامهای است که با تبدیل یادیارهای دستوری اسمبلی به آپکدها و جایگزینی شناسهها با آدرسهای حافظه، کد هدف را به وجود میآورد. استفاده از ارجاعات نمادی از ویژگیهای کلیدی اسمبلرها است که از محاسبات خستهکننده و بهروزرسانیهای دستی آدرسها بعد از تغییر کد برنامه توسط برنامهنویس جلوگیری میکند.
بیشتر اسمبلرها از قابلیت ماکرو نیز بهره میبرند که این امکان را به وجود میآورد تا یک نام خاص برای یک تکه کد مشخص شود و سپس از آن نام در قسمتهای مختلف برنامه استفاده شود و در هنگام اسمبل کردن برنامه تکه کد مربوطه جایگزین نام آن شود؛ به عنوان مثال از این روش برای تولید توالیهای دستوری کوتاه رایج در خلال متن برنامه بجای فراخوانی رویهها استفاده میشود.
اسمبلرها از دهه ۱۹۵۰ مورد استفاده قرار گرفتند و نوشتن آنها بسیار راحتتر از نوشتن متجرمها برای زبانهای برنامهنویسی سطح بالا است بطوریکه هر دستور یادیاری و هر آدرس حالت ترکیبی این زبان مستقیماً به یک آپکد زبان ماشین تبدیل میشود. اسمبلرهای جدید، به طور خاص برای معماریهای ریسک، مانند اسپارک و پاور، هممانند معماری ایکس۸۶ و ایکس۸۶-۶۴، با بهینهسازی زمانبندی دستورالعملها باعث استفاده کارآمد از خط لولهٔ واحد پردازش مرکزی میشوند.
برخی از رایجترین اسمبلرهای معماری ایکس۸۶ عبارتند از:
- مایکروسافت ماکرو اسمبلر
- نتواید اسمبلر
- گنو اسمبلر
- توربو اسمبلر
زبان ماشین چیست ؟
کد ماشین یا زبان ماشین یک مجموعه از دستورالعملهاست که مستقیماً توسط واحد پردازش مرکزی یک کامپیوتر (CPU) اجرا میشوند. هر دستورالعمل یک کار خاص را انجام میدهد.
به عنوان مثال: یک بارگذاری، یک پرش یا یک عملیات ریاضیاتی روی یک واحد از دادهها در یک رجیستر CPU یا حافظه. هر برنامهای که توسط CPU اجرا میشود، از مجموعهای از دستورالعملها تشکیل شده است.
کد ماشین عددی (منظور کد اسمبلی نیست) ممکن است به عنوان پایینترین سطح نمایش یک برنامهٔ کامپیوتری کامپایلشده، (یا سرهمشده) یا به عنوان یک زبان برنامهنویسی وابسته به سختافزار اولیه در نظر گرفته شود. علیرغم اینکه مستقیماً امکان نوشتن برنامهها به صورت کد ماشین عددی وجود دارد، مدیریتکردن بیتهای تک و محاسبهٔ آدرسهای عددی و ثابتها به صورت دستی، خستهکننده و خطاپذیر است. به این دلیل، کد ماشین تقریباً هیچگاه برای نوشتن برنامهها مورد استفاده قرار نمیگیرد.
امروزه تقریباً تمام برنامههای عملی با زبانهای سطح بالاتر یا زبان اسمبلی نوشته میشوند. سپس کد منبع با ابزاری مانند کامپایلرها، اسمبلرها و ارتباطدهندهها با جنبهٔ مهم برنامههای ترجمهشده، که به کد ماشین ترجمه نشدهاند، به کد ماشین قابل اجرا ترجمه میشود. با این حال، خود ترجمهکننده (که ممکن است به عنوان یک اجراکننده یا پردازشکننده دیده شود و دستورالعملهای کد منبع را انجام میدهد)، معمولاً شامل کد ماشین که مستقیماً قابل اجرا باشد (که منشأ گرفته از کد منبع اسمبلی یا زبان سطح بالاست)، است.
تفاوت زبان ماشین و زبان اسمبلی:
- اسمبلی زبان قابل درک برای انسان، اما زبان ماشین، فقط برای ماشین قابل درک می باشد
- کد های اسمبلی، باید به زبان ماشین تبدیل شوند تا برنامه اجرا شود، اما کد های ماشین مستقیما توسط خود cpu اجرا می شوند.
- زبان ماشین، جریان یا استریمی از اعداد صفر و یک می باشد؛ یعنی یک زبان دودویی (باینری) به حساب میاد، در صورتی که زبان اسمبلی یه syntax نمادی دارد؛ یعنی یک کد الفبایی کوتاه (mov)
شباهت های زبان ماشین و زبان اسمبلی:
- هر دو جزو زبان های سطح پایین برنامه نویسی هستند
- هر دو کاملا به معماری CPU بستگی دارند؛ یعنی هر خانواده از پردازنده ها، زبان ماشین و اسمبلی خاص خودشان را دارند
هدف از یادگیری برنامه نویسی اسمبلی:
شاید این سوال ذهن شما رو مشغول کند چرا باید ما زبان برنامه نویسی اسمبلی رو فرا بگیریم. امروزه تولید برنامه ای که کاملا با زبان اسمبلی باشد غیر معمول است، زیرا برنامه نویسی در زبان سطح بالا بسیار ساده تر از اسمبلی است علاوه براین استفاده از اسمبلی قابلیت حمل برنامه به کامپیوترهای مختلف را سخت تر می کند. در حقیقت بندرت کسی کاملا در زبان اسمبلی برنامه می نویسد.
اما چند دلیل برای یادگیری برنامه نویسی اسمبلی وجود دارد مانند :
- زبان اسمبلی وسیله خوبی برای یادگیری نحوه کار کامپیوتر، کامپایلرها و زبان های سطح بالا است و به درک عمیق تر معماری کامپیوتر، مفاهیم سیستم عامل، نمایش داده ها و دستگاه های سخت افزاری کمک می کند که دانستن آنها باعث می شود برنامه نویس از عهده اشکالزدائی و رفع مسائل برنامه نویسی در سطح بالا بهتر برآید و نرم افزارهای پربارتری را در زبان های سطح بالا مانند پیاده سازی کند.
- برنامه های اسمبلی سریع تر، کوچکتر و با توانائی های بیشتر از زبان های دیگر هستند. گاهی نوشتن کد در اسمبلی سریعتر و کوتاهتر از کد کامپایل شده می شود. یک برنامه ویژوال می تواند زیربرنامه های DLL نوشته شده در زبان اسمبلی را برای افزایش سرعت برنامه در حالات بحرانی فراخوانی کند.
- برخی از اعمال در زبان های سطح بالا دشوار یا غیر ممکن است، مانند ارتباط با سیستم عامل یا دسترسی مستقیم به کنترلرها. برنامه های اسمبلی می توانند براحتی از این محدودیت ها عبور کنند.
بر اساس این دلایل، می توان گفت یادگیری برنامه نویسی اسمبلی مفید است. کلا یادگیری هر زبان برنامه نویسی مفید و خوب است.
پیشنهاد میکنم مقالات زیر رو مطالعه کنید :