从键盘读入一个字符串(<80),统计字母,数字及其他字符的个数
datasegment segment
array db 80
db ?
db 80 dup(?)
datacount db 0
wordcount db 0
othercount db 0
out1 db 'datacount:','$'
out2 db 'wordcount:','$'
out3 db 'othercount:','$'
datasegment ends
codesegment segment
assume ds:datasegment,cs:codesegment
start:
mov ax,datasegment
mov ds,ax
lea dx,array
mov ah,0ah
int 21h
mov si,2
mov cl,array[1]
mov ch,0
next: mov bl,array[si]
cmp bl,30h
jae next1
jmp other
next1:
cmp bl,39h
jbe data
cmp bl,60h
jbe other
cmp bl,5Ah
jbe words
cmp bl,60h
jbe other
cmp bl,7Ah
jbe words
jmp other
data:
add datacount[0],1
jmp done
other:
add othercount[0],1
jmp done
words:
add wordcount[0],1
jmp done
done:
inc si
loop next
lea dx,out1
mov ah,9
int 21h
mov bl,datacount
mov bh,0
call progdec
mov dl,';'
mov ah,2
int 21h
lea dx,out2
mov ah,9
int 21h
mov bl,wordcount
mov bh,0
call progdec
mov dl,';'
mov ah,2
int 21h
lea dx,out3
mov ah,9
int 21h
mov bl,othercount
mov bh,0
call progdec
mov dl,';'
mov ah,2
int 21h
mov ah,4ch
int 21h
progdec proc
push ax
push dx
push bx
mov dl,100
mov ax,bx
div dl
cmp al,0
jne hundred
mov ax,bx
mov dl,10
div dl
cmp al,0
jne ten
mov dl,bl
add dl,30h
mov ah,2
int 21h
jmp exit
ten:
mov dl,al
add dl,30h
mov bx,ax
mov ah,2
int 21h
mov dl,bh
add dl,30h
mov ah,2
int 21h
jmp exit
hundred:
mov dl,al
mov bx,ax
add dl,30h
mov ah,2
int 21h
mov ah,bh
mov al,ah
mov ah,0
mov dl,10
div dl
mov dl,al
add dl,30h
mov bx,ax
mov ah,2
int 21h
mov dl,bh
add dl,30h
mov ah,2
int 21h
jmp exit
exit:
mov dl,' '
mov ah,2
int 21h
pop bx
pop dx
pop ax
ret
progdec endp
codesegment ends
end start
评论