请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序将N0至N9存入内存中,最后再用一个字节表示这10个数中为0的位的总数n(n=N0+

admin2010-09-01  31

问题 请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序将N0至N9存入内存中,最后再用一个字节表示这10个数中为0的位的总数n(n=N0+N1+…+N9)。
   例如:
   内存中有:0000H,000FH,FFFFH…
   结果为:  10H,0CH,00H…最后为n
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。
   请填空BEGIN和END之间已给出的源程序使其完整,空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   【试题程序】
        EXTRN   LOAD:FAR,SAVE:FAR
N        EQU     10
STAC     SEGMENT STACK
        DB      128 DUP (?)
STAC     ENDS
DATA     SEGMENT
SOURCE   DW      N DUP(?)
RESULT   DB      N+1 DUP(0)
NAME0    DB      ’INPUT.DAT’,0
NAME1    DB      ’OUTPUT.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*2                      ; 字节数
        CALL    LOAD                        ; 从’INPUT.DAT’中读取数据
;  ******** BEGIN ********
        MOV     DI,OFFSET RESULT
        MOV     CL,N
        MOV     BX,0
        MOV     DR,0
PRO:     MOV     DL,0
        MOV     AX, SOURCE[BX]
        MOV     CH,  (1)  
COUNT:    (2)  
(3)    JUMP
INC      DL
JUMP:    DEC     CH
        JNZ      (4)  
        MOV     [DI], DL
        ADD     DH,DL
        INC     DI
        ADD      (5)  
        DEC     CL
        JNZ     PRO
        MOV      (6)  
; ******** END ********
        LEA     DX,RESULT                   ; 结果数据区首址
        LEA     SI,NAME1                    ; 结果文件名
        MOV     CX,N+1                      ; 结果字节数
        CALL    SAVE                        ; 保存结果到文件

        RET
START    ENDP
CODE     ENDS
        END     START

选项

答案(1) 16 (2) SHL AX,1 (3) JB(4) COUNT (5) BX,2 (6) [DI],DH

解析 本题所采用的算法是逐个读取原始数据区中的数据并统计其中0的个数,将得到的统计数据存入结果数据区,同时将这个统计数据累加起来,当完成最后一个数据的统计时,也就得到所有数据中。的个数。针对此算法所应用的技巧,即对单个数据的统计采用将数据逻辑左移一位,然后最高位被移到CF,再根据CF的状态决定是否需要将计数器加1,直到处理完最后一个二进制位为止。
转载请注明原文地址:https://kaotiyun.com/show/cTgZ777K
0

最新回复(0)