输入一个字符串,然后统计字符数和字母数字的个数,为什么统计不了??
LENGTH=128
;
DSEG    SEGMENT
BUFF    DB      LENGTH
        DB      ?
        DB      LENGTH  DUP(0)
MESS0   DB      'Please input a string:','$'
MESS1   DB      'Length = ','$'
MESS2   DB      'Digtal = ','$'
MESS3   DB      'ZIMU = ', '$'
DSEG    ENDS
;
CSEG    SEGMENT
        ASSUME  CS:CSEG,DS:DSEG
START:  MOV     AX,DSEG
        MOV     DS,AX
        MOV     DX, OFFSET MESS0
        CALL    DISPMESS
        MOV     AH,0AH
        INT     21H
        CALL    NEWLINE
        MOV     BH,0
        MOV     BL,0
        MOV     CL,BUFF+1
        MOV     CH,0
        JCXZ    COK
        MOV     SI,OFFSET       BUFF+2
AGAIN:  MOV     AL,[SI]
        INC     SI
        CMP     AL,'0'
        JB      NEXT
        CMP     AL,'9'
        JA      NODEC
        INC     BH
;       JMP     NEAR    NEXT
NODEC:  OR      AL,20H
        CMP     AL,'a'
        JB      NEXT
        CMP     AL,'z'
        JA      NEXT
        INC     BL
NEXT:   LOOP    AGAIN
;
COK:    MOV     DX,OFFSET MESS1
        CALL    DISPMESS
        MOV     AL,BUFF+1
        XOR     AH,AH
        CALL    DISPAL
        CALL    NEWLINE
        ;
        LEA     DX,MESS2;
        CALL    DISPMESS
        MOV     AL,BH
        XOR     AH,AH
        CALL    DISPAL
        CALL    NEWLINE
        ;
        LEA     DX,MESS3;
        CALL    DISPMESS
        MOV     AL,BL
        XOR     AH,AH
        CALL    DISPAL
        CALL    NEWLINE
        ;
        MOV     AX,4C00H
        INT     21H
        ;
DISPAL  PROC
        MOV     CX,3
        MOV     DL,10
DISP1:  DIV     DL
        XCHG    AH,AL
        ADD     AL,'0'
        PUSH    AX
        XCHG    AH,AL
        XOR     AH,AH
        LOOP    DISP1
        MOV     CX,3
DISP2:  POP     DX
        CALL    ECHOCH
        LOOP    DISP2
        RET
DISPAL   ENDP
;
DISPMESS        PROC
        MOV     AH,9
        INT     21H
        RET
DISPMESS        ENDP
;
ECHOCH  PROC
        MOV     AH,2
        INT     21H
        RET
ECHOCH  ENDP
;
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
CSEG    ENDS
        END     START