字中找字游戏名字:求教:汇编 字符长度计算
来源:百度文库 编辑:中科新闻网 时间:2024/10/02 07:43:44
问题描述:这是一个用来分类计算字符长度的汇编小程序,在每种字符长度小于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
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
另外你还的添家堆栈段。