单片机,用汇编求平均值,八个数据在30H---37H。求的平均值放在40H,小数放在41H中。一定要有小数。

小数两位

ORG 0000H

MOV 30H, #12H ;先准备8个数.
MOV 31H, #23H
MOV 32H, #34H
MOV 33H, #45H
MOV 34H, #56H
MOV 35H, #67H
MOV 36H, #78H
MOV 37H, #89H

; ORG 0000H

MOV 40H, #0
MOV 41H, #0
MOV R0, #30H
LOP:MOV A, 41H
ADD A, @R0
MOV 41H, A
JNC $ + 4
INC 40H
INC R0
CJNE R0, #38H, LOP

;
;至此,求和完毕,和数在40H 41H中,不超过11位数。
;
;下面就要对和数除以8,求得平均值。
;
;除以8,可以编写一段16位数除以8位数的程序,呵呵,那就太长了!
;
;也可以把这16位数,右移3位,也相当于除以8。
;两个字节,右移1位,就需要6条指令,右移3位,就要用18条指令,还是太长!!!
;
;看下面,仅仅使用了7条指令,就完成了这个除以8的任务。
;
MOV A, 41H
ANL A, #0F8H
ADD A, 40H
RL A
SWAP A
MOV 40H, A ;平均值整数.
ANL 41H, #07H ;平均值小数.
;
;这是最简捷的16位数(共11个有效位)除以8的程序吧?
;
SJMP $

END

执行结果如下:

和:026CH;
平均值整数:4DH;
平均值小数:04H。
温馨提示:答案为网友推荐,仅供参考
相似回答