;编制一段完整的程序,从键盘上输入一个以‘$’结尾的字符串,
;然后对其中的数字字符(0~9)和非数字字符个数分别进行统计,
;并以十进制形式输出显示统计结果。
;编制一段完整的程序,从键盘上输入一个以‘$’结尾的字符串,
;然后对其中的数字字符(0~9)和非数字字符个数分别进行统计,
;并以十进制形式输出显示统计结果。
DATAS SEGMENT
;此处输入数据段代码
STRINGA DB 80H
DB 0
DB 280H DUP('$')
NUM DW 0
DIGITL DW 0
INPUTSET DB 'PLEASE ENTER FOUR DIGITS!$'
ERRORTIP DB 'THERE ARE NOT "$"$'
NUMTIP DB 'THE NUMBER OF INTERGE IS:$'
CHARTIP DB 'THE NUMBER OF CHAR IS:$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DW 40H DUP(0)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
;此处输入代码段代码
;初始化
MOV AX,STACKS;调用堆栈的命令
MOV SS,AX
LEA SP,TOP
FIRST:
MOV AX,0
MOV NUM,AX
MOV DIGITL,AX
;输入提示
MOV DX,OFFSET INPUTSET
MOV AH,09H
INT 21H
MOV DL,0AH;回车
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
;输入字符串A
LEA DX,STRINGA
MOV AH,0AH
INT 21H
MOV DL,0AH;回车
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
;指针初始化
XOR CX,CX
MOV CL,STRINGA+1;字符长度
MOV SI,0
JCX:
INC SI
LOOP JCX
;数组的下标从0开始,字符串的前两个地址用来存放数组首地址和偏移量,所以取刚刚输入的最后一位要SI加1
INC SI
;判断是不是‘$‘
CMP STRINGA[SI],'$'
JNZ DONT
;输入正常,开始统计
XOR CX,CX
MOV CL,STRINGA+1
MOV SI,2
NEXT:
MOV AL,STRINGA[SI]
;0~9
CMP AL,'0'
JB STAT_CHAR
CMP AL,'9'
JA STAT_CHAR
XOR BX,BX
MOV BX,NUM
INC BX
MOV NUM,BX
JMP SEEWHAT
STAT_CHAR:
XOR BX,BX
MOV BX,DIGITL
INC BX
MOV DIGITL,BX
;输出这个字符,便于后期检查
SEEWHAT:
;MOV DL,AL
;MOV AH,02H
;INT 21H
INC SI
LOOP NEXT
;转十进制
LEA DX,NUMTIP
MOV AH,09H
INT 21H
XOR AX,AX
MOV AX,NUM
XOR BX,BX
MOV BX,10
XOR CL,CL
ML1:
XOR DX,DX
DIV BX
ADD DX,30H
PUSH DX;压入栈中
INC CL;记录共有几个
CMP AX,0
JNE ML1
MW1I:
POP DX
MOV AH,02H
INT 21H
LOOP MW1I
LEA DX,CHARTIP
MOV AH,09H
INT 21H
XOR AX,AX
MOV AX,DIGITL
DEC AX
XOR BX,BX
MOV BX,10
XOR CL,CL
ML1I:
XOR DX,DX
DIV BX
ADD DX,30H
PUSH DX;压入栈中
INC CL;记录共有几个
CMP AX,0
JNE ML1I
MW1:
POP DX
MOV AH,02H
INT 21H
LOOP MW1
MOV DL,' '
MOV AH,02H
INT 21H
JMP EXIT
;错误提示
DONT:
MOV DX,OFFSET ERRORTIP
MOV AH,09H
INT 21H
MOV DL,0AH;回车
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
JMP FIRST
;退出
EXIT:
MOV DL,0AH;回车
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
JMP FIRST
;MOV AH,4CH
;INT 21H
CODES ENDS
END START