求高手来个win32汇编字符串替换函数
求高手来个win32汇编字符串替换函数 网上复制的也可以,我在网上找了下没有找到类似函数
或者来个思路也可以。
伪函数调用 ;invoke ReplaceStr ("abc123a123","123","aaa") 如:把abc123a123 存在的所有 123 替换成 aaa
在此谢谢了。
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