1、三级 PC 技术机试-205 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:内存中连续存放着 20 个无符号字节数,求它们的和。和值按字的形式存放,此前先按序存放参加运算的 20 个字节。例如;内存中有:01H,02H,03H 结果为:01H,02H,03H (参加运算的字节),后跟一个字(为前面各字节的和)部分程序已经给出,其中原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,运算结果要求从 RESULT 开始存放,由 SAVE 过程保存到 OUTPUT1.DAT 文件
2、中。请在 BEGIN 和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终产生运行结果。部分程序如下:;PROG1.ASMEXTRN LOAD:FAR,SAVE:FARN EQU 20DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP (
3、?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG;SS;SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,NMOV BX,0NEXT: MOV AL,SI_ _ MOV DI,_ LOOP NEXTMOV DI,_; * END *LEA DX,RESULTLEA SI,NAME1MOV CX,N+2CALL
4、 SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC 技术机试-205 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:内存中连续存放着 20 个无符号字节数,求它们的和。和值按字的形式存放,此前先按序存放参加运算的 20 个字节。例如;内存中有:01H,02H,03H 结果为:01H,02H,03H (参加运算的字节),后跟一个字(为前面各字节的和)部分程序已经给出,其中原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,
5、运算结果要求从 RESULT 开始存放,由 SAVE 过程保存到 OUTPUT1.DAT 文件中。请在 BEGIN 和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终产生运行结果。部分程序如下:;PROG1.ASMEXTRN LOAD:FAR,SAVE:FARN EQU 20DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPU
6、T1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG;SS;SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,NMOV BX,0NEXT: MOV AL,SI_ _ MOV DI,_ LOOP NEXTMOV DI,_;
7、 * END *LEA DX,RESULTLEA SI,NAME1MOV CX,N+2CALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(答案 本题答案为:; * BEGIN *LEA SI, SOURCELEA DI, RESULTMOV CX,NMOV BX, 0NEXT: MOV AL, SIADD BL, AL ; 将 SOURCE 原始数据区中相应的数累加。; BL 中ADC BH, 0 ; 将上一条加法指令中产生的进位加入至和; 值的高 8 位 BH 中MOV DI,AL ; 将 SOURCE 原始数据区中的数存入; RESULT 相应单元INC SIINC DILOOP NEXT ; (CX)-1, 若 (CX)0,则转移 NEXT; 执行MOV DI,BX ; 因最后依次循环中 DI 已加 1,故 BX 将紧; 跟在这 20 个数之后存入; * END * INPUT1.DAT 中的输入数据:FFH,8OH,7FH,FOH,14H,84H,25H,7EH,3CH,45H,FFH,80H,O1H,O2H,22H,FCH,E3H,A3H,12H,01H输出结果FF 80 7F F0 14 84 25 7E 3C 45 FF 80 01 02 22 FCE3 A3 12 01 E3 08)解析: