10.2 数据的分类统计程序
优质
小牛编辑
129浏览
2023-12-01
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 |