;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;输入一字符串,转化成小写字母后输出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
str DB 100 ;缓冲区最大字符
DB ? ;实际输入字符数
DB 100 DUP(0) ;分配100个内存单元
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,SEG str
MOV DS,AX
MOV AH,0AH
LEA DX,str
INT 21H ;调用DOS10号功能输入字符串
MOV SI,DX
ADC SI,02H
MOV CX,64H ;循环100次
COMPA: MOV AL,[SI]
CMP AL,00H
JE NEXT ;如果下一个内存单元是默认值,就退出循环
CMP AL,41H
JL L1
CMP AL,5AH
JG L1 ;判断字符是否大写字母(ASCII码是否在41H-5AH间(65-90))
ADD [SI],20H ;如果是就加上32,变成小写字母
L1: INC SI
LOOP COMPA ;跳到下一个字符
NEXT: MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H ;输出回车换行
MOV AH,40H
MOV DX,offset str+02H ;字符起始地址,要+2,是因为用10号功能输入时前两个是系统使用的
MOV CX,00H
MOV SI,offset str+01H
MOV CL,[SI] ;字符长度
MOV BX,01H
INT 21H ;调用DOS40H功能输出字符串
MOV AH,4CH
INT 21H
CODE ENDS
END START
[此贴子已经被作者于2006-12-19 11:57:01编辑过]