【正确答案】编程如下:
AVR8:MOV R0,#40H ;置数据区首址
MOV R2,#0 ;低8位累加寄存器清0
MOV R3,#0 ;高8位累加寄存器清0
MOV R4,#8 ;置平均次数
ALOP:MOV A,@R0 ;读数据
ADD A,R2 ;低8位累加
MOV R2,A ;回存
CLR A ;高8位与进位累加
ADDC A,R3 ;
MOV R3,A ;回存
DJNZ R4,ALOP ;判8次累加完否?未完继续
MOV R4,#8 ;置除数
LCALL DIVH ;8次累加完,求平均值
CJNE R3,#4,NEXT ;判余数四舍五入
NEXT:JC NEXT1 ;<4,舍
INC R2 ;≥4,入
NEXT1:MOV 4AH,R2 ;存平均值
RET ;
2字节除以1字节子程序:[R3R2÷R4=商→R2(≤255),余数→R3]
DIVH:MOV R5,#8 ;置循环数
DH1:LCALL RLC2 ;2位左移
MOV F0,C ;存移出位
CLR C ;
MOV A,R3 ;
SUBB A,R4 ;R3-R4
JB F0,DH2 ;移出位=1,够减,转商上1
JC DH3 ;C=1,不够减,R3不变,商上0
DH2:MOV R3,A ;C=0,够减,回存差值
INC R2 ;商上1
DH3:DJNZ R5,DH1 ;判8次循环结束否?未完继续
RET ;
2字节(R3R2)连同Cy左移子程序:
RLC2:CLR C ;
MOV A,R2 ;
RLC A ;
MOV R2,A ;R2左移一位
MOV A,R3 ;
RLC A ;
MOV R3,A ;R2左移一位
RET ;
【答案解析】