汇编语言 内存管理

  • 内存管理

    sys_brk()系统调用是由内核提供的,而不需要后移动它的分配内存。该调用在内存中的应用程序映像后面分配内存。此系统功能使您可以在数据部分中设置最高可用地址。此系统调用采用一个参数,这是需要设置的最高内存地址。此值存储在EBX寄存器中。发生任何错误时,sys_brk()返回-1或返回负错误代码本身。下面的示例演示了动态内存分配。
    以下程序使用sys_brk()系统调用分配16kb的内存-
    
    section .text
       global _start         ;must be declared for using gcc
            
    _start:                  ;tell linker entry point
    
       mov  eax, 45          ;sys_brk
       xor  ebx, ebx
       int  80h
    
       add  eax, 16384       ;number of bytes to be reserved
       mov  ebx, eax
       mov  eax, 45          ;sys_brk
       int  80h
            
       cmp  eax, 0
       jl   exit    ;exit, if error 
       mov  edi, eax         ;EDI = highest available address
       sub  edi, 4           ;pointing to the last DWORD  
       mov  ecx, 4096        ;number of DWORDs allocated
       xor  eax, eax         ;clear eax
       std                   ;backward
       rep  stosd            ;repete for entire allocated area
       cld                   ;put DF flag to normal state
            
       mov  eax, 4
       mov  ebx, 1
       mov  ecx, msg
       mov  edx, len
       int  80h              ;print a message
    
    exit:
       mov  eax, 1
       xor  ebx, ebx
       int  80h
            
    section .data
    msg     db      "Allocated 16 kb of memory!", 10
    len     equ     $ - msg
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    Allocated 16 kb of memory!