1、PC技术机试模拟试卷 17及答案与解析 一、程序设计题 1 请编制程序 PROG1.ASM,其功能是:对一个由可打印 ASCII字符 (ASCII码20H-7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现则该字符不变,如某字符连续出现 n次,则该字符用 ESC(1BH), n,原字符三个字节来代替 (假定 n不超过 255)。 设内存中从 SOURCE开始有一用上述方法压缩的字符串,其以 00H结束,解压后长度不超过 100。试编程对其解压缩,结果存入 RESULT开始的内存单元。 例如: 原串: 41H, 1BH, 06H, 43H, 61H, 00H 解压后
2、: 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链接产生 PRO
3、G1.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,
4、 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 _
5、_ JMP LO EXPAND: _ _ ;解压 XOR CX, CX _ _ _ _ _ _ _ _ JMP LO QUIT: STOSB ; STORE THE 00H ; * * * * END * * * * LEA DX, RESULT ;结果数据区首址 LEA SI, NAME1 ;结果文件名起始地址 MOV CX, N ;字节数 CALL SAVE ;保存结果到 OUTPUT1.DAT文件中 RET START ENDP CODE ENDS END START PC技术机试模拟试卷 17答案与解析 一、程序设计题 1 【正确答案】 ; * * * * BEGIN * * * *
6、LEA SI, SOURCE LEA DI, RESULT CLD LO: LODSB ;从源数据区取一个字节放入 AL CMP AL, 0 ;判断 AL中是否是可打印 ASCII字符 JE QUIT ;若不是,则退出 CMP AL, ESC_CODE 判断是否是 ESC JZ EXPAND ;若是,则进行解压 MOV DI, AL ;若不是,则保存,接着取下一个字节 INC DI JMP LO EXPAND: MOV AL, SI ;解压,取出该字符的个数,放入 CX中 XOR CX, CX MOV CL, AL INC SI AGAIN: MOV AL, SI MOV DI, AL INC
7、 DI LOOP AGAIN INC SI JMP LO QUIT: STOSB ; STORE THE 00H ; * * * * END * * * * 输入数据 41 1B 03 42 65 1B 19 42 43 1B 03 44 45 1B 23 48 49 4A 4C 1B 0C 47 1B 0E 4D 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00
8、00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 输出结果: 41 42 42 42 65 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 44 44 44 45 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 49 4A 4C 47 47 47 47 47 47 47 47 47 47 47 47 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 00
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1