سگمنت های حافظه در زبان اسمبلی – آموزش Assembly

assembly memory segments 4593 تصویر

سگمنت های حافظه در زبان اسمبلی

در بخش قبلی سه بخش اصلی یک برنامه اسمبلی مورد بررسی قرار گرفت. در این بخش انواع سگمنت های حافظه در زبان اسمبلی را بررسی خواهیم کرد. جالب است بدانید، اگر شما کلمه کلیدی section را با کلمه segment عوض کنید، باز هم نتیجه مشابهی خواهید داشت. برای نمونه کد زیر را امتحان کنید:

segment .text       ;code segment
global_start    ;must be declared for linker
_start:            ;tell linker entry point
mov edx,len      ;message length
mov ecx,msg     ;message to write
mov ebx,1        ;file descriptor (stdout)
mov eax,4        ;system call number (sys_write)
int 0x80         ;call kernel
mov eax,1       ;system call number (sys_exit)
int 0x80         ;call kernel
segment .data      ;data segment
msg     db 'Hello, world!',0xa   ;our dear string
len     equ      $ - msg         ;length of our dear string

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

Hello, world!

سگمنت های حافظه

سگمنت ناحیه ای از حافظه است که آدرس شروع آن بر ۱۶ قابل قسمت است و از مرز پاراگراف شروع می شود. اندازه سگمنت می تواند تا ۶۴ کیلو بایت باشد. برنامه ها اسمبلی چهار نوع سگمنت دارد که در زیر مشاهده می کنید:

  • سگمنت داده (Data segment) : در این بخش داده ها و ناحیه کاری قرار می گیرد.
  • سگمنت کد (Code segment) : دستورات زبان ماشین در این بخش قرار می گیرند.
  • سگمنت پشته (Stack segment) : در این بخش آدرس بازگشت از زیر برنامه ها قرار می گیرد.
  • سگمنت اضافه (Extra segment) : این سگمنت برای انجام عملیات بر روی رشته ها مورد استفاده قرار می گیرد.

نوشته سگمنت های حافظه در زبان اسمبلی – آموزش Assembly اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *