位置:首页 > > 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部分是静态内存部分,其中包含的缓冲区进行数据宣布以后在程序。这个缓冲存储器是零填充。

  • 代码段 - 它表示文字部分。这定义的区域在存储器中存储的指令代码。这也是一个固定的区域。

  •  - 此段包含传递给程序的功能和程序内的数据值。