1、三级 PC技术机试-16 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:内存中连续存放着二个有符号字节序列 Ak和 Bk,求序列Ck(Ck=Ak+Bk)。例如:源数 Ak:01H,02H,02H,02H,04H,05H源数 Bk:01H,02H,02H,02H,04H,05H结果 Ck:02H,04H,04H,04H,08H,0AH部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUTlDAT 中读入 SOURCE开始的内存元中,运算结果要求从 RESULT开始存放,由过程 SAVE保存
2、到文件 OUTPUT1.DAT中。请在 BEGIN和 END之间补充一段源程序,完成要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。PROG1.ASM文件内容如下:EXTRN LOAD: FAR, SAVE: FARN EQU 10 ;每个序列的长度STAC SEGMENT STACKDB 128 UP(?)STAC ENDSDATA SEGMENTSOURCE DB N * 2DUP(?) ;顺序存放 AO, ., A9 ,BO, ,B9RESULT DW N DUP(0) ;顺序存放 CO,.,C9N
3、AME0 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*2 ;字节数CALL LOAD ;从 INPUT1.DAT文件中读取数据; * * * * BEGIN * * * *MOV DI,OFFSET RESULT ;结果从
4、 RESULT开始存放MOV BX,0MOV CX,NPRO: MOV AH ,0MOV AL,_ ;序列 Bk中的一个字节MOV DL, AL ; 暂存 Bk_ AL, SOURCE BX ; Ck = Bk + AkJNO STAY ; 无溢出转 STAYJUMP1: MOV AH ,00 ; 有溢出ADD DL,OJNS JUMP ; Bk是正数(为一个正数加上; 一个正数,结果为负数的溢出; 情况)转 JUMP(AH已为 OOH)MOV AH,_ ; Bk是负数(为一个负数加上; 一个负数,结果为正数的溢出; 情况)将结果变为有符号字的; 形式(为负)JMP _STAY: _ ; AL
5、中数的符号扩展到 AH,; 符号字节变成无符号字,有符; 号字节变成有符号字JUMP: MOV DI, AXADD DI,2INC BXDEC CXJNZ PRO;* * * * END * * * *LEA DX, RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名MOV CX,N * 2 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC技术机试-16 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG
6、1.ASM,其功能是:内存中连续存放着二个有符号字节序列 Ak和 Bk,求序列Ck(Ck=Ak+Bk)。例如:源数 Ak:01H,02H,02H,02H,04H,05H源数 Bk:01H,02H,02H,02H,04H,05H结果 Ck:02H,04H,04H,04H,08H,0AH部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUTlDAT 中读入 SOURCE开始的内存元中,运算结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。请在 BEGIN和 END之间补充一段源程序,完成要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生执行文
7、件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。PROG1.ASM文件内容如下:EXTRN LOAD: FAR, SAVE: FARN EQU 10 ;每个序列的长度STAC SEGMENT STACKDB 128 UP(?)STAC ENDSDATA SEGMENTSOURCE DB N * 2DUP(?) ;顺序存放 AO, ., A9 ,BO, ,B9RESULT DW N DUP(0) ;顺序存放 CO,.,C9NAME0 DB INPUT1. DAT,0NAME1 DB OUTPUT1. DAT ,0DATA ENDSCODE SEGMENTASSUME C
8、S: CODE, DS: DATA, SS: STACSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXLEA DX, SOURCE ;数据区起始地址LEA SI, NAME0 ;原始数据文件名MOV CX, N*2 ;字节数CALL LOAD ;从 INPUT1.DAT文件中读取数据; * * * * BEGIN * * * *MOV DI,OFFSET RESULT ;结果从 RESULT开始存放MOV BX,0MOV CX,NPRO: MOV AH ,0MOV AL,_ ;序列 Bk中的一个字节MOV DL, AL ;
9、 暂存 Bk_ AL, SOURCE BX ; Ck = Bk + AkJNO STAY ; 无溢出转 STAYJUMP1: MOV AH ,00 ; 有溢出ADD DL,OJNS JUMP ; Bk是正数(为一个正数加上; 一个正数,结果为负数的溢出; 情况)转 JUMP(AH已为 OOH)MOV AH,_ ; Bk是负数(为一个负数加上; 一个负数,结果为正数的溢出; 情况)将结果变为有符号字的; 形式(为负)JMP _STAY: _ ; AL中数的符号扩展到 AH,; 符号字节变成无符号字,有符; 号字节变成有符号字JUMP: MOV DI, AXADD DI,2INC BXDEC CX
10、JNZ PRO;* * * * END * * * *LEA DX, RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名MOV CX,N * 2 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(;* * * * BEGIN * * * *MOV DI,OFFSET RESULT ;结果从 RESULT开始存放MOV BX,0MOV CX,NPRO:MOV AH,0MOV AL,sourcebx+n ;序列 Bk中的一个字节MOV DL,AL ;暂存 BKADD AL,SO
11、URCEBX ;Ck=Bk+AkJNO STAY ;无溢出转 STAYJUMP1:MOVAH,00 ;有溢出ADD DL,0JNS JUMP ;Bk 是正数(为一个正数加上一个正数,结果为负数的溢出情况)转 JUMP(AH已为 OOH)MOV AH,0FFH ;Bk 是负数(为一个负数加上一个负数,结果为正数的溢出情况)将结果变为有符号字的形式(为负)JMP JUMPSTAY: CBW ;AL 中数的符号扩展到 AH,无符号字节变成无符号字,有符号字节变成有符号字JUMP: MOV DI,AXADD DI,21NC BXDEC CXJNZ PRO; * * * * END * * * *)解析: