1、三级 PC 技术机试-187 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着两个无符号字节数序列 Ak 和 Bk (k=0,1,9),求序列Ck,CkAkBk (运算结果按序以字的形式连续存放,其中低字节为商,高字节为余数)。例如:序列 Ak 为:01H,7FH, 80H,FFH序列 Bk 为:PFH,80H,7FH,01H结果 Ck 为:0100H(00H 为商、01H 为余数),7F00H,0101H,00FFH部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT.DAT 中读入 SO
2、URCE 开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT.DAT 中。请填空 BEGIN 和 END 之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除 BEGm 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序EXTRN LOAD:FAR,SAVE:FARN EQU 10STAC SEGMENT STACKDB 128 DUP(?)STA
3、C ENDSDATA SEGMENTSOURCE DB N*2 DUP(?)RESULT DW N DUP(0)NAME0 DB INPUTDAT,0NAME1 DB OUTPUTDAT,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 ;从 INPUTDAT 中读取数据; * BEGIN
4、*MOV DI,OFFSET RESULTMOV BX,0(1) PRO: MOV (2) (3) ,SOURCEBXCBW DIV (4) MOV DI, (5) ADD DI,2(6) DEC CX(7) PRO; * END *LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,2*N ;结果字节数CALL SAVE ;保存结果到文件RET START ENDPCODE ENDSEND START(分数:100.00)_三级 PC 技术机试-187 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)
5、1.请编制程序,其功能是:内存中连续存放着两个无符号字节数序列 Ak 和 Bk (k=0,1,9),求序列Ck,CkAkBk (运算结果按序以字的形式连续存放,其中低字节为商,高字节为余数)。例如:序列 Ak 为:01H,7FH, 80H,FFH序列 Bk 为:PFH,80H,7FH,01H结果 Ck 为:0100H(00H 为商、01H 为余数),7F00H,0101H,00FFH部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT.DAT 中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT.DAT 中。请填
6、空 BEGIN 和 END 之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除 BEGm 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序EXTRN LOAD:FAR,SAVE:FARN EQU 10STAC SEGMENT STACKDB 128 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N*2 DUP(?)RESULT DW N DUP(0)NAME0 DB
7、 INPUTDAT,0NAME1 DB OUTPUTDAT,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 ;从 INPUTDAT 中读取数据; * BEGIN *MOV DI,OFFSET RESULTMOV BX,0(1) PRO: MOV (2) (3) ,SOURCEBXCBW D
8、IV (4) MOV DI, (5) ADD DI,2(6) DEC CX(7) PRO; * END *LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,2*N ;结果字节数CALL SAVE ;保存结果到文件RET START ENDPCODE ENDSEND START(分数:100.00)_正确答案:(1)MOV CX,N (2)DL,SOURCEBX+N (3)MOV AL(4)DL (5)AX (6)INC BX (7)JNZ)解析:解析本题是一道序列计算题,其中关键问题在于找出序列的范围,确定序列中的数据类型,最后选择计算方法。其中序列范围在题目中已明确给出,每个序列的长度是 10 个字节数,两个序列连续存放,总共 20 个字节数,占 20 个存储单元。题目中明确指出序列 A 和序列 B 均为无符号字节数,运算结果按序以字的形式连续存放,所以在计算运算结果的偏移位置时要特别注意。题目要求的是两个序列相除,然后将运算结果存为字数据,低字节为商,高字节为余数。