111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:2783回复:0

经典汇编语言教程:10.2 数据的分类统计程序

楼主#
更多 发布于:2013-01-28 14:20

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

喜欢0 评分0
游客

返回顶部