Assembly چیست؟ آموزش کامل و جامع زبان اسمبلی
فهرست مطالب
Assembly چیست؟
زبان اسمبلی (Assembly Language) یک زبان برنامهنویسی سطح پایین است که ارتباط مستقیمی با معماری پردازنده دارد. این زبان به برنامهنویسان اجازه میدهد تا با دستورالعملهای مستقیم پردازنده کار کنند.
اسمبلی پلی بین
زبان ماشین
و زبانهای سطح بالا است.
مثال ساده Assembly (x86)
تاریخچه زبان اسمبلی
زبان اسمبلی در اوایل دهه 1950 میلادی توسعه یافت. قبل از آن، برنامهنویسان مجبور بودند برنامههای خود را مستقیماً به زبان ماشین بنویسند.
اولین اسمبلرها روی کامپیوترهای IBM 704 و IBM 650 استفاده شدند و باعث
انقلابی در برنامهنویسی شدند.
ساختار پایه Assembly
یک برنامه اسمبلی معمولاً از سه بخش اصلی تشکیل شده است:
ساختار اصلی برنامه Assembly
هر بخش در اسمبلی کاربرد خاص خود را دارد. بخش data برای دادههای
ثابت، bss برای متغیرهای تعریف نشده و text برای کد برنامه استفاده
میشود.
دستورالعملهای اسمبلی
دستورات انتقال داده
دستورات پایه انتقال داده
دستورات محاسباتی
دستورات محاسباتی پایه
رجیسترها و حافظه
رجیسترها حافظههای سریع داخل پردازنده هستند که برای نگهداری دادهها و آدرسها استفاده میشوند.
رجیسترهای عمومی x86
- EAX – رجیستر accumulator برای عملیات محاسباتی
- EBX – رجیستر base برای آدرسدهی حافظه
- ECX – رجیستر counter برای شمارش حلقهها
- EDX – رجیستر data برای عملیات I/O
در معماری x64، این رجیسترها با پیشوند R (مانند RAX، RBX) شناخته
میشوند و 64 بیتی هستند.
سینتکس اسمبلی
سینتکس اسمبلی بسته به نوع اسمبلر (NASM، MASM، GAS) متفاوت است.
مقایسه سینتکسهای مختلف
انواع داده در اسمبلی
تعریف انواع داده
انتخاب نوع داده نامناسب میتواند باعث سرریز (overflow) و خطاهای
منطقی شود.
روشهای آدرسدهی
روشهای اصلی آدرسدهی
مثالهای آدرسدهی
ابزارهای برنامهنویسی اسمبلی
اسمبلرها
- NASM – Netwide Assembler
- MASM – Microsoft Macro Assembler
- GAS – GNU Assembler
دیباگرها
- GDB – GNU Debugger
- OllyDbg
- x64dbg
کاربردهای زبان اسمبلی
زبان اسمبلی در موارد زیر کاربرد دارد:
- برنامهنویسی سیستمی و درایورها
- بهینهسازی کد
- برنامهنویسی سیستمهای نهفته
- مهندسی معکوس و امنیت
امروزه اسمبلی بیشتر در حوزههای تخصصی که نیاز به کنترل دقیق
سختافزار دارند استفاده میشود.
بهترین شیوههای کدنویسی
اصول نوشتن کد تمیز
- استفاده از کامنتهای مناسب
- سازماندهی کد در ماکروها و پروسیجرها
- رعایت قراردادهای نامگذاری
- مستندسازی دقیق کد
مثال کد تمیز
منابع و ابزارها
کتابهای مرجع
- Assembly Language Step by Step – Jeff Duntemann
- Modern X86 Assembly Language Programming – Daniel Kusswurm
- Professional Assembly Language – Richard Blum