/**
* description : 内联汇编 ,用来 判断两个字符串是否相等, 如果相等返回0 , 否则 -1 .
* author :renwang
* data: 2011-7-23 *
*/
int cmp(char * a , char * b )
{
char _ends = '\0';
_asm
{
mov eax ,a ; a 是指针,在内嵌汇编中,会自动转成 " mov eax , dword ptr [a] " a是指针的地址 ,意思是将地址a 的值 (也就是指针a 所指向的地址值)寄存到eax 中
mov ebx ,b ; char * pa = a; char * pb = b ;
movsx ecx , dword ptr [_ends];
_loop:
push eax ; 保存当前的字符串指针,用于下一次递增
push ebx
movsx eax , [eax] ; 将当前eax地址的值 存在eax 寄存器 , char a = *pa;
movsx ebx ,[ebx];char b = *pb;
cmp eax ,ecx ;
je eqends ; if (a == '\0' )
cmp eax , ebx
jne _neq ;if (a != b) exit
pop ebx ;还原指针
pop eax
inc eax ; 指向字符串下一个地址
inc ebx
jmp _loop ; 循环
eqends: ; condition : a == '\0'
cmp ebx ,ecx ;
jne _neq ; if ( b != '\0') exit
jmp _eq ; 相等
_neq:
mov eax , -1
jmp _exit2
_eq:
xor eax ,eax
_exit2:
add esp , 8
}
}
// 测试方法;
int main()
{
/*
char * c1 = "123";
char * c2 = "123";");
if (strcmp(c1,c2)==0)
printf("equal
printf("no equal");
return 0;*/
/*
int a = max(27,25);
printf("%d" ,a);*/
char * b = "123";
int c ;
scanf("%d" , &c);
char cc[100];
sprintf(cc,"%d",c);
int a = cmp(b,cc);
printf("%d" ,a );
system("pause");
}
汇编 编写strcmp 函数(简单版)
最新推荐文章于 2023-10-21 13:57:45 发布