做这个题目,要有两个阶段,先求和,再除以8。
程序如下:
MOV R0, #30H ;设定数据起始地址
MOV R1, #8 ;共有8字节,将循环相加8次
MOV R2, #0 ;R2 R3清零
MOV R3, #0
LOOP:
MOV A, @R0 ;取来一个数字
ADD A, R3 ;和低8位相加
MOV R3, A
JNC QQQ ;无进位转移
INC R2 ;有则高8位加一
QQQ:
INC R0 ;修改地址指针
DJNZ R1, LOOP ;循环8次
;
;至此,求和完毕,和数在R2R3中。
;下面,要对和数除以8,求得平均值。
;除以8,可以编写一段16位数除以8位数的程序!
;也可以把这16位数,右移3位,也相当于除以8。
;下面,仅仅使用了5条指令,就完成了这个除以8的任务。
;
ANL A, #0F8H
ADD A, R2
RL A
SWAP A
MOV 40H, A ;按照要求,把平均值存40H
SJMP $
END
mov R0,#30H ;(30H)→R0
MOV R2,8
MOV B,8
CLR A
LOOP: ADD A,R0
INC @R0
DJNC R2,LOOP
DIV AB
MOV 40H,A
SJMP $
程序就这样
C版本的,咋看都比汇编爽
unsigned char *p=0x30;
unsigned int sum=0,i;
for(i=0;i<8;i++)
{
sum= sum + *p;
p++;
}
p=0x40;
*p=(unsigned char)sum/8;