请编制程序PROG1.ASM,其功能是:对一个由可打印ASCII字符(ASCII码20H-7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现则该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,〈原字符〉三个字节来代替(假定n不超过255)。 设内存中从SOURCE开始有一用上述方法压缩的字符串,其以00H结束,解压后长度不超过 100。试编程对其解压缩,结果存入RESULT开始的内存单元。 例如: :41H,1BH,06H,43H,61H,00H 解压后:41H,43H,43H,43H,43H,43H,43H,61H,00H('ACCCCCCa') 部分程序已在PROG1.ASM中给出,请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除BEGIN和 END之间原有的代码并自行编写程序片段来完成要求的功能。 原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 对程序必须进行汇编,并与IO.OBI链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。 PROG1.ASM文件内容如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 100 ESC_CODE EQU 27 STAC SEGMENT STACK DB 128DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(0) RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;置附加段寄存器 LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'input1.DAT'中读取数据 ;* * * * BEGIN * * * * LEA SI,SOURCE LEA DI,RESULT CLD LO: LODSB CMP AL,0 JE QUIT CMP AL,ESC_CODE _____ EXPAND _____ _____ JMP LO EXPAND: _____ _____ ;解压 XOR CX,CX _____ _____