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

1. 
请编制程序ex9.ASM,其功能是:从20个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填0。
   例如:
   内存中有80H,02H,00H,7CH,7BH,11H,……
   结果为80H,00H,FEH,00H,FDH,00H,85H,00H,……
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算的结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。补充BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
   对程序进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。
   [试题程序]
   EXTRN LOAD:FAR,SAVE:FAR
   N    EQU    20
   STAC    SEGMENT  STACK
   DB    256 DUP(?)
   STAC    ENDS
   DATA    SEGMENT
   SOURCE DB    N DUP(?)
   RESULT DB    N DUP(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
   MOV    ES,AX
   LEA DX,SOURCE    ;数据区起始地址
   LEA    SI,NAME0    ;原始数据文件名
   MOV    CX,N    ;字节数
   CALL LOAD    ;从'INPUT1.DAT'中读取数据
   ;  ****  BEGIN  ****
   LEA    SI,SOURCE
   LEA DI,RESULT
   MOV DX,0
   MOV    CX,N
   CLD
   CON:LODSH
     (1)  
   JGE      (2)  
   MOV    [DI],AL
   INC DI
     (3)  
   INC DI
   ADD DL,AL
     (4)  
   NEXT:LOOP    CON
   MOV    [DI],DX
   ADD DI,2
   MOV    CX,40
   SUB    CX,DI
   MOV    AL,0
     (5)  
   ;  ****END****
   LEA DX,RESULT    ;结果数据区首址
   LEA    SI,NAME1    ;结果文件名
   MOV    CX,N    ;结果字节数
   CALL    SAVE    ;保存结果到文件
   RET
   START  ENDP
   CODE    ENDS
   END    START

答题卡