ITEEDU

10.2 数据的分类统计程序

数据的分类和统计也是一类非数值计算,数据的分类统计方法在例6.10中已介绍,下面通过一个例子介绍数据的分类存储问题。

例10.5 统计从地址0040H:0000H开始的100个字中,把正数和负数按照它们先后出现的次序分别存储在缓冲区Data1和Data2,并把每类的个数存入相应缓冲区的第一个字单元中。

解:由于在指定地址之后的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