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

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

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