结构推理 试计算片内RAM区40H~47H八个单元中数的算术平均值,结果存放在4AH中。
【正确答案】编程如下:
   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    ;
【答案解析】