2GL یا Second Generation Language (زبان برنامهنویسی نسل دوم) به زبان Assembly اشاره دارد. درواقع، هدف اصلی زبان اسمبلی این بوده است تا برنامهنویسی را راحتتر سازد اما برای آنکه درک کنیم که سازوکار زبان اسمبلی به چه شکل است، ابتدا میبایست بفهمیم که پردازندهها چگونه دادهها را پردازش میکنند.
توجه داشته باشیم که پردازندهٔ سیستمهای کامپیوتری همانند «مغز» آن کامپیوترند؛ همانطور که مغزمان زمانی که در ارتباط با سایر اعضای بدن باشد میتواند کارایی داشته باشد، پردازندهٔ کامپیوتر هم صرفاً زمانی کار خواهد کرد که با سایر بخشهای سیستم در ارتباط باشد.
فرض کنیم که یک پردازنده میخواهد با دیتای خاصی کار کند؛ در این صورت، پردازنده دادهها را از بخش دیگر سیستم مثلاً هارددیسک گرفته و بهصورت موقت آنها را در مکانی که اصطلاحاً رجیستر گفته میشود ذخیره میسازد. سپس پردازنده تغییرات را روی دادهها اعمال کرده و دادههای تغییر یافته را به بخش دیگری از سیستم مثل حافظه ارسال میکند.
بهعبارت دیگر، همانطور که در اولین کامپیوترهای ساخته شده برای اجرای یک دستور، جای کابلها و سوییچها عوض میشد، در کامپیوترهای امروزی جای صفرها و یکها تغییر مییابد که این تغییر جایگاه صفر و یکها با استفاده از زبان ماشین انجام میپذیرد.
اگرچه که زبان اسمبلی بهمراتب از زبان ماشین (یا همان صفر و یک) راحتتر است، اما بههرحال برای ساخت نرمافزارهای بزرگ و پیچیده زبانی دشوار برای دولوپرها محسوب میشود. در گذشته، بسیاری از نرمافزارها بااستفاده از این زبان نوشته میشد اما به مرور که برنامهها پیچیدهتر شدند، ثابت شد که زبان اسمبلی زبان اثربخشی برای کدنویسی اینگونه نرمافزارها نیست! یک نمونه کد زبان اسمبلی بهصورت زیر است:
ADD 12,8
بزرگترین مشکل زبان اسمبلی این است که برای نوشتن یکسری دستورات بااستفاده از این زبان، میبایست با رجیسترهای پردازنده که پیش از این با آنها آشنا شدیم کار کنیم. بهعبارت دیگر، بهمنظور جمع کردن ۲ عدد با یکدیگر، برنامهنویس میبایست به پردازنده دستور دهد تا عدد اول را در یک رجیستر ذخیره سازد، سپس عدد دوم را به عددی که در رجیستر ذخیره شده اضافه کند و درنهایت نتیجه را از رجیستر بازخوانی کند.
نوشتن یک برنامه به زبان ماشین -حتی اگر آن برنامه خیلی هم ساده باشد- کار نسبتاً دشواری است؛ بسیاری از برنامهنویسان از زبان اسمبلی در جاهایی که نیاز به سرعت و اثربخشی بالا دارند استفاده میکنند اما توجه داشته باشیم که برنامههای نوشته شده بااستفاده از زبان اسمبلی بهمراتب کندتر از برنامههای نوشته شده با زبان ماشین هستند چرا که برای اجرا، برنامههای نوشته شده با زبان اسمبلی ابتدا میبایست به زبان ماشین تفسیر شوند که معمولاً این کار توسط برنامههایی تحتعنوان Assembler انجام میشود که این اسمبلر کارش این است که یک برنامهای که بااستفاده از زبان اسمبلی نوشته شده باشد را گرفته و آنرا تبدیل به زبان ماشین یا همان صفر و یک کند.