زبان اسمبلی Assembly Language
زبان اسمبلی یا Assembly Language چیست؟
زبان اسمبلی (Assembly Language) یک زبان برنامه نویسی سطح پایین است که نزدیکی بالایی به دستورالعملهای ماشین دارد. این زبان به اختصار با نام ASM نیز شناخته میشود.
ویژگیهای زبان اسمبلی
برخلاف اکثر زبانهای برنامه نویسی سطح بالا که (به واسطه کامپایلرها یا مفسرها) روی معماریهای کامپیوتری مختلف قابل استفاده میباشند هر زبان اسمبلی، به صورت ویژه برای یک نوع معماری کامپیوتر طراحی میشود. بنابراین برنامههایی که به این زبانها نوشته میشوند اصطلاحا پرتابل (قابل حمل) نیستند و برای اجرا شدن روی ماشینی با معماری متفاوت لازم است برای همان معماری مجددا نوشته شوند.
به ازای هر دستورالعمل ماشین، ثبات و … معادلهایی سمبولیک در زبان اسمبلی وجود دارد. هر عمل همراه با یک یا چند عملوند در این زبان یک دستور را تشکیل میدهند.
اسمبلر
دستورات Assembly به منظور آماده شدن برای اجرا، با کمک برنامهای به نام اسمبلر (Assembler) به کد ماشین تبدیل میشوند. این برنامه برای تولید آبجکت کد، نمادهای قابل حفظ کردن و مدهای آدرس دهی و عملیاتهای مختلف را به معادلهای عددی دودویی آن ترجمه میکند. اسمبلرهای سطح بالا (High-level Assembler) ویژگیهای زبان های سطح بالا نظیر تعریف توابع، ساختارهای کنترلی پیشرفتهتر (نظیر IF) و شئ گرایی را با ویژگیهای مرسوم ترکیب میکنند.
فرایند تبدیل دستورات Assembly به کد ماشین را اسمبلینگ (Assembling) سورس کد مینامند. عکس این عمل (تبدیل از زبان ماشین به Assembly) نیز توسط برنامهای موسوم به Disassembler انجام میشود.
مثالی از یک دستور اسمبلی
معمولا در هر دستور Assembly پس از دستورالعمل، لیستی از دادهها یا پارامترها قرار میگیرد. به عنوان مثال در معماری 8086 از نماد MOV برای لود کردن داده در ثباتهای پردازنده استفاده میشود. دستور زیر مقدار هگزادسیمال 61 (معادل عدد دهدهی 97) را در ثبات AL لود میکند:
MOV AL, 61h
این دستور توسط اسمبلر به رشته باینری زیر تبدیل میشود. این رشته به یک پردازنده با معماری x86 اعلام میکند عدد 97 را در ثبات AL قرار دهد. پنج بیت 10110 کد باینری مربوط به این دستورالعمل است و سه بیت بعدی (یعنی 000) مشخصه ثبات AL است. در نهایت 01100001 نیز معادل باینری عدد 97 است.
10110000 01100001
همانطور که مشاهده میکنید دستور اول که به زبان اسمبلی نوشته شده است نسبت به رشته صفر و یک معادل با آن به مراتب خواناتر و قابل فهمتر است. از سوی دیگر دستورات این زبان نسبت به زبانهای برنامه نویسی سطح بالا به زبان ماشین نزدیکتر است و به این ترتیب برنامه نویس در زبان اسمبلی روی آنچه قرار است انجام شود (جزئیات و نحوه دقیق انجام عمل در سطوح پایین) کنترل بیشتری خواهد داشت.
برنامههایی که به یک زبان سطح بالا نوشته میشوند معمولا از نظر کارایی و سرعت به پای معادل همان برنامه که به یک زبان ASM نوشته شده است نمیرسند. بنابراین هرچند کدنویسی به زبان اسمبلی امری طاقت فرسا و زمانبر است اما در مورد کاربردهای خاصی نظیر تعامل مستقیم با سخت افزار و ایجاد برنامههایی که نیاز به بهینه سازی حرفهای دارند استفاده از این زبان مفید خواهد بود.
پیوندهای پیشنهادی تک دیک