زبان اسمبلی
کاربرد زبان اسمبلی > کاربرد کنونی

همواره بحث‌هایی دربارهٔ کاربردی بودن و نمایش زبان اسمبلی در مقابل زبان‌های سطح بالا بوده‌است.
اگرچه در جایگاه‌های مخصوصی که اهمیت دارند، زبان اسمبلی استفاده می‌شود (بالا را مشاهده کنید)،  اما ابزارهای دیگری برای بهینه‌سازی وجود دارند.
در ژوئیه ۲۰۱۷ شاخص تیوبی رتبهٔ محبوبیت زبان برنامه‌نویسی، زبان اسمبلی در رتبهٔ ۱۱ بالاتر از مثلاً ویژوال بیسیک بود. اسمبلر می‌تواند برای بهینه‌سازی سرعت یا بهینه‌سازی اندازه استفاده شود. در حالت بهینه‌سازی سرعت، کامپایلرهای بهینه‌ساز مدرن مدعی می‌شوند که زبان‌های سطح بالا را به کدهایی تبدیل می‌کنند که می‌توانند به سرعت اسمبل با دست نوشته شده اجرا شوند، گرچه مثال‌های خلاف هم می‌توانند پیدا شوند. پیچیدگی پردازنده‌های مدرن و سیستم‌های فرعی حافظه‌ها، بهینه‌سازی مؤثر را به‌طور افزاینده ای برای کامپایلر و همچنین برای برنامه نویسان اسمبلی سخت می‌کنند. علاوه بر این افزایش نمایش پردازنده‌ها به این معنی است که بیشتر سی پی یوها بیشتر مواقع بی فایده مانده‌اند، با تأخیرهایی که به خاطر تنگه‌های قابل پیش‌بینی مانند از دست دادن حافظهٔ پنهان، عملیات‌ها و صفحه بندی I/O رخ داده‌است. همین، سرعت اجرای کد خام را برای بسیاری از برنامه نویسان بی‌اهمیت کرده‌است.
در اینجا تعدادی موقعیت وجود دارد که احتمالاً توسعه دهندگان انتخاب بکنند تا از زبان اسمبلی استفاده بکنند.
نوشتن کد برای سیستم‌هایی با پردازنده‌های قدیمی تر که گزینه‌های محدودی برای زبان‌های سطح بالا دارند. از جمله آتاری ۲۶۰۰، کومودور ۶۴ و ماشین حساب‌های با قابلیت رسم نمودار.
کدی که باید تعامل مستقیم با سخت‌افزار داشته باشد برای مثال در گرداننده‌های دستگاه و کنترل‌کننده‌های قطع شدن‌ها.
در یک پردازندهٔ توکار یا DSP، قطعی مکرر نیازمند کوتاه‌ترین تعداد حلقه‌ها در هر قطعی می‌باشد، مانند یک قطعی که ۱۰۰۰ یا ۱۰۰۰۰ بار در ثانیه اتفاق می‌افتد.
برنامه‌هایی که نیازمند استفاده از پردازنده ـ دستور العمل‌های مخصوصی که در یک کامپایلر اجرا نشدند ـ می‌باشند. یک مثال رایج، دستورالعمل چرخش بیتی در هستهٔ بسیاری از الگوریتم‌های رمز گذاری می‌باشد، همان‌طور که در توازن یک بایت جستجو می‌شود یا رقم نقلی ۴-بیتی در یک جمع.
یک چیز قابل اجرا با سایز متراکم و مستقل مورد نیاز است که باید بدون منبع گرفتن از مؤلفه‌های زمان اجرا یا کتابخانه‌های مرتبط با یک زبان سطح بالا اجرا کند. مثال‌ها شامل سیستم عامل تلفن‌ها، سیستم سوخت و احتراق ماشین‌ها، سیستم‌های کنترل دستگاه‌های تهویهٔ مطبوع، سیستم‌های امنیتی و سنسورها.
برنامه‌های با حلقه‌های درونی حساس به نمایش. در حالی که زبان اسمبلی فرصت‌های بهینه‌سازی را فراهم می‌کند که بدست آوردن آنها در یک زبان سطح بالا پیچیده هستند. برای مثال جبر خطی با BLAS یا تبدیل کسینوسی گسسته (مثلا ورژن اسمبلی SIMD از x264).
برنامه‌هایی که تابع‌های برداری شده را برای برنامه‌ها در زبان‌های سطح بالاتر از جمله C می‌سازند. در زبان‌های سطح بالاتر این فرایند گاهی توسط تابع‌های ذاتی کامپایلر پشتیبانی می‌شوند که مستقیماً به حافظه‌های SIMD مرتبط می‌کند، ولی با این وجود در یک گفت و گوی یک به یک اسمبلی که مخصوص پردازندهٔ برداری داده شده‌است نتیجه می‌دهد.
برنامه‌های بی درنگ از جمله شبیه‌سازی‌ها، سیستم‌های جهت‌یاب پروازی و وسایل پزشکی. برای مثال در یک سیستم هدایت پرواز برقی، مسافت سنج باید ترجمه بشود و براساس قیود زمانی معین عمل کند. این سیستم‌ها باید منابع تأخیرهای غیرقابل پیش‌بینی را حذف کنند، که ممکن است که با بعضی از زبان‌های ترجمه شده، بازیافت خودکار حافظه، صفحه بندی عملیات‌ها یا [[قبضه کردن چند وظیفه‌ای] ایجاد شوند. با این حال بعضی از زبان‌های سطح بالا مؤلفه‌های زمان اجرا و رابط‌های عملیاتی سیستم را ترکیب می‌کنند که می‌توانند چنین تأخیرهایی را معرفی کنند. انتخاب کردن زبان اسمبلی یا زبان‌های سطح پایین‌تر برای چنین سیستم‌هایی به برنامه نویسان دید و کنترل بهتر بر تفاصیل پردازش می‌دهد.
الگوریتم‌های رمز نگاری که همیشه باید دقیقاً زمانی مشابه برای اجرا داشته باشند تا از حمله‌های زمانبندی جلوگیری کنند.
اصلاح کردن و گسترش کد ارثی نوشته شده برای کامپیوترهای بزرگ آی بی ام.
در محیط‌هایی که کنترل کامل بر محیط مورد نیاز است، در موقعیت‌های فوق امنیتی که همه چیز به شدت بررسی می‌شود.
ویروس‌های کامپیوتر، بارگذارهای بوت (راه اندازی)، گرداننده‌های معین دستگاه یا دیگر آیتم‌های بسیار نزدیک به سخت‌افزار یا سیستم عملیاتی سطح پایین.
شبیه‌سازهای مجموعه ی دستور العمل‌ها برای نظارت، ردیابی و اشکال زدایی که میزان اضافی پردازش مورد نیاز در حد حداقل نگه داشته می‌شود.
موقعیت‌هایی که هیچ زبان سطح بالایی وجود ندارد، بر روی یک پردازندهٔ جدید یا ویژه که هیچ کامپایلر دوگانه ای فعال نیست.
مهندسی معکوس و اصلاح کردن فایل‌های برنامه؛ از جمله:
وجود داشتن دودویی‌هایی که شاید در اصل در یک زبان سطح بالا نوشته شده‌اند یا نوشته نشده‌اند، برای مثال هنگام تلاش برای ساخت دوبارهٔ برنامه‌هایی که کد منبع آنها در دسترس نمی‌باشد یا گم شده‌است یا کرک کردن رونوشت حفاظت نرم‌افزار اصلی.
بازی‌های ویدئویی (همچنین اصطلاح هک کردن رم) که از روش‌های متفاوت امکان‌پذیر است. بیشترین روشی که به‌طور گسترده به کار گرفته می‌شود تغییر دادن کد برنامه در سطح زبان اسمبلی است.
زبان اسمبلی هنوز در بسیاری از برنامه‌های مهندسی برق و علوم کامپیوتر آموزش داده می‌شود. اگرچه تعداد کمی از برنامه نویسان امروزه معمولاً با زبان اسمبلی به عنوان ابزار کار می‌کنند، اما مفاهیم اصولی بااهمیت باقی می‌مانند. مفاهیم ابتدایی از جمله اعمال ریاضی در اعداد دو دویی]]، اختصاص حافظه، پردازش پشته، کدگذاری مجموعهٔ کاراکترها، قطع شدن پردازش و طراحی کامپایلر که مطالعه در تفاصیل آن‌ها بدون فهمیدن اینکه یک کامپیوتر چگونه در سطح سخت‌افزار عمل می‌کند، سخت خواهد بود. از زمانی که رفتار کامپیوتر، به شکل ابتدایی به وسیلهٔ مجموعهٔ دستور العمل‌هایش تعریف می‌شود، راه منطقی برای یادگرفتن چینن مفهوم‌هایی، مطالعهٔ که یک زبان اسمبلی است. بیشتر کامپیوترهای مدرن مجموعهٔ دستور العمل‌های مشابه دارند؛ بنابراین مطالعهٔ تنها یک زبان اسمبلی کافی است برای یادگیری: I) مفاهیم پایه؛ II) تشخیص موقعیت‌هایی که استفاده از زبان اسمبلی می‌تواند مناسب باشد؛ III) دیدن اینکه چه مقدار کد قابل اجرای کارآمد از یک زبان سطح بالا می‌تواند ساخته شود.