来一个简单的程序吧,思路简单(比较直观),不过程序有些长
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
MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN