数据的分类和统计也是一类非数值计算,数据的分类统计方法在例6.10中已介绍,下面通过一个例子介绍数据的分类存储问题。
解:由于在指定地址之后的100个字中,可能存在全是正数或负数的情况,所以,缓冲区Data1和Data2的容量都应是100个字。
.MODEL SMALL .DATA Num = 100 Data1 DW ?, Num dup(?) Data2 DW ?, Num dup(?) .CODE .STARTUP MOV AX, 40H MOV ES, AX LEA SI, Data1+2 ;指向存储正数的缓冲区 LEA DI, Data2+2 ;指向存储负数的缓冲区 XOR BX, BX ;BX用于扫描存储单元 MOV CX, 100? ;字符个数 .REPEAT MOV AX, ES:[BX] ADD BX, 2 CMP AX, 0 .CONTINUE .IF ZERO? JL next1 MOV [SI], AX ;向正数缓冲区内存储数据 ADD SI, 2 .CONTINUE next1: MOV [DI], AX ;向负数缓冲区内存储数据 ADD DI, 2 .UNTILCXZ SUB SI, OFFSET Data1+2 SUB DI, OFFSET Data2+2 SHR SI, 1 SHR DI, 1 MOV Data1, SI MOV Data2, DI ;把每类的统计个数存入缓冲区的第一个字单元 .EXIT 0 END