主题:关于从键盘输入一系列字符串的问题
有道题目:从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
以下为小弟的程序:
STACK SEGMENT
DB 200(?)
STACK ENDS
DATA SEGMENT
SUM DB ?
BUF DB "PLASE INPUT A CHARACTER STRING:$"
BUF1 DB 30
DB ?
DB 30 DUP(?)
BUF2 DB 0AH,0DH,"(SUM)="
BUF3 DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
BEGIN:MOV AX,DATA
MOV DS,AX
MOV AH,9
LEA DX,BUF
INT 21H
MOV AH,10
LEA DX,BUF1
INT 21H
XOR CL,CL
LEA SI,BUF1+2
COMP:MOV DL,[SI]
CMP DL,"$"
JZ DISPLAY
CMP DL,30H
JB CHAR
CMP DL,39H
JA CHAR
INC SI
JMP COMP
CHAR:INC SI
INC CL
JMP COMP
DISPLAY:MOV SUM,CL
LEA DI,BUF3
MOV SUM,AL
MOV CL,4
SHR AL,CL
OR AL,30H
MOV BUF3,AL
INC DI
AND AL,0FH
OR AL,30H
CMP AL,3AH
JB STORE
ADD AL,07H
STORE:AND AL,0FH
MOV BUF3,AL
INC DI
MOV BYTE PTR[DI],'H'
INC DI
MOV BYTE PTR[DI],'$'
MOV AH,9
LEA DX,BUF2+4
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
运行结果:
输入前为:PLASE INPUT A CHARACTER STRING:
键盘键入abcd$后按回车的结果为:UM)= HNPUT A CHARACTER STRING:abcd$
请问哪里错了,如何修改,谢谢
以下为小弟的程序:
STACK SEGMENT
DB 200(?)
STACK ENDS
DATA SEGMENT
SUM DB ?
BUF DB "PLASE INPUT A CHARACTER STRING:$"
BUF1 DB 30
DB ?
DB 30 DUP(?)
BUF2 DB 0AH,0DH,"(SUM)="
BUF3 DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
BEGIN:MOV AX,DATA
MOV DS,AX
MOV AH,9
LEA DX,BUF
INT 21H
MOV AH,10
LEA DX,BUF1
INT 21H
XOR CL,CL
LEA SI,BUF1+2
COMP:MOV DL,[SI]
CMP DL,"$"
JZ DISPLAY
CMP DL,30H
JB CHAR
CMP DL,39H
JA CHAR
INC SI
JMP COMP
CHAR:INC SI
INC CL
JMP COMP
DISPLAY:MOV SUM,CL
LEA DI,BUF3
MOV SUM,AL
MOV CL,4
SHR AL,CL
OR AL,30H
MOV BUF3,AL
INC DI
AND AL,0FH
OR AL,30H
CMP AL,3AH
JB STORE
ADD AL,07H
STORE:AND AL,0FH
MOV BUF3,AL
INC DI
MOV BYTE PTR[DI],'H'
INC DI
MOV BYTE PTR[DI],'$'
MOV AH,9
LEA DX,BUF2+4
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
运行结果:
输入前为:PLASE INPUT A CHARACTER STRING:
键盘键入abcd$后按回车的结果为:UM)= HNPUT A CHARACTER STRING:abcd$
请问哪里错了,如何修改,谢谢