Chương 2. Phân đoạn bộ nhớ (Memory Segment)
- Mỗi chương trình assembly có 3 section. Những section này được phân đoạn bộ nhớ khác nhau.
- Trong VD hello world, nếu thay từ khoá section bằng segment thì kết quả vẫn giống nhau. ``` 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 ```
- Memory Segment chia bộ nhớ hệ thống thành 4 phần độc lập được tham chiếu bởi con trỏ trong segment thanh ghi. Mỗi segment được dùng để chứa kiểu dữ liệu cụ thể. 1 segment được dùng để chứa mã instruction,1 segment khác lưu trữ phần tử dữ liệu và nữa là giữ ngăn xếp chương trình ( program stack).
- Data segment - Được biểu diễn bởi .data section và .bss. data section dùng để khai báo vùng nhớ nơi phần tử dữ liệu được lưu trữ cho chương trình. Phần này không thể mở rộng thêm sau khi đã khai báo phần tử dữ liệu (data elements) . bss section cũng là vùng nhớ tĩnh chứa bộ đệm cho dữ liệu để khai báo sau trong chương trình.
- Code segment - Được biểu diển bởi .text section. Đây là nơi mà lưu trữ instruction codes. Nên nó là vùng cố định.
- Stack - Đây là đoạn chứa giá trị dữ liệu được truyền tới hàm và thủ tục nằm trong chương trình.