請(qǐng)編制程序,其功能是:將一個(gè)字符串中連續(xù)相同的字符僅用一個(gè)字符代替,生成一個(gè)新的字符串。字符串以00H結(jié)束,長度不超過20個(gè)字節(jié)。
例如: 原字符串為 41H,41H,41H,42H,31H,31H,00H('AAAB11')
新字符串為 41H,42H,31H,00H('AB1')
部分程序已給出, 其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內(nèi)存單元中。運(yùn)算結(jié)果要求從RESULT開始存放,由過程SAVE保存到文件OUTPUT1.DAT中(請(qǐng)自行在CX中設(shè)定輸出長度)。
請(qǐng)?jiān)贐EGIN和END之間補(bǔ)充一段源程序,完成要求的功能。
對(duì)程序必須進(jìn)行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,最終運(yùn)行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中若發(fā)現(xiàn)整個(gè)程序中存在錯(cuò)誤之處, 請(qǐng)加以修改。
試題程序:
EXTRN LOAD:FAR,SAVE:FAR
LE EQU 20
DSEG SEGMENT
SOURCE DB LEN DUP(?)
RESULT DB LEN DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DW 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
LEA DX,SOURCE ;數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ;原始數(shù)據(jù)文件名
MOV CX,LEN ;字節(jié)數(shù)
CALL LOAD ;從'INPUT1.DAT'中讀取數(shù)據(jù)
;****BEGIN****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,20
LOOP1: MOV AL,[SI]
CMP AL,00H
JE EXIT
NEXT: INC SI
MOV AH,[SI]
CMP AL,AH
JE NEXT
MOV [DI],AL
INC DI
JMP LOOP1
EXIT: MOV [DI],AL
;****END****
LEA DX,RESULT ;結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ;結(jié)果文件名
CALL SAVE ;保存結(jié)果到文件
RET
START ENDP
CSEG ENDS
END START
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |