问题描述
- 汇编语言输出字符串乱码??
-
DATA SEGMENTBUFFER DB 40,?,40 DUP(?) ;输入缓冲区
PRINT DB 'TO INPUT:','$' ;要输出提示信息
CRLF DB 0DH,0AH,'$'
COUNT1 DB ? ;外层循环次数
COUNT2 DB ? ;内层循环次数
DATA ENDSCODE SEGMENT
ASSUME CS:CODE,DS:DATAMAIN PROC FAR ;该过程为远程型.可以在段内被调用,也可以在段间被调用
MOV AX,DATAMOV 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 COUNT1,CL MOV COUNT2,CL DEC COUNT1 DEC COUNT2 LEA SI,BUFFER+2 ;将输入的第一个字符送给SI寄存器 LEA DI,BUFFER+2 ;将输入的第一个字符送给DI寄存器
LOOP1: INC SI
MOV AL,[SI]MOV BL,[DI]
CMP AL,BL ;对比第一个字符和后面的字符是否相等
JZ ACT1 ;若相等,执行ACT1
JMP LOOP4 ;循环ACT1: MOV AL,0 ;将和前面字符相等的字符置为0
MOV [SI],AL
JMP LOOP4LOOP3: INC DI
MOV COUNT2,CL
DEC COUNT2
JMP LOOP1LOOP4: DEC COUNT2
JNZ LOOP1DEC COUNT1 JNZ LOOP3
LOOP7: MOV COUNT1,CL
LOOP5: MOV AL,[SI]
CMP AL,0
JE NO_CO
JMP LOOP6NO_CO: INC SI
JMP LOOP8LOOP6: MOV DL,[SI]
MOV AH,2
INT 21H
INC SI
JMP LOOP8LOOP8: DEC COUNT1
JNZ LOOP5EXIT: MOV AX, 4C00H
INT 21HMAIN ENDP
CODE ENDS
END MAIN