A-A+

请编制程序 其功能为:将一个字符串中连续相同的字符仅用一个字符代替 生成一个新的字符串。字符

2022-08-05 21:08:55 问答库 阅读 172 次

问题详情

请编制程序,其功能为:将一个字符串中连续相同的字符仅用一个字符代替,生成一个新的字符串。字符串以00H结束,长度不超过20个字节。
例如:
原字符串为:4EH,4EH,4EH,42H,1AH,31H,31H,00H:
新字符串为:4EH,42H,1AH,31H,00H
部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1. DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END 之间补充一段源程序,完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。
部分程序如下:
; PROG1. ASM
EXTRN LOAD:FAR,SAVE:FAR
LEN EQU 20
N EQU 10
DSEG SEGMENT
SOURCE DW N DUP ()
RESULT DW N DUP (0)
NAME0 DB "INPUT1. DAT", 0
NAME1 DB "OUTPUT1.DAT",0
DSEG ENDS
SSEG SEGMENT STACK
DB 256 DUP ()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG;SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV ES, AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
…………
…………
…………
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:; *** BEGIN ***LEA SISOURCELEA DIRESULTLOOP1: MOV AL[SI]CMP AL00HJE EXITNEXT: INC SIMOV AH[SI]CMP ALAHJE NEXTMOV [DI] ALINC DIJMP LOOP1EXIT: MOV [DI] AL; *** END ***[INPUT1. DAT 中的输入数据]:4EH4EH4EH42H 1AH31H31H00H23H25H[输出结果]4E 42 1A 31 00 00 00 00 00 00
; *** BEGIN ***LEA SI,SOURCELEA DI,RESULTLOOP1: MOV AL,[SI]CMP AL,00HJE EXITNEXT: INC SIMOV AH,[SI]CMP AL,AHJE NEXTMOV [DI] ,ALINC DIJMP LOOP1EXIT: MOV [DI], AL; *** END ***[INPUT1. DAT 中的输入数据]:4EH,4EH,4EH,42H, 1AH,31H,31H,00H,23H,25H[输出结果]4E 42 1A 31 00 00 00 00 00 00

考点:字符,字符串