1、全国计算机等级考试三级 PC 技术机试真题 2009 年 3 月及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 ex8.ASM,其功能是:内存中连续存放的 20 个 8 位无符号数是一个自动抄表示抄录的 20 个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X 表示用水量;Y 表示水费,单位为分):a)Y=XX 70 X=10b)Y=1070+(X-10)120 X10例如:用水量(X):04H,0FH,18H水费(Y):0118H,0514H,094CH试计算出这 20 个用户应缴纳的水费,结果用字(word)
2、表示。部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。填空 BEGIN 和 END 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.ON 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。试题程序 EXTRN LOAD:FAR,S
3、AVE:FARN EQU 20RATE1 EQU 70RATE2 EQU 120DELTA EQU 10STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGNENTSOURCE DB N DUP(?)RESULT DW 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,AXLEA DX,SO
4、URCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名起始地址MOV CX,N ;字节数CALL LOAD ;从INPUT.DAT中读取数据; * BEGIN *LEA SI, SOURCELEA DI, RESULTCLDMOV CX,NMOV BL,RATE1MOV BH,RATE2NEXT: (1) CMP AL,DELTAJ (2) GREATMUL BLJMP STOREGREAT: (3) MUL BH(4) STORE: (5) (6) INC SILOOP NEXT; * END *LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名
5、起始地址MOV CX,N*2 ;字节数CALL SAVE ;保存结果到OUTPUT.DAT文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_全国计算机等级考试三级 PC 技术机试真题 2009 年 3 月答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 ex8.ASM,其功能是:内存中连续存放的 20 个 8 位无符号数是一个自动抄表示抄录的 20 个用户某月的用水量(立方米),为了控制用水量,水费计算公式如下(X 表示用水量;Y 表示水费,单位为分):a)Y=XX 70 X=10b)Y=10
6、70+(X-10)120 X10例如:用水量(X):04H,0FH,18H水费(Y):0118H,0514H,094CH试计算出这 20 个用户应缴纳的水费,结果用字(word)表示。部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。填空 BEGIN 和 END 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要
7、求的功能。对程序必须进行汇编,并与 IO.ON 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。试题程序 EXTRN LOAD:FAR,SAVE:FARN EQU 20RATE1 EQU 70RATE2 EQU 120DELTA EQU 10STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGNENTSOURCE DB N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DATA ENDSCODE SEGMENTASSUME
8、CS:CODE,DS:DATA,SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名起始地址MOV CX,N ;字节数CALL LOAD ;从INPUT.DAT中读取数据; * BEGIN *LEA SI, SOURCELEA DI, RESULTCLDMOV CX,NMOV BL,RATE1MOV BH,RATE2NEXT: (1) CMP AL,DELTAJ (2) GREATMUL BLJMP STOREGREAT: (3) M
9、UL BH(4) STORE: (5) (6) INC SILOOP NEXT; * END *LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名起始地址MOV CX,N*2 ;字节数CALL SAVE ;保存结果到OUTPUT.DAT文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(EXTRN LOAD:FAR,SAVE:FARN EQU 20RATE1 EQU 70RATE2 EQU 120DELTA EQU 10STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SE
10、GMENTSOURCE DB N DUE(?)RESULT DW 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,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名起始地址MOV CX,N ;字节数CALL LOAD ;从INPUT.DAT中读取数据; * BEGIN *LEA SI, SO
11、URCELEA DI, RESULTCLDMOV CX,NMOV BL,RATE1MOV BH,RATE2NEXT: MOV AL,SICMP AL,DELTAJA GREATMUL BLJMP STOREGREAT: SUB AL,10MUL BHADD AX,10*70STORE: MOV DI,AXADD DI,2INC SILOOP NEXT; * END *LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名起始地址MOV CX,N*2 ;字节数CALL SAVE ;保存结果到OUTPUT.DAT文件RETSTART ENDPCODE ENDSEND START)解析:解析 本题主要考查分段计算问题。考生需要注意题目中已明确给出 20 个无符号字节数,共占20 个存储单元。这样数据的类型也一同确定了,需要计算的原始数据为无符号字节数,运算结果按序以字的形式连续存放,因此在计算运算结果的偏移位置时要特别小心。本题难点在于确定数据范围、数据类型以及计算方法。