已知在首地址为DATA的字数组中存放一系列有符号数(首元素为数据个数),试编写一个程序求出它们的平均值放在变量AVER中,并求出数组中有多少个数大于该平均值,将大于平均值的元素个数保存在变量COUNT中。(注意,这些数据的累加和可能超出-32768~32767之间)
DATA1 SEGMENT
DATA DW 10,1,2,3,4,5,6,-7,-8,-9,10
AVER DW 5
COUNT DW ?
DATA1 ENDS
STACK SEGMENT
DW 10 DUP(?)
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA1
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA1
MOV DS,AX
LEA SI,DATA
MOV CX,[SI]
ADD SI,2
PUSH SI
PUSH CX
MOV BX,0
MOV DX,0
CLD
L1:LODSW
CMP AX,0
JL L
ADD BX,AX
ADC DX,0
JMP L4
L:NEG AX
SUB BX,AX
SBB DX,0
L4:LOOP L1
POP CX
MOV AX,BX
IDIV CX
MOV AVER,AX
POP SI
MOV DX,0
CLD
L2:LODSW
CMP AX,AVER
JNG L3
INC DX
L3:LOOP L2
MOV COUNT,DX
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
注意知识点:
(1)求平均数,求和时要先判断是争还是负在进行加减法,不能直接用加法。
(2)求平均时,直接用有符号除法,比较大小也是用有符号比较。