1、三级 PC 技术机试-228 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:内存中从 SOURCE 开始连续存放着 20 个字(WORD),试统计每个字中二进制位为 1 的个数。结果以字节存放。例如:内存中有 139CH,518CH,1489H,结果为07H,08H,05H,部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中。运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。填空 BEG
2、IN 和 END 之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接生成 PROG1.EXE 执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。注意:源程序非填空部分可能存在个别非法指令,考生阅读源程序或调试该程序时若发现这些非法指令,请加以修改!EXTRN LOAD:FAR,SAVE:FARN EQU 20STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGMEN
3、TSOURCE DW N DUP(?)RESULT DB NDUP(0)NAMEO 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 S1,NAMEO ;原始数据文件名MOV CX,N * 2 ;字节数CALL LOAD ;从 INPUT1.DAT 中读取数据; * * * * BEGIN * * * *L
4、EA SI,SOURCELEA DI,RESULTCLDMOV DX,NLOOP0: LODS _MOV CX,16LOOP1: ROL AX,1J_ NEXTINC BXNEXT: LOOP _MOV DI,BL_DEC DXJNZ LOOP0; * * * * END * * * *LEA DX,RESUIT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,N ;结果字节数CALL SAVE ;保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC 技术机试-228 答案解析(总分:100.00,做题时间:90 分
5、钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:内存中从 SOURCE 开始连续存放着 20 个字(WORD),试统计每个字中二进制位为 1 的个数。结果以字节存放。例如:内存中有 139CH,518CH,1489H,结果为07H,08H,05H,部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中。运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。填空 BEGIN 和 END 之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需
6、一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接生成 PROG1.EXE 执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。注意:源程序非填空部分可能存在个别非法指令,考生阅读源程序或调试该程序时若发现这些非法指令,请加以修改!EXTRN LOAD:FAR,SAVE:FARN EQU 20STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DB NDUP(0)NAME
7、O 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 S1,NAMEO ;原始数据文件名MOV CX,N * 2 ;字节数CALL LOAD ;从 INPUT1.DAT 中读取数据; * * * * BEGIN * * * *LEA SI,SOURCELEA DI,RESULTCLDMOV DX,NLOOP
8、0: LODS _MOV CX,16LOOP1: ROL AX,1J_ NEXTINC BXNEXT: LOOP _MOV DI,BL_DEC DXJNZ LOOP0; * * * * END * * * *LEA DX,RESUIT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,N ;结果字节数CALL SAVE ;保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(; * * * * BECIN * * * *LEA SI,SOURCELEA DI,RESULTCLDMOV DX,NLOOP0:LODS SOURCEXOR BX,BXMOV CX,16LOOP1:ROL AX,1JNC NEXTINC BXNEXT: LOOP LOOP1MOV DI,BLINC DIDEC CXJNZ LOOP0; * * * * END * * * *)解析: