统计小写字母个数
A1单元开始定义了一个长度为N的字符串,找出其中所有的小写字母并存放到以A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。
ASSUME CS:CODE,DS:DATA,SS:STACK
;A1单元开始定义了一个长度为N的字符串,找出其中所有的小写字母并存放到以A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。
DATA SEGMENT
NOTE DB 'Please input the sentence:',0AH,0DH,'$'
LS DB 'The lower letters are:',0AH,0DH,'$'
SUM DB 'The numbers of lower-case letters:',0AH,0DH,'$'
A1 DB 50 DUP(0) ;25个字节空间
A2 DB 50 DUP(?) ;存放小写字母
SL DW 0 ;记录小写字母的数量
DATA ENDS
STACK SEGMENT
DB 128 DUP(0)
STACK ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,128
SHOW:
LEA DX,NOTE
MOV AH,9
INT 21H
MOV DI,0
INPUT:
MOV AH,1
INT 21H
CMP AL,0DH
JE NEXT
MOV A1[DI],AL
INC DI ;DI记录了存放的总数
JMP INPUT
NEXT:
LEA DX,LS
MOV AH,9
INT 21H
TRAVERSE:
MOV SI,0
MOV CX,DI ;CX记录总数
MOV DI,0
CHOOSE:
CMP SI,CX
JBE JUDGE
JMP PRINT
JUDGE:
CMP A1[SI],61H ;61H-7AH a-z
JB OTHER
CMP A1[SI],7AH
JG OTHER
JMP FIND
FIND:
MOV BL,A1[SI]
MOV A2[DI],BL
INC WORD PTR SL[0]
INC DI
INC SI
JMP CHOOSE
OTHER:
INC SI
JMP CHOOSE
PRINT:
MOV SI,0
PRINT_LETTER:
MOV DL,A2[SI]
INC SI
MOV AH,02H
INT 21H
LOOP PRINT_LETTER
MOV DL,0AH
MOV AH,2
INT 21H
LEA DX,SUM
MOV AH,9
INT 21H
PRINT_NUMS:
MOV AX,SL[0]
MOV BX,10
MOV CX,0
MOV DX,0
P1:
DIV BX
PUSH DX
INC CX
CWD
CMP AX,0
JNE P1
P2:
POP DX
ADD DL,30H
MOV AH,02H
INT 21H
LOOP P2
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START