زبان اَسمبلی (به انگلیسی: Assembly language) یا همگذاری یک زبان برنامهنویسی سطح پایین برای رایانهها و دیگر دستگاههای برنامهپذیر است که رابطۀ یک-به-یک با دستورالعملهای زبان ماشین معماری رایانه دارد. هر زبان اسمبلی مختص به یک معماری رایانه خاص است، برخلاف بیشترزبانهای برنامهنویسی سطح بالا که با معماریهای مختلف سازگار هستند ولی برای اجرا شدن به مفسر و مترجم نیاز دارند.
زبان اسمبلی با استفاده از یک برنامه جانبی به نام اسمبلر یا همگذار، به کد ماشین قابل اجرا تبدیل میشود؛ به این فرایند تبدیل، اسمبل کردن (بهانگلیسی: Assembling) گفته میشود.
زبان اسمبلی از یادیارها برای نشان دادن هر دستور ماشین سطح-پایین یا آپکد استفاده میکند. بعضی آپکدها به یک یا چند عملوند به عنوان بخشی ازدستورالعمل نیاز دارند، و بیشتر اسمبلرها میتوانند لیبلها و نمادهایی را به عنوان عملوند، برای نشان دادن آدرسهای حافظه و ثابتهای عددی بپذیرند. ماکرو اسمبلرها نیز قابلیت درشتدستوری (به انگلیسی: Macroinstruction) را شامل میشوند که این امکان را به وجود میآورد که متن یک کد زبان اسمبلی با یک نام از پیش تعیین شده در خلال متن یک کد دیگر استفاده شود. بیشتر اسمبلرها مکانیزمهای اضافی برای تسهیل فرایند توسعه برنامه، کنترل فرایند اسمبل کردن و پشتیبانی از اشکالزدایی ارائه کردهاند.
اسمبلر برنامهای است که با تبدیل یادیارهای دستوری اسمبلی (به انگلیسی: Assembly instruction mnemonics) به آپکدها و جایگزینی شناسهها با آدرسهای حافظه، کد هدف (به انگلیسی:Object code) را به وجود میآورد. استفاده از ارجاعات نمادی از ویژگیهای کلیدی اسمبلرها است که از محاسبات خستهکننده و بهروزرسانیهای دستی آدرسها بعد از تغییر کد برنامه توسط برنامهنویس جلوگیری میکند. بیشتر اسمبلرها از قابلیت ماکرو نیز بهره میبرند که این امکان را به وجود میآورد تا یک نام خاص برای یک تکه کد مشخص شود و سپس از آن نام در قسمتهای مختلف برنامه استفاده شود و در هنگام اسمبل کردن برنامه تکه کد مربوطه جایگزین نام آن شود؛ به عنوان مثال از این روش برای تولید توالیهای دستوری کوتاه رایج در خلال متن برنامه بجای فراخوانی رویهها استفاده میشود.
اسمبلرها از دهه ۱۹۵۰ مورد استفاده قرار گرفتند و نوشتن آنها بسیار راحتتر از نوشتن متجرمها برای زبانهای برنامهنویسی سطح بالا است بطوریکه هر دستور یادیاری و هر آدرس حالت ترکیبی این زبان مستقیماً به یک آپکد زبان ماشین تبدیل میشود. اسمبلرهای جدید، به طور خاص برای معماریهای ریسک، مانند اسپارک و پاور، هممانند معماری ایکس۸۶ و ایکس۸۶-۶۴، با بهینهسازیزمانبندی دستورالعملها باعث استفاده کارآمد از خط لولۀ واحد پردازش مرکزی میشوند.
برخی از رایجترین اسمبلرهای معماری ایکس۸۶ عبارتند از:
دو نوع اسمبلر بر اساس تعداد گذرها از روی کد منبع برای تولید برنامۀ قابل اجرا وجود دارد:
هدف اصلی در استفاده از اسمبلرهای یکبار-گذر، سرعت اسمبل کردن بود، زیرا در گذر دوم به برگرداندن و بازخوانی نوار یا کارت پانچ، که در گذشته برای ذخیرهسازی کدها استفاده میشدند، نیاز بود. این مشکل بعدها با وجود کامپیوترهای جدید برطرف شد. مزیت اسمبلرهای چندبار-گذر این است که در نبود خطاها در کد آبجکت، فرایند پیونددهی سریعتر انجام میشود.
اسمبلرهای پیچیدهتر سطح-بالا انتزاعهای زبانی زیر را فراهم میکنند:
فهرست مطالب:
استفاده از دستورالعمل هاي رشته اي
تعریف رشته
ثبات هاي SI و DI
راه حل های پیشنهادی ماکرو اسمبلر
فلگ جهت
دستورات فلگ جهت
دستورالعمل movs
دستور برای تشخیص اینکه بدانیم آيا بايت بعدي مبدأ همان کاراکتر تهي است
پيشوندهاي تکرار
repe و repne
دستور cmps
تست برای تطبیق
دستورالعمل پويش رشته اي scas
دستورالعمل ذخيره سازي رشته اي stos
دستورالعمل بار کردن رشته اي lods
ترجمه کاراکترها
دستورالعمل Xlat
تبديل يک عدد مکمل دو به يک رشته اسکي
و...