Killua_kitten 2015-10-31 03:48 采纳率: 100%
浏览 1524
已采纳

汇编问题!删除重复字母问题。没办法输出。求助!

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

不知道为什么输入字母之后按回车不显示输出。
初学者。。不是很会写。。顺便大神帮忙看看对不对。
目的是删除重复字母在输出。
谢谢!!!!!!

  • 写回答

2条回答 默认 最新

  • qq_32451563 2015-10-31 04:08
    关注
    JMP  LOOP4
    

    NO_CO: INC SI
    JMP LOOP4

    EXIT:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案