请编制程序PROG1.ASM,其功能是:内存中从SOURCE开始连续存放着20个字(WORD),试统计每个字中二进制位为1的个数。结果以字节存放。例如:内存中有139CH,518CH,1489H,…,结果为07H,08H,05H,…. 部分程序已给出

admin2009-02-15  29

问题 请编制程序PROG1.ASM,其功能是:内存中从SOURCE开始连续存放着20个字(WORD),试统计每个字中二进制位为1的个数。结果以字节存放。例如:内存中有139CH,518CH,1489H,…,结果为07H,08H,05H,….
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
   对程序必须进行汇编,并与IO.OBJ连接生成PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。
   注意:源程序非填空部分可能存在个别非法指令,考生阅读源程序或调试该程序时若发现这些非法指令,请加以修改!
               EXTRN         LOAD:FAR,SAVE:FAR
   N           EQU           20
   STAC        SEGMENT       STACK
               DB            128 DUP(?)
   STAC        ENDS
   DATA        SEGMENT
   SOURCE      DW            N DUP(?)
   RESULT      DB            NDUP(0)
   NAMEO       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           S1,NAMEO         ;原始数据文件名
               MOV           CX,N * 2         ;字节数
               CALL          LOAD              ;从INPUT1.DAT中读取数据
   ;  *  *  *  * BEGIN *  *  *  *
               LEA           SI,SOURCE
               LEA           DI,RESULT
               CLD
               MOV           DX,N
   LOOP0:     LODS          _____
               _______
               MOV           CX,16
   LOOP1:      ROL           AX,1
               J_____        NEXT
               INC           BX
   NEXT:      LOOP          _____
               MOV           [D1],BL
               ______
               DEC           DX
               JNZ           LOOP0
   ;  *  *  *  *  END  *  *  *  *
               LEA           DX,RESUIT       ;结果数据区首址
               LEA           SI,NAME1        ;结果文件名
               MOV           CX,N            ;结果字节数
               CALL          SAVE             ;保存结果到文件
               RET
   START       ENDP
   CODE        ENDS
               END           START

选项

答案; * * * * BECIN * * * * LEA SI,SOURCE LEA DI,RESULT CI,D MOV DX,N LOOP0:LODS SOURCE XOR BX,BX MOV CX,16 LOOP1:ROL AX,1 JNC NEXT INC BX NEXT: LOOP LOOP1 MOV [DI],BL INC DI DEC CX JNZ LOOP0 ; * * * * END * * * *

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

最新回复(0)