۱

مقدمات و نصب

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

نصب اسمبلر (Assembler)

کدی که ما به زبان اسمبلی می‌نویسیم، باید توسط یه برنامه به اسم "اسمبلر" به زبان ماشین (صفر و یک) تبدیل بشه. یکی از محبوب‌ترین اسمبلرها برای معماری x86 (که اکثر کامپیوترهای امروزی ازش استفاده می‌کنن)، NASM (Netwide Assembler) هست. ما در این دوره از NASM استفاده می‌کنیم.

برای نصب NASM در سیستم‌عامل‌های مختلف:

# در لینوکس (Debian/Ubuntu)
sudo apt-get install nasm

# در macOS (با Homebrew)
brew install nasm

# در ویندوز
# می‌تونید از سایت رسمی NASM دانلود کنید یا از طریق Chocolatey نصب کنید:
choco install nasm

علاوه بر اسمبلر، به یک "لینکر" (Linker) هم نیاز داریم تا فایل آبجکت ساخته شده توسط NASM رو به یه فایل اجرایی تبدیل کنه. `ld` در لینوکس و مک و `gcc` یا `link.exe` در ویندوز این کار رو انجام می‌دن.

اولین برنامه: سلام، دنیا!

یه فایل به اسم `hello.asm` بسازید و کد زیر رو داخلش کپی کنید. این کد برای لینوکس ۶۴ بیتی نوشته شده.

hello.asm
section .data
    msg db 'Hello, world!', 0x0a  ; پیام ما به همراه کاراکتر خط جدید
    len equ $ - msg             ; طول پیام

section .text
    global _start

_start:
    ; نوشتن پیام در خروجی استاندارد (صفحه نمایش)
    mov eax, 4      ; شماره فراخوانی سیستمی برای write
    mov ebx, 1      ; فایل خروجی (۱ = stdout)
    mov ecx, msg    ; آدرس پیام
    mov edx, len    ; طول پیام
    int 0x80        ; فراخوانی هسته سیستم‌عامل

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

برای کامپایل و اجرای برنامه، این دستورات رو در ترمینال بزنید:

# 1. اسمبل کردن کد (تبدیل به زبان ماشین)
nasm -f elf64 hello.asm -o hello.o

# 2. لینک کردن (تبدیل به فایل اجرایی)
ld hello.o -o hello

# 3. اجرای برنامه
./hello

اگه همه چی درست باشه، باید پیام `Hello, world!` رو در ترمینال ببینید!