PROWAREtech
x86 Assembly: strcpy Procedure
Copy ASCII string.
Use MASM for Visual C++ Express Edition 2005 to compile this procedure.
This procedure, strcpy_asm
, copies a C-string from the source to the destination and returns a pointer to the end of the destination so that another string can be concatenated. For Unicode strings see wcscpy_asm
.
The default behavior of strcpy
is to return the destination buffer but it is much more useful to return the end of the text in the destination buffer.
TITLE 'extern "C" char * strcpy_asm(char *destination, const char *source);'
.386P
.model FLAT
PUBLIC _strcpy_asm
_TEXT SEGMENT
_strcpy_asm PROC NEAR
mov edx, DWORD PTR [esp+8] ; source
mov cl, BYTE PTR [edx]
test cl, cl
mov eax, DWORD PTR [esp+4] ; destination
je SHORT label2
label1:
mov BYTE PTR [eax], cl
mov cl, BYTE PTR [edx+1]
inc eax
inc edx
test cl, cl
jne SHORT label1
label2:
mov BYTE PTR [eax], 0
ret 0
_strcpy_asm ENDP
_TEXT ENDS
END
This example C++ code uses this function.
#include <stdlib.h>
extern "C" char * strcpy_asm(char *destination, const char *source);
char str[100], *end;
int length;
end = strcpy_asm(str, "How ");
end = strcpy_asm(end, "now ");
end = strcpy_asm(end, "brown ");
end = strcpy_asm(end, "cow!");
length = end - str;
// or simply
length = strcpy_asm(strcpy_asm(strcpy_asm(strcpy_asm(str, "How "), "now "), "brown "), "cow!") - str;
// str == "How now brown cow!"
// length == 18
Comment