万能百科  > 所属分类  > 

请编制程序PROG1.ASM,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,

请编制程序PROG1.ASM,其功能是:内存中连续存放着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从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。

填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。

PROG1.ASM文件内容如下:

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 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 SI,NAME0 ;原始数据文件名

MOV CX,N*2 ;字节数

CALL LOAD ;从'INPUT1.DAT'中读取数据

;* * * * BECIN * * * *

MOV DI,OFFSET RESULT

MOV CL,N

MOV BX,0

MOV DH,0

PRO: MOV DL,0

MOV AX,SOURCE[BX]

MOV CH,______

COUNT: _____ _____

_____ JUMP

INC DL

JUMP: DEC CH

JNZ _____

MOV [DI],DL

ADD DH,DL

INC DI

ADD _____

DEC CL

JNZ PRO

&nbs

正确答案:

;****BEGIN**** MOV DIOFFSET RESULT ;目的存储区首址→DI MOV CLN ;设置外层循环次数为N(即10次) MOV BX0 ;源数据区起始地址 MOV DH0 ;DH用于累计0个数的总个数 PRO:MOV DL0 ;DL用于累计每行0个数 MOV AXSOURCE[BX] MOV Ch10H ;设置左移次数16次 COUNT:SHL AX1 ;左移把最

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

标签