; The M13_COPYNEW.ASM file .586P .MODEL FLAT, stdcall ; Flat memory model EXTERN NEWARRAY@4:NEAR ; This procedure is defined in M13_NEWARRAY.cpp EXTERN strlen:NEAR ; This procedure is part of the C standard library PUBLIC COPYNEW ; COPYNEW is externally visible to the linker _TEXT SEGMENT ; Code segment begins ; Procedure for copying the source string into newly allocated string ; Input: str1 is the pointer to the source string ; Output: EAX is the pointer to the dynamically allocated target string COPYNEW PROC str1: DWORD push esi ; preserve registers push edi mov esi, str1 ; get pointer to the source string push esi call strlen ; calculate source string size inc eax ; Account for terminating null character push eax ; push required size of the memory block call NEWARRAY@4 ; allocate new block of memory mov edi, eax ; initialize destination pointer push eax ; preserve dynamic memory address L1: mov al, byte ptr [esi] ; copy characters from source... mov byte ptr [edi], al ; ...to destination, including terminating zero cmp al, 0 ; end of string is reached ? je L2 ; Yes, the destination string is ready inc esi ; No, keep copying... inc edi jmp L1 L2: pop eax ; return pointer to dynamic memory pop EDI ; restore preserved registers pop ESI ret COPYNEW ENDP _TEXT ENDS ; Code segment begins END