我把程序改了,lefttime哥哥看看这样可以不
DSEG SEGMENT
String DB 80,0,80 DUP(?)
GC DB 0 ;大写字母
SC DB 0 ;小写字母
NC DB 0 ;数字
AC DB 0 ;其它字符
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV AH,10
LEA DX,String
INT 21H
MOV CX,0
MOV CL,String+1 ;获取字符串长度
LEA BX,String+2
NEXT: MOV AL,[BX]
CMP AL,30H ;这里先判断是否为数字
JB NEXT0
CMP AL,39H
JA NEXT0
INC NC ;如果是标志计数器加1
JMP LOP
NEXT0: CMP AL,41H ;判断是否为小写字母
JB NEXT1
CMP AL,5AH
JA NEXT1
INC GC
JMP LOP
NEXT1: CMP AL,61H ;这里判断是否为大写字母
JB LOP
CMP AL,7AH
JA LOP
INC SC
LOP: INC BX
LOOP NEXT
MOV AL,String+1 ;因为去除小写、大写和数字就是其余字符,所以用了3次减法
SUB AL,GC
SUB AL,SC
SUB AL,NC
MOV AC,AL
ADD sc,30h
mov dl,sc
mov ah,02h
int 21h
ADD gc,30h
mov dl,gc
mov ah,02h
int 21h
ADD ac,30h
mov dl,ac
mov ah,02h
int 21h
ADD nc,30h
mov dl,nc
mov ah,02h
int 21h
MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN
但是运行结果显示老是连在一起,怎么加光标把他们区分开呀?