vb字符串处理函数:汇编字符串的处理程序

例10.2编写一个把字符串中的所有小写字符转换成大写字符的子程序Strupr,要求字符串的首地址和结束符为其入口参数。
解:
.MODEL SMALL,C
.DATA
buffDB\"Thisisaexample.\",0
.CODE
StruprPROCUSESAXBX,String:PTRBYTE,Tail:BYTE
MOVBX,String
.REPEAT
MOVAL,[BX]
.IF AL>=’a’&&AL<=’z’
SUBAL,20H
MOV[BX],AL
.ENDIF
INCBX
.UNTILAL==Tail
RET
StruprENDP
.STARTUP
INVOKE Strupr,ADDRbuff,0
.EXIT 0
END

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

延伸阅读

最新评论

发表评论