Все для программиста

Модуль memory.asm


; Выделить сегмент памяти ####################################################
PROC            GetMemory
  IFDEF GlukOS   ;--- Для ГлюкОСы
                push     es di si cx ax
                mov      cx,0FFFFh
                mov      dx,01000h
                lea      di,[cs:MemoryTable]
                dec      di
gm1:            inc      cx
                inc      di
                add      dx,01000h
                cmp      cx,8
                je       gmerror
                mov      ah,[cs:di]
                or       ah,ah
                jne      gm1
                mov      ah,0FFh
                mov      [cs:di],ah
                pop      ax cx si di es
                ret
   ELSE           ;--- Для ДОСа
                mov      ah,048h
                mov      bx,4096
                int      21h
                jc       gmerror
                mov      dx,ax
                ret
   ENDIF          ;--- GlukOS
gmerror:        xor      dx,dx
                ret
ENDP            GetMemory
; Освободить память ##########################################################
PROC            FreeMemory
   IFDEF GlukOS   ;--- Для ГлюкОСы
                shr      dx,12
                sub      dx,2
                lea      di,[cs:MemoryTable]
                add      di,dx
                mov      [Byte Ptr cs:di],0
                ret
   ELSE           ;--- Для ДОСа
                mov      es,dx
                mov      ah,49h
                int      21h
                ret
   ENDIF          ;--- GlukOS
ENDP            FreeMemory


<< Начало