DATAS SEGMENT
letter dw 0
num dw 0
other dw 0
count dw 0
string db 'enter a string:$'
str1 db 'letter:$'
str2 db 'number:$'
str3 db 'other:$'
crlf db 0ah,0dh,'$'
n db 10
DATAS ENDS
STACKS SEGMENT stack
dw 100 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lop:
mov letter,0
mov num,0
mov other,0
mov count,0
lea dx,string
mov ah,9
int 21h
lop1:
inc count
mov ah,1
int 21h
cmp al,'$'
jz lop4
cmp al,30h
jl lop1
cmp al,39h
jg lop2
inc num
lop2:
cmp al,41h
jl lop1
cmp al,5Ah
jg lop3
inc letter
lop3:
cmp al,61h
jl lop1
cmp al,7Ah
jg lop1
inc letter
jmp lop1
lop4:
lea dx,crlf
mov ah,9
int 21h
lea dx,str1;输出字母数
mov ah,9h
int 21h
mov ax,0
mov ax,letter
div n;al ah
push ax
cmp al,0
jz lop5
add al,30h
mov dl,al
mov ah,2
int 21h
lop5:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
lea dx,str2;输出数字个数
mov ah,9h
int 21h
mov ax,0
mov ax,num
div n;al ah
push ax
cmp al,0
jz lop6
add al,30h
mov dl,al
mov ah,2
int 21h
lop6:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
mov ax,num
mov bx,letter
sub count,ax
sub count,bx
mov ax,count
mov other,ax
sub other,1
lea dx,str3;输出其他数个数
mov ah,9h
int 21h
mov ax,0
mov ax,other
div n;al ah
push ax
cmp al,0
jz lop7
add al,30h
mov dl,al
mov ah,2
int 21h
lop7:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
jmp lop
MOV AH,4CH
INT 21H
CODES ENDS
END START
letter dw 0
num dw 0
other dw 0
count dw 0
string db 'enter a string:$'
str1 db 'letter:$'
str2 db 'number:$'
str3 db 'other:$'
crlf db 0ah,0dh,'$'
n db 10
DATAS ENDS
STACKS SEGMENT stack
dw 100 dup(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lop:
mov letter,0
mov num,0
mov other,0
mov count,0
lea dx,string
mov ah,9
int 21h
lop1:
inc count
mov ah,1
int 21h
cmp al,'$'
jz lop4
cmp al,30h
jl lop1
cmp al,39h
jg lop2
inc num
lop2:
cmp al,41h
jl lop1
cmp al,5Ah
jg lop3
inc letter
lop3:
cmp al,61h
jl lop1
cmp al,7Ah
jg lop1
inc letter
jmp lop1
lop4:
lea dx,crlf
mov ah,9
int 21h
lea dx,str1;输出字母数
mov ah,9h
int 21h
mov ax,0
mov ax,letter
div n;al ah
push ax
cmp al,0
jz lop5
add al,30h
mov dl,al
mov ah,2
int 21h
lop5:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
lea dx,str2;输出数字个数
mov ah,9h
int 21h
mov ax,0
mov ax,num
div n;al ah
push ax
cmp al,0
jz lop6
add al,30h
mov dl,al
mov ah,2
int 21h
lop6:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
mov ax,num
mov bx,letter
sub count,ax
sub count,bx
mov ax,count
mov other,ax
sub other,1
lea dx,str3;输出其他数个数
mov ah,9h
int 21h
mov ax,0
mov ax,other
div n;al ah
push ax
cmp al,0
jz lop7
add al,30h
mov dl,al
mov ah,2
int 21h
lop7:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h
jmp lop
MOV AH,4CH
INT 21H
CODES ENDS
END START