试题要求如下: 请编制程序,其功能是:从20个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填0。 例如: 内存中有:80H,02H,00H,7CH,7BH,81H…… 结果为: 80H

admin2009-02-15  29

问题 试题要求如下:
   请编制程序,其功能是:从20个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填0。
    例如:
   内存中有:80H,02H,00H,7CH,7BH,81H……
   结果为:  80H,FEH,FDH,05H,00H,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.DAW’中读取数据
   **** BEGIN ****
             LEA         SI, SOURCE
             LEA         DI, RESULT
             MOV         DX, 0
             MOV         CX, N
             CLD
   CON:      LODSB
               (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,  (5)  
               (6)  
   ; ****  END  ****
             LEA         DX, RESULT         ; 结果数据区首址
             LEA         SI, NAME1          ; 结果文件名
             MOV         CX, N              ; 结果字节数
             CALL        SAVE               ; 保存结果到文件
             RET
   START     ENDP
   CODE      ENDS
             END         START

选项

答案(1)CMP AL, 0 ; 比较,看AL中的内容是否为负数 (2) NEXT (3) NEG AL ; 对负数求补 (4) ADC DH,0 ; 判断是否有进位 (5) 0 (6) REP STOSB

解析 本程序的功能是从所给的数据中取出负数并计算绝对值之和。CON所完成的是判断数据,如果是负数则取反加1,即变为它的绝对值再求和。否则转到NEXT中,继续循环判断数据,直到所有数据判断完。NEXT中完成的是多余的空间存入0。汇编语言中存入串指令用STOS,当有重复存入时加前缀REP,执行的足把AL或AX的内容存入一个长度为(CX)的缓冲区中。
转载请注明原文地址:https://jikaoti.com/ti/9WV7FFFM
0

随机试题
最新回复(0)