内存段(Memory Segments)
优质
小牛编辑
130浏览
2023-12-01
我们已经讨论过汇编程序的三个部分。 这些部分也代表各种存储器段。
有趣的是,如果将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 - 由.data部分和.bss 。 .data部分用于声明内存区域,其中为程序存储数据元素。 声明数据元素后,此部分无法展开,并且在整个程序中保持静态。
.bss部分也是一个静态内存部分,它包含稍后在程序中声明的数据的缓冲区。 该缓冲存储器为零填充。
Code segment - 由.text部分表示。 这定义了存储器中存储指令代码的区域。 这也是一个固定的区域。
Stack - 此段包含传递给程序中的函数和过程的数据值。