汇编语言 内存段

  • 内存段

    我们已经讨论了汇编程序的三个部分。这些部分也代表各种内存段。有趣的是,如果将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段和.bss表示。.data节用于声明存储区,在该存储区中为程序存储了数据元素。声明数据元素后,无法扩展此部分,并且在整个程序中它保持静态。.bss部分也是一个静态内存部分,它包含缓冲区,供稍后在程序中声明的数据使用。这个缓冲区内存是零填充的。
    • 代码段-它由.text部分表示。这在内存中定义了一个存储指令代码的区域。这也是一个固定区域。
    • 堆栈-该段包含传递给程序中的函数和过程的数据值。