جشنواره ۵۰٪ تخفیف فرانش به مدت محدود

جشنواره ۵۰٪ تخفیف فرانش محدود

0 روز 0 ساعت 0 دقیقه 0 ثانیه

شروع یادگیری

یادگیری زبان اسمبلی

زبان اسمبلی چیست؟ آموزش اسمبلی به زبان ساده

زبان اسمبلی یک زبان برنامه‌نویسی سطح پایین (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 

کتاب‌ها

آموزش سی شارپ C#

 

آیا یادگیری زبان اسمبلی (Assembly) برایتان ضروری است؟

یادگیری زبان اسمبلی به اهداف شما بستگی دارد. پاسخ این سؤال برای بیشتر برنامه نویسان “خیر” است.

دو دلیل اصلی برای یادگیری زبان اسمبلی داریم: یا اینکه می‌خواهید مسقیماً از آن استفاده کنید یا اینکه می‌خواهید درکی بسیار پایه از سیستم‌های کامپیوتری به‌دست آورید.

اگر بخواهیم نگاهی کاربردی به این قضیه داشته باشیم، نسبتاً تعداد کمی از مهندسین و محققین کامپیوتر در جهان از زبان اسمبلی استفاده می‌کنند.

درصد بالایی از توسعه‌های نرم‌افزاری، در صورتی که تمامی انواع توسعه‌های نرم‌افزاری موجود را در نظر بگیریم، با استفاده از زبان‌های برنامه‌نویسی سطح بالا انجام می‌شوند. در زیر لیست مواردی را می‌بینید که در آنها از زبان اسمبلی استفاده می‌شود:

  • سیستم‌های عامل
  • سفت‌افزار (Firmware)
  • درایورهای دستگاه (Device Driver)
  • طراحی زبان
  • طراحی کامپایلر (Compiler)
  • سیستم‌های تعبیه‌شده (embedded Systems)
  • طراحی سخت‌افزار
  • رمزنگاری پیشرفته
  • علوم کامپیوتر نظری

دلیل دیگر یادگیری زبان اسمبلی می‌تواند به دست آوردن درکی بهتر از اتفاقاتی باشد که در دل یک سیستم کامپیوتری می‌افتد (این همان دلیلی است که تمامی رشته‌های علوم کامپیوتر باید زبان اسمبلی را یاد بگیرند).

با این حال اگر به این زبان واقعاً علاقه دارید، بهتر است به فکر پیدا کردن شغلی باشید که به توسعه‌ی سیستم‌های سطح پایین می‌پردازد.

زبان‌های دیگری که می‌توانید یاد بگیرید

زبان‌های دیگری به جز اسمبلی هستند که با یادگیری کمی از آنها می‌توانید توانایی انجام کارهای بسیار زیادی را به‌دست آورید. مثل پایتون (Python) یا روبی (Ruby) که با یادگیری یک هفته‌ای این زبان‌ها می‌توانید برنامه‌ای ارزشمند بنویسد. زبان اسمبلی اینگونه نیست.

هرگز از زبان اسمبلی به تنهایی استفاده نمی‌شود. مهندسی که باید زبان اسمبلی بلد باشد، احتمالاً در محیطی کار می‌کند که به مهارت‌های دیگری نیز نیاز دارد. مثل:

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

 

 

شما چه زبان‌هایی بلد هستید؟

یادگیری چه زبانی را پیشنهاد می‌کنید؟

 

مرتضی شایق

مرتضی شایق

مدیر دیجیتال مارکتینگ

فعال در دیجیتال مارکتینگ در تخصص‌های: SEO (بهینه‌سازی سایت برای موتورهای جستجوگر)، SEM (بازاریابی در موتورهای جستجوگر)، UX (تجربه کاربری)

بدون دیدگاه

دیدگاهتان را بنویسید