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

本文介绍了一个使用内联汇编实现的字符串比较函数。该函数通过逐字符对比两个字符串来判断它们是否相等,相等则返回0,不相等返回-1。文章包含了完整的内联汇编代码及一个简单的测试示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
*  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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值