片内RAM区30H~34H单元中存放着5个十六进制数,请编程计算这五个数的算术平均值,结果存放到片内RAM区35H中

2024-12-29 16:37:18
推荐回答(1个)
回答1:

MOV R0,#30H ;间接寻址首地址送R0 MOV R2,#0 ;累加结果高位清零 MOV R3,#0 ;累加结果低位清零 MOV R4,#5 ;循环5次累加5个数SQUD1: MOV A,@R0 ;取数送A ADD A,R3 ;与结果低位相加 JNC SQUD2 ;没有进位转 INC R2 ;有进位高位加1SQUD2: INC R0 ;地址加1 DJNZ R7,SQUD1 ;判断5个数是否加完 LCALL DIV21 ;调用除法子程序求平均值 MOV 35H,A ;平均值送35H RETDIV21: MOV A,R2 ;高位送A JNZ DIV22 ;不为0转 MOV A,R3 ;为零则低位送A MOV B,#5 ;除数5送B DIV AB ;除法运算 RETDIV22: MOV A,R3 ;低位送A CLR C ;借位清零 SUBB A,#5 ;减5 JNC DIV24 ;没有借位转 MOV A,R2 ;有借位则高位送A JNZ DIV23 ;高位不为0则转 MOV A,R1 ;高位为0则除法算完,结果送A RETDIV23: DEC A ;高位减1 MOV R2,A ;储存高位DIV24: INC R1 ;结果加1 SJMP DIV22