假设片外SRAM的8000H-807FH地址单元保存着一组无符号字符型数据,请计算其中所有小于80H数据的平均值。
悬赏分:15 - 解决时间:2010-1-3 12:01
;-------------------------------
最佳答案:
汇编语言的程序如下。
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
MOV DPTR, #8000H
MOV R2, #0 ;小于80H数据的个数
MOV R5, #0 ;总和
MOV R6, #0
MOV R7, #80H ;数据总数
LOOP1: ;循环求和
MOVX A, @DPTR
INC DPTR
JB ACC.7, NEXT
INC R2
ADD A, R6
MOV R6, A
JNC NEXT
INC R5 ;高8位
NEXT:
DJNZ R7, LOOP1
MOV A, R2
JZ _END ;如果个数为0,转到结束
CALL R56_R2 ;求平均
_END: ;平均值在R6中.
NOP
SJMP $
;-------------------------------
R56_R2: ;用移位法来做除法:(R5R6)/R2=R6...R5
MOV R7, #8
LOOP: CLR C
MOV A, R6 ;左移.
RLC A
MOV R6, A
MOV A, R5
RLC A
MOV R5, A
MOV F0, C
;
CLR C
MOV A, R5
SUBB A, R2
MOV R5, A
JNC GJIAN ;够减跳到商加一.
JB F0, GJIAN
BGJIAN:
ADD A, R2 ;不够减,恢复余数.
MOV R5, A
SJMP NEXT_W
GJIAN:
INC R6
NEXT_W:
DJNZ R7, LOOP
RET
;-------------------------------
END
;-------------------------------
回答者: 做而论道 - 十一级 2009-12-27 16:29
提问者对于答案的评价:非常感谢!
原题网址:http://zhidao.baidu.com/question/130631864.html