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