镁锭的价格:求教:汇编 字符长度计算

来源:百度文库 编辑:神马品牌网 时间:2024/05/02 02:31:58
问题描述:这是一个用来分类计算字符长度的汇编小程序,在每种字符长度小于10的时候,还能计算出来,但是若任一种字符长度大于10,就不知道该如何写下去了,希望哪位大哥大姐指点一下
DATAS SEGMENT
N EQU 80
BUF DB N+1
COUNT DB 0
CHAR DB N+1 DUP (0)
PROMPT1 DB 'Please input a string:',13,10,'$'
LSTRING DB 'LETTER: ','$'
LETTERS DB 0
DSTRING DB 'DIGIT: ','$'
DIGITS DB 0
OSTRING DB 'OTHER: ','$'
OTHERS DB 0
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,PROMPT1
MOV AH,9
INT 21H
LEA DX,BUF
MOV AH,10
INT 21H
MOV DL,13
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H

MOV CL, COUNT

MOV SI,OFFSET CHAR

NEXT:
MOV DL,[SI]
CMP DL,'0'
JB OTHER
CMP DL,'9'
JBE DIGIT
CMP DL,'A'
JB OTHER
CMP DL,'Z'
JBE LETTER
CMP DL,'a'
JB OTHER
CMP DL,'z'
JBE LETTER

INC OTHERS
JMP GO

DIGIT:INC DIGITS
JMP GO
LETTER:INC LETTERS
JMP GO
OTHER: INC OTHERS

GO: ADD SI,01H
LOOP NEXT

MOV DX,OFFSET LSTRING
MOV AH,9
INT 21H
MOV DL,LETTERS
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,13
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H

MOV DX,OFFSET DSTRING
MOV AH,9
INT 21H
MOV DL,DIGITS
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,13
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H

MOV DX,OFFSET OSTRING
MOV AH,9
INT 21H
MOV DL,OTHERS
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,13
MOV AH,2
INT 21H
MOV DL,10
MOV AH,2
INT 21H

MOV AH,4CH
INT 21H
CODES ENDS
END START

你就缺少一个二进制数值转ASC表示的过程嘛

在你输出的地方
从MOV DL,OTHERS
改成:
XOR AX,AX
XOR DX,DX
MOV BX,10
MOV AL,OTHERS
AGAIN:DIV BL
PUSH DX
XOR DX,DX
INC BH
CMP AL,0
JNE AGAIN
MOV AH,02
OUTAGAIN:POP DX
ADD DL,30H
INT 21H
MOV DL,13
INT 21H
MOV DL,10
INT 21H
DEC BH
CMP BH,0
JNE OUTAGAIN

另外你还的添家堆栈段。