⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memlib.asm

📁 Application sources:A084.ZIP
💻 ASM
字号:

movedata:
	push eax
	xor eax,eax
	sub eax,edi
	and eax,3
	xchg ecx,eax
	sub eax,ecx
	jle .l1
	rep movsb
	mov ecx,eax
	shr ecx,2
	rep movsd
	and eax,3
   .l1: add ecx,eax
	rep  movsb
	pop eax
	ret

mallocz:
	call malloc
	pushad
	add ecx,3
	xor eax,eax
	shr ecx,2
	rep stosd
	popad
	ret

     mresize1: popad
		xor edi,edi
		stc
     mresize2: ret
mresize: ; puntero en di ncr retorna nuevo puntero en di
       test edi,edi
       jz malloc
       cmp ecx,[edi-4]
       je mresize2
       call free
malloc:
	mov edi,ecx
	jecxz mresize2
	pushad
	mov esi,iniciomemoria+4
	lea ebx,[ecx+3]
	and ebx,-4 ;redondeo a 4
    .l1: mov edi,esi
	add esi,[esi]
	jc mresize1
	lodsd
	cmp eax,ebx
	jc .l1
	cmp esi,[iniciomemoria+8]
	jc .l2
	jne mresize1
	lea edx,[ebx+esi+4]
	cmp edx,[iniciomemoria+12]
	jnc mresize1
	mov [iniciomemoria+8],edx
    .l2: pop dword [esi-4]
	push esi
	sub eax,ebx
	je .l3
	sub eax,4
	mov [esi+ebx],eax
	jz .l3
	;fragmentar
	add ebx,4
	add [edi],ebx
	mov eax,[esi]
	sub eax,ebx
	mov [esi+ebx],eax
	popad
	ret
    .l3: lodsd
	add eax,4
	add [edi],eax
	popad
	ret

realloc: test edi,edi
	jz malloc
	jecxz free
       pushad
       pop esi
       mov eax,[edi-4]
       call malloc
       push edi
       cmp ecx,eax
       jc .l1
       mov ecx,eax
    .l1: push esi
	call movedata
       pop edi
       call free
       popad
   .l2: ret
free:           ;puntero en di
		;no se comprueban los punteros
		;retorna di=0 , ncr
       test edi,edi
       jz realloc.l2
       pushad
       pop edi
       mov ebp,[edi-4]
       dec ebp
       and ebp,-4  ;redondeo a 4,dx=dx-4
       xor edx,edx
       push edx
       mov edx,iniciomemoria+4
       mov esi,edx
       ;buscar puntero libre anterior
    .l1: mov ebx,esi
       lodsd
       add esi,eax
       cmp esi,edi
       jc .l1
	;enlazar
       mov ecx,esi
       sub ecx,edi
       sub eax,ecx
       sub ecx,4
       mov [ebx],eax
	;fusionar con el anterior
       cmp eax,[ebx-4]
       jne .l2
       cmp ebx,edx
       je .l2 ;no fusionar con el primero
       mov edi,ebx
       add eax,4
       add ecx,eax
       add ebp,eax
    .l2: mov ebx,ebp ;fusionar con bloques de tama

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -