请高手看看我的这个程序!
;输入字符串和字符,统计字符在字符串中出现的次数
MAX_LENGTH=20
DSEG SEGMENT
BUFF DB MAX_LENGTH
DB ?
DB MAX_LENGTH DUP(?)
MESS0 DB 'input a string:$'
MESS1 DB 'input a char:$'
MESS2 DB 'total:$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA DX,MESS0
CALL DISPMESS
LEA DX,BUFF
MOV AH,0AH
INT 21H
CALL NEWLINE
LEA DX,MESS1
CALL DISPMESS
CALL NEWLINE
MOV AH,01H
INT 21H
LEA DX,MESS2 ;注意,第一行
CALL DISPMESS ;注意,第二行
CALL STAT
MOV DL,AH
CALL ECHOCH
MOV AH,4CH
INT 21H
;子程序名:STAT
;功能 :统计字符串中指定字符的个数
;入口参数:SI=字符串地址
; AL=欲统计的字符
;出口参数:AH=统计出的个数
STAT PROC
XOR CH,CH
MOV CL,BUFF+1
MOV AH,30H
MOV SI,OFFSET BUFF+1
AGAIN: INC SI
CMP [SI],AL
JNE NEXT
INC AH
NEXT: LOOP AGAIN
RET
STAT ENDP
;子程序名:NEWLINE
;功 能:形成回车和换行(光标移至下一行首)
;入口参数:无
;出口参数:无
NEWLINE PROC
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
;子程序名:DISPMESS
;功 能:显示由DX所指的信息
;入口参数:DX=待显示的信息
;出口参数:无
DISPMESS PROC
MOV AH,9
INT 21H
RET
DISPMESS ENDP
;子程序名:DISPAL
;功 能:用十进制数的形式显示8位二进制数
;入口参数:AL=8位二进制数
;出口参数:无
DISPAL PROC
MOV CX,3
MOV DL,10
DISP1: DIV DL
XCHG AH,AL
ADD AL,'0'
PUSH AX
XCHG AH,AL
MOV AH,0
LOOP DISP1
MOV CX,3
DISP2: POP DX
CALL ECHOCH
LOOP DISP2
RET
DISPAL ENDP
;子程序名:ECHOCH
;功 能:显示DL中的字符
;入口参数:DL=待显示的字符
;出口参数:无
ECHOCH PROC
MOV AH,2
INT 21H
RET
ECHOCH ENDP
CSEG ENDS
END START
上面有注释的两行,加上以后显示结果始终为0,去掉以后就能显示出正确结果。
我百思不得其解,望高手指教!