首页
社区
课程
招聘
[原创]汇编实现 类strrchr 函数功能,遇到迷惑
2008-11-24 14:13 10281

[原创]汇编实现 类strrchr 函数功能,遇到迷惑

2008-11-24 14:13
10281
收藏
点赞7
打赏
分享
最新回复 (29)
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
mik 4 2008-11-25 00:43
26
0
LZ:还要注意整个函数语义,你在主楼贴的那个代码,你也原型都没搞清楚

char * strrchr(const char * string, char c);

这是要返回一个指针。

所以:不明白你为什么要:

xor eax,eax
mov [edi], al
-----------------------------------
要注意原型呀
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
llac 2008-11-25 01:06
27
0
问题已解决了,就一条std指令引发的问题,看来微软写代码也不怎么严谨哈,做串操作都不先检测标志寄存器的DF位
谢谢mik和书呆彭的热心帮助

收藏mik的 my_strrchr() 函数
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2008-11-25 01:21
28
0
再牛逼的代码,你xor esp, esp进去他也得死
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
llac 2008-11-25 01:41
29
0
呵呵,受教了
谢谢大家的热心指点,睡觉了,明天上班又要打瞌睡了
雪    币: 315
活跃值: (23)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
xfish 5 2009-1-7 14:23
30
0
to mik.
试试这个,扫描单个字符如果考虑被搜索字符串较长的话,还是串指令速度快。测试了下这个,比你的速度快上很多。。

; argc1 : char *, argc2: char
__strrchr:
      	push 	ebp
      	mov  	ebp, esp
      	push 	edi
      	
      	mov   	edi, [ebp+8h]
      	xor	eax, eax
      	or	ecx, -1
      	repne	scasb
      	not	ecx
      	sub	edi, ecx
      	
      	xor	edx, edx
      	movzx 	eax, byte [ebp+0ch]
.Loop:
      	repnz	scasb
      	cmove      edx, edi
   	jecxz	.Ret
   	jmp	.Loop
   	
.Ret:	
	dec	edx
	xchg	eax, edx
      	pop  	edi
      	leave
      	ret	4*2
游客
登录 | 注册 方可回帖
返回