۳
حافظه و داده
یاد میگیریم چطور دادهها و متغیرها رو در حافظه تعریف و استفاده کنیم.
بخشهای داده (Data Sections)
در یک برنامه اسمبلی، ما دادههامون رو تو بخشهای مشخصی از حافظه تعریف میکنیم. دو تا از مهمترین بخشها اینا هستن:
- بخش `.data`: برای دادههایی که مقدار اولیه دارن (Initialized Data). مثل یه پیام متنی ثابت.
- بخش `.bss`: برای دادههایی که مقدار اولیه ندارن (Uninitialized Data). ما فقط یه فضایی رو براشون رزرو میکنیم و بعداً تو برنامه مقداردهیشون میکنیم.
تعریف انواع داده
برای تعریف داده از دستوراتی مثل `DB` (Define Byte), `DW` (Define Word), `DD` (Define Doubleword) استفاده میکنیم.
section .data
my_byte db 10 ; یک بایت (۸ بیت)
my_word dw 1000 ; یک کلمه (۱۶ بیت)
my_double dd 100000 ; یک دابلورد (۳۲ بیت)
my_string db 'Hello', 0 ; یک رشته که با نال تمام میشود
section .bss
my_buffer resb 255 ; رزرو کردن ۲۵۵ بایت فضا
section .text
global _start
_start:
; حالا میتونیم با این دادهها کار کنیم
mov al, [my_byte] ; مقدار my_byte رو در رجیستر AL (۸ بیت پایینی EAX) بریز
mov bx, [my_word] ; مقدار my_word رو در رجیستر BX بریز
; ... خروج از برنامه
mov eax, 1
int 0x80
علامت `[]` دور اسم متغیر یعنی "برو به آدرس حافظهی این متغیر و محتویاتش رو بخون".