经典汇编语言教程:10.1 字符串的处理程序

10.1 字符串的处理程序

例10.2编写一个把字符串中的所有小写字符转换成大写字符的子程序Strupr,要求字符串的首地址和结束符为其入口参数。

解:
.MODEL SMALL, C
.DATA

buff

DB   "This is a example.", 0
.CODE
StruprPROC   USES AX BX, String:PTR BYTE, Tail:BYTE
MOVBX, String
.REPEAT

MOV

AL, [BX]
.IF AL>='a' && AL<='z'

SUB

AL, 20H

MOV

[BX], AL
.ENDIF

INC

BX
.UNTIL AL==Tail
RET
StruprENDP
.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为结束符。

解:
.MODELSMALL, C
.DATA

str1

DB "12345ABCDEF", 0

str2

DB 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;若字符起点就超过源串的长度

MOV

BYTE PTR ES:[DI], 0;拷贝的字符串为“空”

JMP

over
.ENDIF
ADDSI, AX;定源串中字符的起点SI
MOVCX, num
CLD
.REPEAT
LODSB
STOSB
.UNTILCXZ AL==0
.IF AL!=0;设置目标串的结束符

MOV

BYTE PTR[DI], 0
.ENDIF
over:RET
StrncpyENDP
.STARTUP
INVOKEStrncpy, ADDR str2, ADDR str1, 3, 5
.EXIT0
END

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号