数据的分类和统计也是一类非数值计算,数据的分类统计方法在例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