汇编 编写strcmp 函数(简单版)

来源:互联网 发布:cs客户端 服务器端口 编辑:程序博客网 时间:2024/06/13 04:31
/***  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) exitpop ebx  ;还原指针pop eax inc eax ; 指向字符串下一个地址inc ebx jmp _loop ; 循环eqends:; condition : a == '\0'cmp ebx ,ecx  ; jne _neq  ; if ( b != '\0') exitjmp _eq   ; 相等_neq:mov eax , -1jmp _exit2_eq:xor eax ,eax_exit2:add esp , 8}}// 测试方法;int main(){/*char * c1 = "123";char * c2 = "123";");if (strcmp(c1,c2)==0)printf("equalprintf("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");}

原创粉丝点击