1、PC技术机试模拟试卷 14及答案与解析 一、程序设计题 1 请编制程序 PROG1.ASM,其功能是:内存中连续存放着二个有符号字节序列Ak和 Bk,求序列 Ck(Ck=Ak+Bk)。例如: 源数 Ak: 0lH, 02H, 02H, 02H, 04H, 05H 源数 Bk: 01H, 02H, 02H, 02H, 04H, 05H 结果 Ck: 02H, 04H, 04H, 04H, 08H, 0AH 部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUTl DAT中读入SOURCE开始的内存元中,运算结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.D
2、AT中。 请在 BEGIN和 END之间补充一段源程序,完成要求的功能。 对程序必须进行汇编,并与 IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 PROG1.ASM文件内容如下: EXTRN LOAD: FAR, SAVE: FAR N EQU 10 ;每个序列的长度 STAC SEGMENT STACK DB 128 UP(?) STAC ENDS DATA SEGMENT SOURCE DB N * 2DUP(?) ;顺序存放 AO, ., A9 ,BO, ,B9 RESULT DW N DUP(0) ;顺序存放 CO,.,C9 NA
3、ME0 DB INPUT1. DAT,0 NAME1 DB OUTPUT1. DAT ,0 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STAC START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX LEA DX, SOURCE ;数据区起始地址 LEA SI, NAME0 ;原始数据文件名 MOV CX, N*2 ;字节数 CALL LOAD ;从 INPUT1.DAT文件中读取数据 ; * * * * BEGIN * * * * MOV DI,OFF
4、SET RESULT ;结果从 RESULT开始存放 MOV BX,0 MOV CX,N PRO: MOV AH ,0 MOV AL,_ ;序列 Bk中的一个字节 MOV DL, AL ; 暂存 Bk _ AL, SOURCE BX ; Ck = Bk + Ak JNO STAY ; 无溢出转 STAY JUMP1: MOV AH ,00 ; 有溢出 ADD DL,O JNS JUMP ; Bk是正数 (为一个正数加上 ; 一个正数,结果为负数的溢出 ; 情况 )转 JUMP(AH已为 OOH) MOV AH,_ ; Bk是负数 (为一个负数加上 ; 一个负数,结果为正数的溢出 ; 情况 )将
5、结果变为有符号字的 ; 形式 (为负 ) JMP _ STAY: _ ; AL中数的符号扩展到 AH, ; 符号字节变成无符 号字,有符 ; 号字节变成有符号字 JUMP: MOV DI, AX ADD DI,2 INC BX DEC CX JNZ PRO ;* * * * END * * * * LEA DX, RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N * 2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START PC技术机试模拟试卷 14答案与解析 一、程序设计题 1
6、 【正确答案】 ; * * * * BEGIN * * * * MOV DI, OFFSET RESULT ;结果从 RESULT开始存放 MOV BX, 0 MOV CX, N PRO: MOV AH, 0 MOV AL, sourcebx+n ;序列 Bk中的一个字节 MOV DL, AL ;暂存 BK ADD AL, SOURCEBX ; Ck=Bk+Ak JNO STAY ;无溢出转 STAY JUMP1: MOVAH, 00 ;有溢出 ADD DL, 0 JNS JUMP ; Bk是正数 (为一个正数加上一个正数,结果为负数的溢出情况 )转 JUMP(AH已为 OOH) MOV AH, 0FFH ;趾是负数 (为一个负数加上一个负数,结果为正数的溢出情况 )将结果变为 有符号字的形式 (为负 ) JMP JUMP STAY: CBW ; AL中数的符号扩展到 AH,无符号字节变成无符号字,有符号字节变成有符号字 JUMP: MOV DI, AX ADD DI, 2 1NC BX DEC CX JNZ PRO ; * * * * END * * * *