مقدمات و نصب
با اسمبلی آشنا میشیم، ابزارها رو نصب میکنیم و اولین برنامهمون رو مینویسیم.
نصب اسمبلر (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` بسازید و کد زیر رو داخلش کپی کنید. این کد برای لینوکس ۶۴ بیتی نوشته شده.
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!` رو در ترمینال ببینید!