10.1 字符串的处理程序
优质
小牛编辑
128浏览
2023-12-01
例10.2 编写一个把字符串中的所有小写字符转换成大写字符的子程序Strupr,要求字符串的首地址和结束符为其入口参数。
解: | |||
.MODEL SMALL,C | |||
.DATA | |||
buff | DB"This is a example.", 0 | ||
.CODE | |||
Strupr | PROC USES AX BX, String:PTR BYTE,Tail:BYTE | ||
MOV | BX, String | ||
.REPEAT | |||
MOV | AL, [BX] | ||
.IF AL>='a' &&AL<='z' | |||
SUB | AL, 20H | ||
MOV | [BX], AL | ||
.ENDIF | |||
INC | BX | ||
.UNTIL | AL==Tail | ||
RET | |||
Strupr | ENDP | ||
.STARTUP | |||
INVOKE Strupr,ADDR buff, 0 | |||
.EXIT 0 | |||
END |
例10.3编写一个从字符串中拷贝子串的子程序Strncpy,它有四个参数str1、str2、idx和num,其具体功能为把字符串str2中从第idx个(从0开始记数)字符开始、num个字符传送给str1,字符串str1和str2都是以ASCII码0为结束符。
解: | ||||
.MODEL | SMALL, C | |||
.DATA | ||||
str1 | DB "12345ABCDEF", 0 | |||
str2 | DB 20 DUP('A') | |||
.CODE | ||||
Strlen | PROC USES AX BX, String:PTR BYTE | |||
…… | ;参见例10.1 | |||
Strlen | ENDP | |||
Strncpy | PROC USES AX CX DI SI DS ES, str1:FAR PTR BYTE, str2:FAR PTR BYTE, idx:WORD, num:WORD | |||
LES | DI,str1 | |||
LDS | SI,str2 | ;取两个字符串的首地址 | ||
INVOKE | Strlen, SI | ;计算源字符串的长度,在CX中 | ||
MOV | AX,idx | |||
.IF AX>= CX | ;若字符起点就超过源串的长度 | |||
MOV | BYTEPTR ES:[DI], 0 | ;拷贝的字符串为“空” | ||
JMP | over | |||
.ENDIF | ||||
ADD | SI,AX | ;定源串中字符的起点SI | ||
MOV | CX,num | |||
CLD | ||||
.REPEAT | ||||
LODSB | ||||
STOSB | ||||
.UNTILCXZ AL==0 | ||||
.IF AL!=0 | ;设置目标串的结束符 | |||
MOV | BYTEPTR[DI], 0 | |||
.ENDIF | ||||
over: | RET | |||
Strncpy | ENDP | |||
.STARTUP | ||||
INVOKE | Strncpy, ADDR str2, ADDR str1, 3, 5 | |||
.EXIT | 0 | |||
END |