全国计算机等级考试三级PC技术机试真题2011年3月
(总分100, 做题时间90分钟)
上机题

1. 
请编制程序ex12.ASM,其功能是:内存中连续存放着30个无符号字节数,求它们的和。和值形式按字存放,此前按顺序存放参加运算的30个字节。
   例如:
   内存中有01H,02H,03H,……
   结果为01H,02H,03H,……(30个参加运算的字节),后跟一个字(为前面各30个字节的和)。
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算的结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。补充BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
   对程序进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。
   [试题程序]
   EXTRN    LOAD:FAR,SAVE:FAR
   N    EQU    30
   STAC    SEGMENT  STACK
   DB    128 DUP(?)
   STAC    ENDS
   DATA    SEGMENT
   SOURCE    DB    N DUP(?)
   RESULT    DB    N+2DUP(0)
   NAME0    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    ;字节数
   CALL LOAD    ;从'INPUT1.DAT'中读取数据
   ;  ****  BEGIN  ****
   LEA    SI,SOURCE
   LEA DI,RESULT
   MOV    CX,N
   MOV    BX,0
   NEXT:    MOV    AL,[SI]
     (1)  
     (2)  
   MOV    [DI],  (3)  
     (4)  
     (5)  
   LOOP    NEXT
   MOV    [DI],  (6)  
   ;  ****END****
   LEA DX,RESULT    ;结果数据区首址
   LEA    SI,NAMEI    ;结果文件名
   MOV    CX,N+2    ;结果字节数
   CALL    SAVE    ;保存结果到文件
   RET
   START    ENDP
   CODE    ENDS
   END    START

答题卡