Assembly Logo

آموزش جامع زبان اسمبلی

سفر به عمیق‌ترین لایه‌های کامپیوتر و صحبت مستقیم با پردازنده!

اسمبلی چیه و چرا باید یادش بگیریم؟

زبان مادری کامپیوتر!

زبان اسمبلی نزدیک‌ترین زبانیه که یه انسان می‌تونه باهاش با سخت‌افزار کامپیوتر حرف بزنه. هر دستوری که ما در اسمبلی می‌نویسیم، تقریباً یک به یک به دستورات زبان ماشین (همون صفر و یک‌ها) تبدیل می‌شه. یادگیری اسمبلی مثل اینه که به جای حرف زدن با مترجم (زبان‌های سطح بالا)، مستقیم با خود شخص خارجی (پردازنده) صحبت کنی! این کار بهت یه دید فوق‌العاده عمیق از نحوه کار کامپیوترها می‌ده و بهت اجازه می‌ده کدهایی بنویسی که سریع‌ترین و بهینه‌ترین حالت ممکن رو دارن.

نقشه راه یادگیری (۱۰ درس)

۱

مقدمات و نصب

با اسمبلی آشنا می‌شیم، ابزارها (NASM) رو نصب می‌کنیم و اولین برنامه‌مون رو می‌نویسیم.

۲

رجیسترهای CPU

با حافظه‌های موقت و فوق سریع پردازنده (EAX, EBX, ...) آشنا می‌شیم.

۳

حافظه و داده

یاد می‌گیریم چطور داده‌ها و متغیرها رو در حافظه تعریف و استفاده کنیم.

۴

دستورات پایه

کار با دستورات اصلی مثل MOV, ADD, SUB و عملیات حسابی.

۵

فراخوانی‌های سیستمی

یاد می‌گیریم چطور با سیستم‌عامل برای کارهایی مثل چاپ متن حرف بزنیم.

۶

کنترل جریان

ساختن شرط و حلقه با استفاده از دستورات پرش (Jumps).

۷

پشته (Stack) و توابع

نحوه کار با پشته حافظه و تعریف و فراخوانی توابع.

۸

کار با آرایه‌ها

چگونه در حافظه به صورت متوالی حرکت کنیم و روی آرایه‌ها بچرخیم.

۹

ارتباط با زبان C

یاد می‌گیریم چطور کدهای اسمبلی فوق سریع خود را از داخل یک برنامه C صدا بزنیم.

۱۰

پروژه: ماشین حساب

با تمام چیزهایی که یاد گرفتیم، یک ماشین حساب ساده خط فرمان می‌سازیم.

نمونه‌ای از قدرت اسمبلی: سرعت خالص!

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

add.asm
section .text
    global _start

_start:
    mov eax, 5      ; عدد ۵ رو در رجیستر EAX قرار بده
    mov ebx, 10     ; عدد ۱۰ رو در رجیستر EBX قرار بده
    add eax, ebx    ; مقدار EBX رو به EAX اضافه کن (EAX = EAX + EBX)

    ; الان نتیجه (۱۵) در رجیستر EAX قرار داره

    ; خروج از برنامه
    mov eax, 1      ; فراخوانی سیستمی برای خروج
    mov ebx, 0      ; کد وضعیت موفقیت
    int 0x80        ; اجرای وقفه برای فراخوانی سیستم‌عامل