extern "C" void _cdecl MyStrcpy(char * src,char *dest);
extern "C" int _cdecl MyStrlen(char * src);
extern "C" int _cdecl MyStrcmp(char * src,char * dest);
extern "C" int _cdecl MyStrchr(char * src,char ch);
extern "C" void _cdecl MyStrncpy(char * src,char * dest,int n);
extern "C" char * _cdecl MyStrstr(char * src,char * dest);
extern "C" char * _cdecl MyStrcat(char * dest,char * src);
extern "C" int MyStrcspn(const char *s1, const char **2);
extern "C" char * _cdecl MyStrdup(char * str);
extern "C" char * _cdecl MyStrlwr(char * str);
extern "C" char * _cdecl MyStrnset(char * str,int ch,int n);
extern "C" char * _cdecl MyStrrchr(char * str,int ch);
extern "C" char * _cdecl MyStrrev(char * str);
extern "C" char * _cdecl MyStrupr(char * str);
extern "C" void _cdecl MySwab(char * src, char * dest,int nByte);
.386 .model flat public _MyStrstr strstr_code segment byte public 'strstr_code' assume cs:strstr_code _MyStrstr proc near push ebp mov ebp , esp push esi push edi push ecx push edx mov esi , [esp + 24] ;原串 mov edi , [esp + 28] ;模式串 push edi ;求出模式字符串的长度存放在edx寄存器中 mov edx , 0 strlen_again: mov cl , [edi] cmp cl , 00h jz strlen_label add edi , 1 add edx , 1 jmp strlen_again strlen_label: pop edi mov eax , 0 ;进行模式匹配,匹配结果存放在eax中 again: cmp edx , 0 jz notfind_label mov cl , [esi] cmp cl , 00h jz notfind_label mov cl , [edi] cmp cl , 00h jz find_label cmp cl , [esi] jnz next_label add edi , 1 add esi , 1 jmp again next_label: add esi , 1 mov edi , [esp + 28] jmp again find_label: sub esi , edx mov eax , esi jmp exit_loop notfind_label: mov eax , 0 jmp exit_loop exit_loop: pop edx pop ecx pop edi pop esi mov esp , ebp pop ebp ret _MyStrstr endp strstr_code ends end |
.386 .model flat public _MyStrncpy strncpy_code segment byte public 'strncpy_code' assume cs:strncpy_code _MyStrncpy proc near push ebp mov ebp , esp push esi push edi push ecx push edx mov esi , [esp + 24] mov edi , [esp + 28] mov ecx , [esp + 32] mov eax , 0 sub ecx , 0 js exit_loop jz exit_loop again: mov dl , [esi] cmp dl , 00h jz exit_loop mov [edi] , dl add esi , 1 add edi , 1 add eax , 1 cmp eax , ecx jz exit_loop jmp again exit_loop: pop edx pop ecx pop edi pop esi mov esp , ebp pop ebp ret _MyStrncpy endp strncpy_code ends end |
.386
.model flat
public _MyStrlen
strlen_code segment byte public 'strlen_code'
assume cs:strlen_code
_MyStrlen proc near
push ebp
mov ebp , esp
push ecx
push esi
mov eax , 0
mov esi , [esp + 16]
again:
mov cl , [esi]
cmp cl , 00h
jz exit_loop
add eax , 1
add esi , 1
jmp again
exit_loop:
pop esi
pop ecx
mov esp , ebp
pop ebp
ret
_MyStrlen endp
strlen_code ends
end
.386 .model flat public _MyStrcpy strcpy_code segment byte public 'strcpy_code' assume cs:strcpy_code _MyStrcpy proc near push ebp mov ebp , esp push esi push edi mov esi , [esp + 16] mov edi , [esp + 20] again: mov al , [esi] mov [edi] , al add edi , 1 add esi , 1 cmp al , 00h jnz again pop edi pop esi mov esp , ebp pop ebp ret _MyStrcpy endp strcpy_code ends end |
.386 .model flat public _MyStrcmp strcmp_code segment byte public 'strcmp_code' assume cs:strcmp_code _MyStrcmp proc near push ebp mov ebp , esp push edi push esi push ecx mov esi , [esp + 20] mov edi , [esp + 24] mov eax , 0 again: mov cl , [esi] cmp cl , 00h jz equal cmp cl , [edi] jnz not_equal add esi , 1 add edi , 1 jmp again not_equal: jnc above mov eax , -1 jmp exit_loop above: mov eax , 1 jmp exit_loop equal: mov cl , [edi] cmp cl , 00h jnz below mov eax , 0 jmp exit_loop below: mov eax , -1 exit_loop: pop ecx pop esi pop edi mov esp , ebp pop ebp ret _MyStrcmp endp strcmp_code ends end |
.386 .model flat public _MyStrchr strchr_code segment byte public 'strchr_code' assume cs:strchr_code _MyStrchr proc near push ebp mov ebp , esp push edx push esi mov esi , [esp + 16] mov dl , [esp + 20] mov eax , 0 again: mov dh , [esi] cmp dh , dl jz exit_loop cmp dh , 00h jz notfind add esi , 1 add eax , 1 jmp again notfind: mov eax , -1 jmp exit_loop exit_loop: pop esi pop edx mov esp , ebp pop ebp ret _MyStrchr endp strchr_code ends end |
.386
.model flat
public _MyStrcat
strcat_code segment byte public 'strcat_code'
assume cs:strcat_code
_MyStrcat proc near
push ebp
mov ebp , esp
push esi
push edi
push ecx
mov edi , [esp + 20]
mov esi , [esp + 24]
push edi
again:
mov cl , [edi]
cmp cl , 00h
jz strcat_process
add edi , 1
jmp again
strcat_process:
mov cl , [esi]
cmp cl , 00h
jz exit_loop
mov [edi] , cl
add edi , 1
add esi , 1
jmp strcat_process
exit_loop:
pop edi
mov eax , edi
pop ecx
pop edi
pop esi
mov esp , ebp
pop ebp
ret
_MyStrcat endp
strcat_code ends
end
.386 .model flat public _MyStrcspn strcspn_code segment byte public 'strcspn_code' assume cs:strcspn_code _MyStrcspn proc near push ebp mov ebp , esp push ecx mov esi , [esp + 12] again: mov edi , [esp + 16] mov cl , [esi] cmp cl , 00h jz not_find add esi , 1 jmp exist exist: mov ch , [edi] cmp ch , 00h jz again cmp ch , cl jz find add edi , 1 jmp exist find: mov eax , [esp + 12] sub eax , esi neg eax sub eax , 1 jmp exit_loop not_find: mov eax , -1 exit_loop: pop ecx mov esp , ebp pop ebp ret _MyStrcspn endp strcspn_code ends end |
.386 .model flat public _MyStrdup data1 segment public 'data1' rst db 256 dup(00h) data1 ends strdup_code segment byte public 'strdup_code' assume cs:strdup_code _MyStrdup proc near push ebp mov ebp , esp push esi push edi mov esi , [esp + 16] mov edi , offset rst again: mov al , [esi] cmp al , 00h jz exit_loop mov [edi] , al add esi , 1 add edi , 1 jmp again exit_loop: mov eax , offset rst pop edi pop esi mov esp , ebp pop ebp ret _MyStrdup endp strdup_code ends end |
.386 .model flat public _MyStrlwr strlwr_code segment byte public 'strlwr_code' assume cs:strlwr_code _MyStrlwr proc near push ebp mov ebp , esp push esi mov esi , [esp + 12] again: mov al , [esi] cmp al , 00h jz exit_loop cmp al , 41h jae preconvert add esi , 1 jmp again preconvert: cmp al , 5ah jbe convert add esi , 1 jmp again convert: add al , 32 mov [esi] , al add esi , 1 jmp again exit_loop: mov eax , [esp + 12] pop esi mov esp , ebp pop ebp ret _MyStrlwr endp strlwr_code ends end |
.386 .model flat public _MyStrnset strnset_code segment byte public 'strnset_code' assume cs:strnset_code _MyStrnset proc near push ebp mov ebp , esp push esi mov esi , [ebp + 8] mov edx , [ebp + 12] mov ecx , [ebp + 16] again: sub ecx , 1 jb exit_loop mov [esi] , dl add esi , 1 jmp again exit_loop: mov eax , [ebp + 8] pop esi mov esp , ebp pop ebp ret _MyStrnset endp strnset_code ends end |
.386 .model flat public _MyStrrchr strrchr_code segment byte public 'strrchr_code' assume cs:strrchr_code _MyStrrchr proc near push ebp mov ebp , esp push esi mov eax , 0 mov esi , [ebp + 8] mov eax , [ebp + 12] mov edx , 0 again: mov cl , [esi] cmp cl , 00h jz exit_loop cmp cl , al jz equal add esi , 1 jmp again equal: mov edx , esi add esi , 1 jmp again exit_loop: mov eax , edx pop esi mov esp , ebp pop ebp ret _MyStrrchr endp strrchr_code ends end |
.386
.model flat
public _MyStrrev
strrev_code segment byte public 'strrev_code'
assume cs:strrev_code
_MyStrrev proc near
push ebp
mov ebp , esp
push esi
mov esi , [ebp + 8]
mov ecx , 0
again:
mov eax , 0
mov al , [esi]
cmp al , 00h
jz prerev
add ecx , 1
add esi , 1
push eax
jmp again
prerev:
mov esi , [ebp + 8]
start:
sub ecx , 1
jb exit_loop
pop eax
mov [esi] , al
add esi , 1
jmp start
exit_loop:
mov eax , [ebp + 8]
pop esi
mov esp , ebp
pop ebp
ret
_MyStrrev endp
strrev_code ends
end
.386 .model flat public _MyStrupr strupr_code segment byte public 'strupr_code' assume cs:strupr_code _MyStrupr proc near push ebp mov ebp , esp push esi mov esi , [ebp + 8] again: mov cl , [esi] cmp cl , 00h jz exit_loop cmp cl , 61h jae above_than add esi , 1 jmp again above_than: cmp cl , 7ah ja invalid sub cl , 32 mov [esi] , cl add esi , 1 jmp again invalid: add esi , 1 jmp again exit_loop: mov eax , [ebp + 8] pop esi mov esp , ebp pop ebp ret _MyStrupr endp strupr_code ends end |
.386 .model flat public _MySwab swab_code segment byte public 'swab_code' assume cs:swab_code _MySwab proc near push ebp mov ebp , esp push esi push edi mov esi , [ebp + 8] mov edi , [ebp + 12] mov ecx , [ebp + 16] again: cmp ecx , 0 jbe exit_loop mov al , [esi] cmp al , 00h jz exit_loop mov [edi + 1] , al mov al , [esi + 1] mov [edi] , al add edi , 2 add esi , 2 sub ecx , 2 jmp again exit_loop: pop edi pop esi mov esp , ebp pop ebp ret _MySwab endp swab_code ends end |