DATA SEGMENT
BUFFER DB 60,?,60 DUP(?) ;输入缓冲区
PRINT DB 'TO INPUT:','$' ;要输出提示信息
CRLF DB 0DH,0AH,'$'
COUNT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR ;该过程为远程型.可以在段内被调用,也可以在段间被调用
MOV AX,DATA
MOV DS,AX
MOV AH, 9 ;输出一串提示信息 “mov ah,9 ”是调用int 21h 的功能号
LEA DX, PRINT ;lea 传送有效地址指令,把原操作数的有效地址送给指定的寄存器
INT 21H
MOV AH, 0AH ;输入一串字符
LEA DX, BUFFER
INT 21H
MOV AH, 9 ;输出回车换行符,以使光标停在新行首
LEA DX, CRLF
INT 21H
MOV CL,BUFFER+1 ;取接收到的字符个数在cx中
XOR CH,CH
MOV COUNT,CL ;30行
LEA SI,BUFFER+2 ;将输入的第一个字符送给SI寄存器
LEA DI,BUFFER+2 ;将输入的第一个字符送给DI寄存器
LOOP1: INC SI ;35行
LOOP2: MOV AL,[SI]
MOV BL,[DI]
CMP AL,BL ;对比第一个字符和后面的字符是否相等
JZ ACT1 ;若相等,执行ACT1
JMP LOOP1 ;循环
ACT1: MOV AL,0 ;将和前面字符相等的字符置为0
MOV [SI],AL
JMP LOOP1
LOOP3: CMP DI,COUNT
JZ LOOP4
INC DI
JMP LOOP2
LOOP4: MOV AL,[SI]
CMP AL,0
JE NO_CO
MOV AH,2
MOV DI,[SI]
INT 21H
INC SI
JMP LOOP4
NO_CO: INC SI
JMP LOOP4
EXIT:
MOV AX, 4C00H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
不知道为什么输入字母之后按回车不显示输出。
初学者。。不是很会写。。顺便大神帮忙看看对不对。
目的是删除重复字母在输出。
谢谢!!!!!!