📄 ddm2bug.asm
字号:
; DDM2功能:求双字节十六进制无符号数据块的平均值
org 000h
jmp 40h
org 40h
;入口条件:数据块的手指放在dptr中,双字节数据总个数放在r7中
;出口信息: 平均值放在r4,r5中
DDM2: MOV A,R7 ;保存数据个数
MOV R2,A ;初始化数据指针
PUSH DPL ;保持首址
PUSH DPH
CLR A ;初始化累加和
MOV R3,A
MOV R4,A
MOV R5,A
DM20: MOVX A,@DPTR ;读取一个数据的高字节
MOV B,A
INC DPTR
MOVX A,@DPTR ;读取一个数据的低字节
INC DPTR
ADD A,R5 ; 累加到累加和中
MOV R5,A
MOV A,B
ADDC A,R4
MOV R4,A
JNC DM21
INC R3
DM21: DJNZ R2,DM20 ;累加完全部数据
POP DPH ;恢复首址
POP DPL
LJMP DV31 ;求R3R4R5/R7-→R4R5,得到平均值
DV31: CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24: DJNZ R2,DM23
MOV A,R3 ;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25: INC R5
MOV A,R5
JNZ DM26
INC R4
DM26: CLR OV
jmp $
RET ;商在R4R5中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -