- global _s_strlen
- global _s_strcat
- global _s_memcpy
- global _s_memset
- segment .text
- ;unsigned int s_strlen(char*);
- _s_strlen:
- push ebp
- mov ebp,esp
- mov edi,[ebp + 8]
- mov ecx,-1
- xor al,al
- cld
- repnz
- scasb
- mov eax,ecx
- not eax
- dec eax
- mov esp,ebp
- pop ebp
- ret
- ;char* s_strcat(char*,const char*);
- _s_strcat:
- push ebp
- mov ebp,esp
- mov edi,[ebp + 8]
- mov esi,[ebp + 12]
- mov ecx,-1
- xor al,al
- cld
- repnz
- scasb
- dec edi
- .b: lodsb
- stosb
- test al,al
- jnz .b
- mov eax,[ebp + 8]
- mov esp,ebp
- pop ebp
- ret
- ;char* s_memcpy(char*,const char*,int);
- _s_memcpy:
- push ebp
- mov ebp,esp
- mov edi,[ebp + 8]
- mov esi,[ebp + 12]
- mov ecx,[ebp + 16]
- rep
- movsb
- mov eax,[ebp + 8]
- mov esp,ebp
- pop ebp
- ret
- ;char* s_memset(char*,const char,int);
- _s_memset:
- push ebp
- mov ebp,esp
- mov edi,[ebp + 8]
- mov eax,[ebp + 12]
- mov ecx,[ebp + 16]
- rep
- stosb
- mov eax,[ebp + 8]
- mov esp,ebp
- pop ebp
- ret
汇编实现memcpy,memset,strcat,strlen
最新推荐文章于 2023-06-27 21:39:05 发布