从键盘读入一个字符串(<80),统计字母,数字及其他字符的个数 datasegment segment array db 80 db ? db 80 dup(?)datacount db 0wordcount db 0othercount db 0out1 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 exitexit: mov dl,' ' mov ah,2 int 21h pop bx pop dx pop ax ret progdec endp codesegment ends end start

评论