请编制程序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:FARN EQU 100ESC_CODE EQU 27STAC SEGMENT STACKDB 128DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(0)RESULT DB N DUP(0)NAME0 DB 'INPUT1.DAT',0NAME1 DB 'OUTPUT1.DAT',0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AX ;置附加段寄存器LEA DX,SOURCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从'input1.DAT'中读取数据;* * * * BEGIN * * * *LEA SI,SOURCELEA DI,RESULTCLDLO: LODSBCMP AL,0JE QUITCMP AL,ESC_CODE_____ EXPAND_____ _____JMP LOEXPAND: _____ _____ ;解压XOR CX,CX_____ _____

请编制程序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

_____ _____


相关考题:

比较两个英文字符串的大小的方法是( )。A.从第一个字符比起,比其ASCII码值,第一个相同再比第二个,逐个向后比B.从最后一个字符比起,比其ASCII码值,逐个向前比C.从第一个字符比起,以ASCII码值的逆序,逐个向后比D.从最后一个字符比起,以ASCII码值的逆序,逐个向前比

以下关于ASCII码的叙述中,正确的是( )。A.ASCII码可以提供基础汉字的编码方案 B.ASCII编码规则为8个二进制位,共256个字符 C.ASCII码本质是一种BCD码 D.ASCII码不仅包含字母、数字、标点等可打印字符,也包括控制字符

下列关于ASCII编码的叙述中,正确的是______。A.一个字符的标准ASCII码占一个字节,其最高二进制位总为1B.所有大写英文字母的ASCII码值都小于小写英文字母“a”的ASCII码值C.所有大写英文字母的ASCII码值都大于小写英文字母“a”的ASCII码值D.标准ASCII码表有256个不同的字符编码

下列关于ASCII编码的叙述中,正确的是A.一个字符的标准ASCII码占一个字节,其最高二进制总为1B.所有大写英文字母的ASCII码值都大于小写英文字母‘a’的ASCII码值C.所有大写英文字母的ASCII码值都小于小写英文字母‘a’的ASCII码值D.标准ASCII码表有256个不同的字符编码

1、1.目前计算机中使用最广泛的西文字符编码集是ASCII码集,在ASCII码集中,可打印的字符有_________个。A.32B.256C.128D.96

1.目前计算机中使用最广泛的西文字符编码集是ASCII码集,在ASCII码集中,可打印的字符有_________个。A.32B.256C.128D.96

【单选题】比较两个英文字符串的大小的方法是()。A.从第一个字符比起,比其ASCII码值,第一个相同再比第二个,逐个向后比B.从最后一个字符比起,比其ASCII码值,逐个向前比C.从第一个字符比起,以ASCII码值的逆序,逐个向后比D.从最后一个字符比起,以ASCII码值的逆序,逐个向前比

5、字符'\0 '是字符串的结束标记,其ASCII码值为

字符'0 '是字符串的结束标记,其ASCII码值为

C语言字符串被编译程序自动加入结尾字符,它对应的ASCII字符是________。A.NUL(指第一个字符,ASCII码值是0)B.SP(指空格,ASCII码值是20H)C.'0'(指数码0,ASCII码值是30H)D.不属于ASCII表的任何字符