2012年计算机三级PC技术上机试题及答案(5)
01-05
0

请编制程序,其功能是:内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。

校验方法为:对字符#及字符*之间的7个ASCII字符进行异或操作,若异或操作结果的ASCCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符*之后的两个ASCII字符相同,则将原字符串原样保存;反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。

例如:

内存中有 33H,35H,23H('#',第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H,0DH,0AH,46H,23H('#',第二个字符串开始),46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,0DH,0AH,55H

结果为 23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H(校验正确,该字符串原样保持),0DH,0AH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符'!'代替)。

部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。

试题程序:

EXTRN LOAD:FAR,SAVE:FAR

N EQU 26

STAC SEGMENT STACK

DB 128 DUP(?)

STAC ENDS

DATA SEGMENT

SOURCE DB N+4 DUP(?)

RESULT DB N DUP(0)

HH DB 2 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

LEA DX,SOURCE ;数据区起始地址

LEA SI,NAME0 ;原始数据文件名

MOV CX,N+4 ;字节数

CALL LOAD ;从'INPUT1.DAT'中读取数据

;****BEGIN****

MOV SI,0

MOV DI,0

MOV BX,2 ;两个ASCII字符串

REPEAT: MOV AH,0

SEARCH: MOV AL,SOURCE[SI]

INC SI

CMP AL,'#'

________ SEARCH

MOV RESULT[DI],AL

INC DI

SEARCH1:MOV AL,SOURCE[SI]

INC SI

CMP AL,____________

JE ASCII

MOV RESULT[DI],AL

INC DI

XOR AH,AL

JMP _______________

ASCII: MOV RESULT[DI],AL

INC DI

PUSH DI

MOV DI,0

MOV DH,2

MOV DL,AH ;异或结果暂存在DL中

MOV CL,4 ;先将异或结果高4位转换成ASCII字符

SHR AH,CL ;本行开始的4行语句将一个十六进制数转换为ASCII码

CHANGE: CMP AH,10

JL ADD_0

ADD AH,'A'-'0'-10

ADD_0: ADD AH,'0'

MOV HH[DI],AH

INC DI

DEC DH

JZ EXT

MOV AH,DL ;再将异或结果低4位转换成ASCII字符

AND AH,0FH

JMP CHANGE

EXT: POP DI

MOV AL,SOURCE[SI]

MOV RESULT[DI],AL

INC SI

INC DI

MOV AH,SOURCE[SI]

MOV RESULT[DI],AH

INC SI

INC DI

MOV DL,HH

MOV DH,HH+1

CMP AX,DX

________ ERR

MOV AL,0DH ;校验正确

MOV RESULT[DI],AL

INC DI

MOV AL,0AH

MOV RESULT[DI],AL

INC DI

JMP LP

ERR: SUB DI,11 ;校验错误

MOV AL,'!'

MOV CX,____________

COVER: MOV RESULT[DI],AL

INC DI

LOOP COVER

LP: ________________________

JZ EXIT

JMP REPEAT

EXIT: NOP

;****END****

LEA DX,RESULT ;结果数据区首址

LEA SI,NAME1 ;结果文件名

MOV CX,N ;字节数

CALL SAVE ;保存结果到文件

RET

START ENDP

CODE ENDS

END START

相关内容

热门资讯

2014年计算机等级三级网络技... 2014年计算机等级三级网络技术章节重点难点知识辅导十二
2014年计算机等级三级网络技... 2014年计算机等级三级网络技术章节重点难点知识辅导十一
2012年计算机三级PC技术上... 2012年计算机三级PC技术上机试题及答案(4)
2014年上半年计算机等级数据... 2014年上半年计算机等级数据库考试基础知识辅导5
2014年上半年计算机等级数据... 2014年上半年计算机等级数据库考试基础知识辅导6
2014年计算机等级三级网络技... 2014年计算机等级三级网络技术章节重点难点知识辅导四
2014年计算机等级三级网络技... 2014年计算机等级三级网络技术章节重点难点知识辅导十三
2015年计算机三级考试软件测... 2015年计算机三级考试软件测试技术复习笔记:软件测试对象
2014年计算机等级嵌入式系统... 2014年计算机等级嵌入式系统开发技术知识复习笔记:CPU
2014年计算机等级嵌入式系统... 2014年计算机等级嵌入式系统开发技术知识复习笔记:数字文本