سگمنت های حافظه در زبان اسمبلی
در بخش قبلی سه بخش اصلی یک برنامه اسمبلی مورد بررسی قرار گرفت. در این بخش انواع سگمنت های حافظه در زبان اسمبلی را بررسی خواهیم کرد. جالب است بدانید، اگر شما کلمه کلیدی 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 اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.