Я новичок в сборке и все больше узнаю.У меня есть проблема, которую я пытался написать в те дни, но у меня есть некоторые проблемы с ней.Я должен был написать программу, которая динамически распределяет и освобождает память из динамической памяти, поддерживаемой операционной системой.Программа работает, но есть проблемы.В основной процедуре память выделяется, но призыв к свободе не совсем верен.
Мне нравится знать, как я могу добавить аргумент clear, выдвинутый в процедуру.так выделенная память освобождается?
Это для сборки x86 32b с использованием Irvine, и программа работает.
INCLUDE Irvine32.inc
HANDLE TEXTEQU <DWORD>
H_ZERO_MEM EQU 8
GetProcessHeap PROTO
HeapAlloc PROTO,
hHeap:HANDLE,
dwflags: DWORD,
dwbytes: DWORD
HeapFree PROTO,
hHeap:HANDLE,
dwFlags:DWORD,
lpMem:DWORD
.data
MSGAlloc BYTE " Successfully allocated ",0
MSGFree BYTE " Successfully freed",0
notAllocMSG BYTE " Error in allocating. Please try again! ",0
notFreeMSG BYTE " There was an error freeing the heap memory",0
sizeH DWORD ?
.code
Alloc Proc
push ebp
mov ebp,esp
INVOKE GetProcessHeap
cmp eax, 0
je doNotAlloc
INVOKE HeapAlloc, eax, H_ZERO_MEM, [ebp +8]
doNotAlloc:
pop ebp
ret 4
Alloc Endp
FREE proc
push ebp
mov ebp,esp
INVOKE GetProcessheap
cmp eax, 0
je doNotFree
INVOKE HeapFree , eax, 0, [ebp + 8]
doNotFree:
pop ebp
ret 4
FREE Endp
main proc
mov sizeH , 1024
mov eax, sizeH
push eax
call ALLOC
cmp eax, 0
je notAlloc
push eax
mov eax, sizeH
call writedec
mov edx, offset MSGAlloc
call writestring
call crlf
call FREE
cmp eax, 0
je notHeapFreed
mov eax, sizeH
call writedec
mov edx, offset MSGFree
call writestring
jmp endMSG
notAlloc:
mov edx, offset notAllocMSG
call writestring
jmp endMSG
notHeapFreed:
mov edx, offset notFreeMSG
call writestring
endMSG:
Exit
main ENDP
END main