조립-메모리 관리

그만큼 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!