
زبان اسمبلی چیست؟ آموزش اسمبلی به زبان ساده
زبان اسمبلی یک زبان برنامهنویسی سطح پایین (Low-level Programming Language) است که دستوراتش معادل کدهای ماشین (Machine Code) هستند. به عبارت دیگر، مجموعهای از دستورات باینری (Binary) که مقادیری را به داخل رجیسترهای CPU (یا ریزپردازندههای دیگر) میریزند یا از آن برمیدارند.
مقدمه
یک ریزپردازنده، یک ماشین حساب مکانیکی است. یک ریزپردازنده تعدادی رجیستر (Register) مشخص دارد که میتوانیم آنها را مکانی برای نگهداری اعداد در نظر بگیریم. دستورات به صورت کدهای ماشین به یک ریزپردازنده داده میشوند. هر دستور به صورت مجموعهای از بیتهای باینری نمایش داده میشود (مجموعهای از 0 و 1ها). برای مثال، در زیر یک خط کد ماشین میبینید:
چند بیت اول (10110) دستور کپی کردن یک مقدار در یک رجیستر است. سه رقم دیگر (000) رجیستری را مشخص میکنند که میخواهیم مقدار را در آن کپی کنیم. بقیهی ارقام (01100001)، مقداری را نشان میدهند که میخواهیم کپی کنیم.
البته 10110 بیمعناست و کامپیوتر “نمیداند” که این ارقام در واقع میگویند “این مقدار را کپی کن”. پردازنده به گونهای طراحی میشود که مجموعهای از پالسهای الکتریکی، که 10110 تعیین میکند (وصل، قطع، وصل، وصل، قطع)، نتیجهی موردنظر را به ما بدهد. به همین دلیل از کلمهی “مکانیکی” استفاده میشود.
حالا تصور کنید که میخواهید دستوری برای پردازنده بنویسید. خیلی راحت میتوانید ببینید که نوشتن هزاران خط 0 و 1 میتواند چقدر خستهکننده و پر از خطا باشد. راهحل این مشکل، زبان برنامه نویسی اسمبلی است. زبان اسمبلی جایگزینهایی را برای کدهای طولانی باینری در نظر میگیرد که برای انسان قابل فهمند.

مثال
برای مثال، اگر 10110 به معنای “مقدار را جابهجا کن (Move the Value)” باشد، میتوانیم آن را کوتاهتر کنیم و از دستور MOV استفاده کنیم.
همچنین میتوانیم به رجیستر 000 نامی بدهیم که یادآوری آن راحتتر باشد (در این مورد، نام این رجیستر را AL گذاشتیم).
در نهایت، میتوانیم مقدار را به دستگاه اعداد (Numbering System) دیگری ببریم، مثل دسیمال (91) یا هگزادسیمال (61). آن وقت کد بالا به این صورت تغییر میکند:
MOV AL, 61
وقتی کل برنامه را به این روش نوشتیم، آن وقت assembler میتواند هر خط کد را به مشابه باینری مناسب آن تبدیل کند.
کامپیوترها با اجرای میلیونها دستور کوچک این چنینی در ثانیه کار میکنند (محاسبات را انجام میدهند، دادهها را جابهجا یا منتقل میکنند).
دستورات بسیار ساده (مثلاً این مقدار را جابهجا کن، آن مقدار را کپی کن، این دو مقدار را با هم جمع بزن و نتیجه را در مکانی ذخیره کن) با هم ترکیب میشوند و عملهایی پیچیده میسازند. این عملها در سطوح بالاتر با هم ترکیب میشوند و کارهایی را انجام میدهند که از دید شما مفهومی مشخص دارند.
دورههای مرتبط در فرانش
منابع یادگیری زبان اسمبلی
منابع آنلاین
مراجع
- لیست دستورات X86: لیستی کامل از دستورات معماری X86، به همراه نکاتی دربارهی زمان اضافه شدن هر کدام
- مرجع دستورات و Opcode برای معماری X86
- چیتشیت (Cheat Sheet) زبان اسمبلی برای معماری X86
ابزارها
اسمبلرها- اسمبلرهای زیادی موجودند. در زیر لیستی از معروفترین اسمبلرهای متن باز و رایگان را مشاهده میکنید:
- NASM
- FASM
- YASM
- GASM
IDEها (محیط یکپارچهی توسعهی نرم افزار)
- SASM: یک IDE ساده و کراسپلتفرم (Cross-platform) برای زیانهای اسمبلی NASM، MASM، GAS، FASM
- Fresh IDE: IDE ویژوالِ زبان اسمبلی که دارای اسمبلر FASM است
- WinAsm Studio: یک IDE رایگان که با استفاده از آن میتوانید به کمک Assembler برای ویندوز 32-بیت و DOS 16-بیت برنامه بنویسید
- Visual MASM
انجمن و یادگیری مداوم
- انجمن Assembly در In.Code
- انجمن MASM
- انجمنهای Assembly Language and Machine Code در Hack Forums
کتابها
- The Art of Assembly Language (Online Edition): یکی از مشهورترین کتابهای موجود برای زبان اسمبلی است که انتشارات No Strach Press آن را به چاپ رسانده است. شاید دلتان بخواهد نگاهی به کتابهای دیگر این نویسنده نیز بیندازید: Write Great Code: Volume 1: Understanding the Machine و Write Great Code: Volume 2: Thinking Low-Level, Writing High-Level
- Assembly Language Step-by-Step: Programming with Linux
- Professional Assembly Langiuage
- Assembly Language for x86 Processors
- Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX
- ntroduction to 64 Bit Assembly Programming for Linux and OS X: Third Edition – for Linux and OS X
- Introduction To 80X86 Assembly Language And Computer Architecture
- Assembly Language Programming: For PC and Laptop Computers.

آیا یادگیری زبان اسمبلی (Assembly) برایتان ضروری است؟
یادگیری زبان اسمبلی به اهداف شما بستگی دارد. پاسخ این سؤال برای بیشتر برنامه نویسان “خیر” است.
دو دلیل اصلی برای یادگیری زبان اسمبلی داریم: یا اینکه میخواهید مسقیماً از آن استفاده کنید یا اینکه میخواهید درکی بسیار پایه از سیستمهای کامپیوتری بهدست آورید.
اگر بخواهیم نگاهی کاربردی به این قضیه داشته باشیم، نسبتاً تعداد کمی از مهندسین و محققین کامپیوتر در جهان از زبان اسمبلی استفاده میکنند.
درصد بالایی از توسعههای نرمافزاری، در صورتی که تمامی انواع توسعههای نرمافزاری موجود را در نظر بگیریم، با استفاده از زبانهای برنامهنویسی سطح بالا انجام میشوند. در زیر لیست مواردی را میبینید که در آنها از زبان اسمبلی استفاده میشود:
- سیستمهای عامل
- سفتافزار (Firmware)
- درایورهای دستگاه (Device Driver)
- طراحی زبان
- طراحی کامپایلر (Compiler)
- سیستمهای تعبیهشده (embedded Systems)
- طراحی سختافزار
- رمزنگاری پیشرفته
- علوم کامپیوتر نظری
دلیل دیگر یادگیری زبان اسمبلی میتواند به دست آوردن درکی بهتر از اتفاقاتی باشد که در دل یک سیستم کامپیوتری میافتد (این همان دلیلی است که تمامی رشتههای علوم کامپیوتر باید زبان اسمبلی را یاد بگیرند).
با این حال اگر به این زبان واقعاً علاقه دارید، بهتر است به فکر پیدا کردن شغلی باشید که به توسعهی سیستمهای سطح پایین میپردازد.
زبانهای دیگری که میتوانید یاد بگیرید
زبانهای دیگری به جز اسمبلی هستند که با یادگیری کمی از آنها میتوانید توانایی انجام کارهای بسیار زیادی را بهدست آورید. مثل پایتون (Python) یا روبی (Ruby) که با یادگیری یک هفتهای این زبانها میتوانید برنامهای ارزشمند بنویسد. زبان اسمبلی اینگونه نیست.

هرگز از زبان اسمبلی به تنهایی استفاده نمیشود. مهندسی که باید زبان اسمبلی بلد باشد، احتمالاً در محیطی کار میکند که به مهارتهای دیگری نیز نیاز دارد. مثل:
- زبانهای سخت افزاری مثل VHDL و Verilog. به همراه دانشی مناسب از ریزپردازندهها و مهندسی الکترونیک
- زبانهای سطح پایین سیستم عامل مثل C و زبانهای فرزندش مثل C++، C# و D
- زبانهای قدیمی مثل Fortran و Cobol
- زبانهای پلتفرمی مثل جاوا و Objective-C
- الگوریتمها
- طراحی کامپایلر، مفسر و زبان
شما چه زبانهایی بلد هستید؟
یادگیری چه زبانی را پیشنهاد میکنید؟
دورههای مرتبط در فرانش
به یک برنامه نویس اسمبلی جهت کمک نیاز دارم لطفا اگه ممکنه کمکمکنید
سلام
اسمبلی ۶۴ بیت نداریم؟
سلام . متشکرم از توضیحات کاملتون .
موفق باشین .
ممنون سعید جان