Assembly 内存段 - Assembly汇编
我们已经讨论了汇编程序的三个部分。这些部分代表不同的内存段。
有趣的是,如果更换部分关键字段,会得到相同的结果。试试下面的代码:
segment .text ;code segment
global _start ;must be declared for linker
_start: ;tell linker entry yiibai
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!
内存段
分段存储模型的系统内存划分成独立的段,引用指针位于段寄存器组。每个段是指包含特定类型的数据。一个段被用于包含指令代码,另一个段存储的数据元素,和第三个分部保持程序堆栈。
根据上面的讨论,我们可以指定不同的内存段:
数据段 - 它由数据段的和bss段。数据段的用来声明数据元素的存储程序的内存区域。本节不能扩大后的数据元素的声明,并在整个程序中它仍保持不变。
bbs部分是静态内存部分,其中包含的缓冲区进行数据宣布以后在程序。这个缓冲存储器是零填充。
代码段 - 它表示文字部分。这定义的区域在存储器中存储的指令代码。这也是一个固定的区域。
堆 - 此段包含传递给程序的功能和程序内的数据值。