| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 769 人关注过本帖
标题:求高手来个win32汇编字符串替换函数
只看楼主 加入收藏
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求高手来个win32汇编字符串替换函数
求高手来个win32汇编字符串替换函数

网上复制的也可以,我在网上找了下没有找到类似函数

或者来个思路也可以。

伪函数调用 ;invoke ReplaceStr  ("abc123a123","123","aaa")    如:把abc123a123 存在的所有 123 替换成 aaa

在此谢谢了。
搜索更多相关主题的帖子: 网上 字符串 
2012-11-27 17:48
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
为啥非要用汇编做呢

DO IT YOURSELF !
2012-11-27 20:37
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
网上找到的
不过是16位汇编的
程序代码:
1、 编写一个把字符串中的所有小写字符转换成大写字符的子程序Strupr,要求字符串的首地址和结束符为其入口参数。 
解:
.MODEL SMALL, C
.DATA
buffDB   "This is a example.", 0
.CODE
StruprPROC   USES AX BX, String:PTR BYTE, Tail:BYTE
MOVBX, String
.REPEAT
MOVAL, [BX]
.IF AL>=’a’ && AL<=’z’
SUBAL, 20H
MOV[BX], AL
.ENDIF
INCBX
.UNTIL AL==Tail
RET
StruprENDP
.STARTUP
INVOKE Strupr, ADDR buff, 0
.EXIT 0
END 

2、编写一个从字符串中拷贝子串的子程序Strncpy,它有四个参数str1、str2、idx和num,其具体功能为把字符串str2中从第idx个(从0开始记数)字符开始、num个字符传送给str1,字符串str1和str2都是以ASCII码0为结束符。 
解:
.MODELSMALL, C
.DATA
str1DB "12345ABCDEF", 0
str2DB 20 DUP(’A’)
.CODE
StrlenPROC  USES AX BX, String:PTR BYTE
……;参见例10.1
StrlenENDP
StrncpyPROC  USES AX CX DI SI DS ES, str1:FAR PTR BYTE, str2:FAR PTR BYTE, idx:WORD, num:WORD
LESDI, str1
LDSSI, str2;取两个字符串的首地址
INVOKEStrlen, SI;计算源字符串的长度,在CX中
MOVAX, idx
.IF AX >= CX;若字符起点就超过源串的长度
MOVBYTE PTR ES:[DI], 0;拷贝的字符串为“空”
JMPover
.ENDIF
ADDSI, AX;定源串中字符的起点SI
MOVCX, num
CLD
.REPEAT
LODSB
STOSB
.UNTILCXZ AL==0
.IF AL!=0;设置目标串的结束符
MOVBYTE PTR[DI], 0
.ENDIF
over:RET
StrncpyENDP
.STARTUP
INVOKEStrncpy, ADDR str2, ADDR str1, 3, 5
.EXIT0
END

DO IT YOURSELF !
2012-11-27 20:49
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 3楼 wp231957
不是这个,这个不是字符串的替换
2012-11-27 23:30
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 3楼 wp231957
不过还是感谢下,我已经自己写出来了
2012-11-27 23:30
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
写得不好。

szTestStr1      byte    "AB123ABCABBABAB",0
szTest1         byte    "AB",0
szTest2         byte    "YY",0

调用: invoke ReplaceStr,addr szTestStr1,addr szTest1,addr szTest2

ReplaceStr  proc  _lpSource,_lpBuffer1,_lpBuffer2   
            LOCAL  @dwLength,@dwCount   
            mov    @dwCount,0
            invoke lstrlen,_lpBuffer1
            push   eax
            invoke lstrlen,_lpBuffer2
            mov    @dwLength,eax
            pop    ebx
            .if    eax != ebx
                   mov eax,FALSE
                   ret              
            .endif
            invoke lstrlen,_lpSource
            mov    ecx, eax
            mov    esi,_lpSource
            mov    edi,_lpBuffer1
            mov    ebx,_lpBuffer2           
            .while ecx         
                   push   ecx   
                   invoke lstrlen,_lpBuffer2
                   mov    @dwLength,eax                 
                   .while @dwLength   ;2
                          mov dl,byte ptr [esi]
                          .if dl != byte ptr [edi]
                              .break
                          .else                        
                              inc @dwCount
                              inc esi  
                              inc edi  
                          .endif            
                          dec @dwLength                                                                 
                   .endw      
                          invoke lstrlen,_lpBuffer2
                   .if    @dwCount != eax
                          inc esi
                          mov edi,_lpBuffer1   
                          mov @dwCount,0  
                   .else
                          push esi
                          sub esi,@dwCount  
                          mov edi,esi
                          mov esi,_lpBuffer2
                          mov ecx,@dwCount
                          cld
                          rep movsb
                          pop esi
                          mov edi,_lpBuffer1
                          mov @dwCount,0
                   .endif                                 
             pop ecx
             dec ecx                        
            .endw
            
             ret     
ReplaceStr  endp
2012-11-27 23:35
快速回复:求高手来个win32汇编字符串替换函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.072862 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved