请编制程序,其功能是:将一个字符串中连续相同的字符仅用一个字符代替,生成一个新的字符串。字符串以00H结束,长度不超过20个字节。 例如: 原字符串为 41H,41H,41H,42H,31H,31H,00H('AAAB11')) l7 I# _: X$ h9 Z# L, l2 D5 F; s
新字符串为 41H,42H,31H,00H('AB1')5 J( p3 Y6 O! S* m( ]7 _6 i
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中(请自行在CX中设定输出长度)。
( X* ~; t% d5 q* p7 v8 R( s* V 请在BEGIN和END之间补充一段源程序,完成要求的功能。
X" J0 z: C; e2 z5 H 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
+ ]* a! R2 y3 `1 f% p( O 试题程序:& u! R0 b8 E4 u
EXTRN LOAD:FAR,SAVE:FAR
3 a$ l l" a# a. W LE EQU 20) Q$ B' m* R- P x: z6 v+ h" s \& b
DSEG SEGMENT
" o1 z% \ U9 I SOURCE DB LEN DUP(?)- J% H/ @/ ] ^- m+ ~6 p
RESULT DB LEN DUP(0)- j4 K0 U; C6 p: G, j0 |- r
NAME0 DB 'INPUT1.DAT',0
! U5 \+ ?# `, p3 M NAME1 DB 'OUTPUT1.DAT',0; I* }- {5 |# a' |" y5 e
DSEG ENDS5 }7 @/ V+ q4 I
SSEG SEGMENT STACK8 g* j) x2 `' x8 B7 V& u* u
DW 256 DUP(?)5 f! \' o/ h# h
SSEG ENDS5 M. f3 T1 X+ x1 M
CSEG SEGMENT
0 |: m y$ d& m: S" A* { ASSUME CS:CSEG,DS:DSEG,SS:SSEG
* g7 V5 |$ ~5 Q! b" Z START PROC FAR+ g' U- \+ v. u# r7 G0 l
PUSH DS
3 \& X; x! t& q XOR AX,AX
) S( B3 o: o- [* V PUSH AX
9 R' j$ r$ f' u+ M/ G MOV AX,DSEG
4 ^8 g$ K( F2 v N MOV DS,AX
3 G' l2 R) M( H( ]/ V' Q% c LEA DX,SOURCE ;数据区起始地址. T) F4 D( i. S1 t
LEA SI,NAME0 ;原始数据文件名) A5 k5 a- B4 H$ Q) D7 i
MOV CX,LEN ;字节数
# K5 \2 @' e0 R' C8 h CALL LOAD ;从'INPUT1.DAT'中读取数据! G' G+ N$ \! u/ d; `* k% y
;****BEGIN****
. \2 I4 S& e$ i* B$ e9 ~3 u2 } LEA SI,SOURCE
1 N; `$ P$ _7 J+ H" r9 \! b LEA DI,RESULT
# @! ~' r3 t" ]: p( ^ V MOV CX,20
0 n1 q- K; ~: u7 b% ~2 f1 b LOOP1: MOV AL,[SI]
3 f$ _4 @9 E8 N3 v6 V$ O CMP AL,00H* ?) n' ^% @2 a, v3 { f1 M* c
JE EXIT8 l5 B+ \; C4 o2 L* A- k4 r
NEXT: INC SI' a, U1 H0 d# \2 M% E& X8 K1 N
MOV AH,[SI] O1 V6 ?6 B: @; N- ]4 l5 C
CMP AL,AH
$ _% X- d) A$ J9 ^ JE NEXT5 d8 [( x0 b1 p# k7 }) ?$ e
MOV [DI],AL( O0 s& t0 l: q7 I# `7 ?9 a
INC DI
& i1 s" {7 ?- v" S JMP LOOP1$ H R+ D7 z/ H; r
EXIT: MOV [DI],AL
# c/ ~4 Q3 V' J- B ;****END****9 [3 l* m2 u9 i( Q. P
LEA DX,RESULT ;结果数据区首址
4 U- K4 y+ f( f' r0 m/ I LEA SI,NAME1 ;结果文件名$ N4 k7 u: p' @# J, W. v
CALL SAVE ;保存结果到文件+ q: C, Y1 g2 @, p; O$ \
RET
) a. `1 k, Y L- N: ]- |! q- Y u3 e4 g START ENDP' \, a7 ~4 U& Y/ |4 p- _
CSEG ENDS
0 i- f0 l# M8 M5 c END START |