1、三级 PC 技术机试-214 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:内存中连续存放的 20 个 8 位有符号数(补码)是由一个 8 位 A/D 转换器采集的双极性信号(X n),现要求对该信号作如下限幅处理(处理后的信号记为 Yn):a) Yn=-100 Xn-100b) Yn=Xn X n100c) Yn=100 Xn100例如:Xn:68H,60H,8EH,38H,Yn:64H,61H,9CH,38H,部分程序已在 PROG1.ASM 中给出,请填空 BEGIN 和 END 之间已给出
2、的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除 BEGIN 和 END 之间原有的代码并自行编写程序片段来完成要求的功能。原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。试题程序:EXTRN LOAD:FAR, SAVE:FARN EQU 20M EQU 100DSEG SE
3、GMENTSOURCE DW N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUTI.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG, SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名起始地址MOV CX,N ; 字节数CAL
4、L LOAD ; 从 INPUT1.DAT 中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULT(1) NEXT: MOV AX,SICMP AX,-M(2) L1CMP AL,M(3) MOV AL,MJMP L2L1: MOV AL,-ML2: MOV DI,AL(4) (5) (6) ; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名起始地址MOV CX,N ; 字节数CALL SAVE ; 保存结果到 OUTPUT1.DAT 文件中RETSTART ENDPCSEG ENDSEND START(分数:
5、100.00)_三级 PC 技术机试-214 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:内存中连续存放的 20 个 8 位有符号数(补码)是由一个 8 位 A/D 转换器采集的双极性信号(X n),现要求对该信号作如下限幅处理(处理后的信号记为 Yn):a) Yn=-100 Xn-100b) Yn=Xn X n100c) Yn=100 Xn100例如:Xn:68H,60H,8EH,38H,Yn:64H,61H,9CH,38H,部分程序已在 PROG1.ASM 中给出,请填空 BEGIN 和 EN
6、D 之间已给出的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除 BEGIN 和 END 之间原有的代码并自行编写程序片段来完成要求的功能。原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。试题程序:EXTRN LOAD:FAR, SAVE:FARN EQU 20M EQU 100
7、DSEG SEGMENTSOURCE DW N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUTI.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG, SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名起始地址MOV CX,N ;
8、 字节数CALL LOAD ; 从 INPUT1.DAT 中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULT(1) NEXT: MOV AX,SICMP AX,-M(2) L1CMP AL,M(3) MOV AL,MJMP L2L1: MOV AL,-ML2: MOV DI,AL(4) (5) (6) ; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名起始地址MOV CX,N ; 字节数CALL SAVE ; 保存结果到 OUTPUT1.DAT 文件中RETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(1) MOV CX,20 (2) JL (3) JL L2(4) ADD SI,I (5) ADD DI,1 (6) LOOP NEXT)解析:解析 本题要求对 20 个数进行循环转换,但本题中没有设置计数器,所以应该在循环体前面的一个空白处设置计数器。程序中,比较指令后通常是转移指令,需要考虑一个比较操作后应做如何处理。在一个数据处理完毕并存入目的地址后,应准备处理下个数据,所以应修改源操作数地址和目的操作数地址,并回到循环体开始部分重新进行操作。