请编制程序,其功能为:从SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT 指示的,其后存放原N个数逻辑取反后的值。 例如: 数据为:09H,7EH,89H,F6H,17H……67H(N个数据) 结

admin2009-02-15  26

问题 请编制程序,其功能为:从SOURCE开始的内存区域存放着N个字节的有符号数。现找出最大的数,结果存放到RESULT 指示的,其后存放原N个数逻辑取反后的值。
   例如:
   数据为:09H,7EH,89H,F6H,17H……67H(N个数据)
   结果为:7EH (最大数),F6H,81H,76H,0CH,E8H……98H(原N个数的逻辑反)
   部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT 中读入从SOURCE开始的内存单元,运算结果要求从RESIULT开始存放,由SAVE 过程保存到OUTPUT1.DAT 文件中。请在BEGIN和END 之间补充使其完整,完成要求的功能。或删除BEGIN和END 之间原有的代码井自行编程来完成要求的功能。
   对程序必须进行汇编,并与IO. OBJ 链接产生PROG1. EXE 执行文件,最终产生运行结果。
   部分程序如下;
   ;PROG1. ASM
       EXTRN  LOAD: FAR,SAVE:FAR
   N  EQU   30
   DSEG  SEGMENT
   SOURCE  DW  N DUP (?)
   RESULT  DW  N DUP (0)
   NAME0  DB  ’INPUT1.DAT,0
   NAME1  DB   ’OUTPUT1.DAT’,0
   DSEG ENDS
   SSEG SEGMENT STACK
       DB 128 DHP (?)
   SSEG ENDS
   CSEG SEGMENT
     ASSUME CS:CSEG,DS:DSEG;SS:SSEG
   START  PROC  FAR
           PUSH  DS
           XOR   AX,AX
           PUSH  AX
           MOV  AX, DSEG
           MOV  DS,AX
           MOV  ES,  AX
           LEA   DX,SOURCE
           LEA   SI,NAME0
           MOV  CX,N
           CALL  LOAD
      ; *** BEGIN ***
            ______ SI,SOURCE
            MOV  BX,OFFSET SOURCE
            LEA  DI,RESULT
   L1:          MOV  CX,N
            MOV  DX,CX
            DEC  DX
            MOV  AL,______
   L2:          INC  BX
            ______ AL,[BX]
            ______________
            MOV AL,[BX]
   L3:         DEC  DX
            JNZ______
            MOV  [DI],AL
            INC  DI
            CLD
   MAX:     LODSB
            NOT  AL
            ______________
            LOOP  MAX
      ; *** END ***
            LEA  DX,RESULT
            LEA  SI,NAME1
            MOV  CX,N
            CALL  SAVE
            RET
   START    ENDP
   CSEG     ENDS
            END START

选项

答案; *** BEGIN *** LEA SI, SOURCE MOV BX,OFFSET SOURCE LEA DI, RESULT L1: MOV CX,N MOV DX, CX DEC DX ; 第一个数已经取出,故还剩N-1个数需做比较 MOV AL, [BX] ; 将 SOURCE 中的第一个数传至AL中 L2: INC BX CMP AL, [BX] ; 当前最大值与 BX 所指 SOURCE 数据区中的数 JGE L3 ; 若大于或等于,则转移至 L3 MOV AL, [BX] ; 否则,用BX 所指向的数改写 AL寄存器的内容 L3: DEC DX JNZ L2 ; 若不等于0,转移至L2 MOV [DI] ,AL INC DI CLD MAX: LODSB NOT AL STOSB LOOP MAX ; *** END *** [INPUT1. DAT 中的输入数据]: 50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H 09H,7EH,89H,F6H, 17H,43H,34H,12H,67H,35H 3DH,2EH,fAH,44H, 12H,23H, 17H,46H,36H,47H [输出结果] 7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8 BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9

解析
转载请注明原文地址:https://kaotiyun.com/show/kfrZ777K
0

最新回复(0)