۳

حافظه و داده

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

بخش‌های داده (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

علامت `[]` دور اسم متغیر یعنی "برو به آدرس حافظه‌ی این متغیر و محتویاتش رو بخون".