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

زبان اسمبلی یک زبان برنامه‌نویسی سطح پایین (Low-level Programming Language) است که دستوراتش معادل کدهای ماشین (Machine Code) هستند. به عبارت دیگر، مجموعه‌ای از دستورات باینری (Binary) که مقادیری را به داخل رجیسترهای CPU (یا ریزپردازنده‌های دیگر) می‌ریزند یا از آن برمی‌دارند.

مقدمه

یک ریزپردازنده، یک ماشین حساب مکانیکی است. یک ریزپردازنده تعدادی رجیستر (Register) مشخص دارد که می‌توانیم آنها را مکانی برای نگهداری اعداد در نظر بگیریم. دستورات به صورت کدهای ماشین به یک ریزپردازنده داده می‌شوند. هر دستور به صورت مجموعه‌ای از بیت‌های باینری نمایش داده می‌شود (مجموعه‌ای از ۰ و ۱ها). برای مثال، در زیر یک خط کد ماشین می‌بینید:

چند بیت اول (۱۰۱۱۰) دستور کپی کردن یک مقدار در یک رجیستر است.  سه رقم دیگر (۰۰۰) رجیستری را مشخص می‌کنند که می‌خواهیم مقدار را در آن کپی کنیم. بقیه‌ی ارقام (۰۱۱۰۰۰۰۱)، مقداری را نشان می‌دهند که می‌خواهیم کپی کنیم.

البته ۱۰۱۱۰ بی‌معناست و کامپیوتر “نمی‌داند” که این ارقام در واقع می‌گویند “این مقدار را کپی کن”. پردازنده به گونه‌ای طراحی می‌شود که مجموعه‌ای از پالس‌های الکتریکی، که ۱۰۱۱۰ تعیین می‌کند (وصل، قطع، وصل، وصل، قطع)، نتیجه‌ی موردنظر را به ما بدهد. به همین دلیل از کلمه‌ی “مکانیکی” استفاده می‌شود.

حالا تصور کنید که می‌خواهید دستوری برای پردازنده بنویسید. خیلی راحت می‌توانید ببینید که نوشتن هزاران خط ۰ و ۱ می‌تواند چقدر خسته‌کننده و پر از خطا باشد. راه‌حل این مشکل، زبان برنامه نویسی اسمبلی است. زبان اسمبلی جایگزین‌هایی را برای کدهای طولانی باینری در نظر می‌گیرد که برای انسان قابل فهمند.

 

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.

لورم ایپسوم

 

مثال

برای مثال، اگر ۱۰۱۱۰ به معنای “مقدار را جابه‌جا کن (Move the Value)” باشد، می‌توانیم آن را کوتاه‌تر کنیم و از دستور MOV استفاده کنیم.

هم‌چنین می‌توانیم به رجیستر ۰۰۰ نامی بدهیم که یادآوری آن راحت‌تر باشد (در این مورد، نام این رجیستر را AL گذاشتیم).

در نهایت، می‌توانیم مقدار را به دستگاه اعداد (Numbering System) دیگری ببریم، مثل دسیمال (۹۱) یا هگزادسیمال (۶۱). آن وقت کد بالا به این صورت تغییر می‌کند:

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 برای ویندوز ۳۲-بیت و 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.
admin
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *