📄 tjave.asm
字号:
;计算平均值的算法。
ADR EQU 2000H ;样本数据数组首址。
FN EQU 30H ;样本个数(浮点格式)存放单元的首址。
XI EQU 33H ;当前样本存放单元的首址。
AVE EQU 36H ;平均值存放单元的首址。
CON DATA 2EH ;循环计数器。
N DATA 2FH ;样本个数(不超过255个)存放单元。
FLAG DATA 23H ;浮点运算标志
PFA BIT FLAG.7
PFB BIT FLAG.6
PFC BIT FLAG.5
PFD BIT FLAG.4
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV N,#200 ;共有200个样本数据。
MOV P2,#HIGH(ADR) ;片外RAM中样本数据存放首址。
MOV R0,#LOW(ADR)
MOV DPTR,#TABL ;测试用样本数据表首址。
MOV CON,N ;待测试数据个数。
TEST1: MOV R6,#3
READ: CLR A
MOVC A,@A+DPTR ;将测试数据存放到片外RAM中。
MOVX @R0,A
INC DPTR
INC R0
CJNE R0,#0,READ1
INC P2
READ1: DJNZ R6,READ
DJNZ CON,TEST1
LCALL AVERAG ;调用求平均数算法。
STOP: LJMP STOP ;结果为AVE=1.745 ( 01H 0DFH 4FH )。
AVERAG: MOV CON,N ;准备累加全部样本数据。
MOV DPTR,#ADR;指向存放样本数据的片外RAM首址。
MOV R0,#AVE ;将浮点累加器清零。
LCALL FCLR
AVE1: MOV R2,#3 ;将一个样本数据传送到片内XI单元中。
MOV R1,#XI
AVE2: MOVX A,@DPTR
MOV @R1,A
INC R1
INC DPTR
DJNZ R2,AVE2
MOV R1,#XI ;将这个样本数据累加到AVE中。
LCALL FADD
DJNZ CON,AVE1;累加完全部样本数据。
MOV FN,#8 ;将样本个数转换成格式化浮点数。
MOV FN+1,N
MOV FN+2,#0
MOV R0,#FN
LCALL FSDT
MOV R0,#AVE ;将累加和作为被除数。
MOV R1,#FN ;以样本个数为除数。
LCALL FDIV ;相除后得到平均值。
RET ;求平均值的算法结束。
TABL: DB 01H,0E7H,41H ;1.807 以下是200个测试样本数据。
DB 01H,0DDH,83H ;1.731
DB 01H,0E8H,14H ;1.813
DB 01H,0E8H,0C3H ;1.818
DB 01H,0E8H,7DH ;1.816
DB 01H,0DCH,58H ;1.721
DB 01H,0D7H,0E3H ;1.687
DB 01H,0DAH,15H ;1.704
DB 01H,0D6H,0CAH ;1.678
DB 01H,0D6H,60H ;1.675
DB 01H,0E9H,0FFH ;1.828
DB 01H,0D9H,0F2H ;1.703
DB 01H,0E1H,49H ;1.760
DB 01H,0E6H,16H ;1.798
DB 01H,0E2H,97H ;1.770
DB 01H,0DFH,0EAH ;1.749
DB 01H,0E0H,0E0H ;1.757
DB 01H,0E2H,74H ;1.769
DB 01H,0E2H,0AH ;1.766
DB 01H,0E2H,0BAH ;1.771
DB 01H,0E3H,8DH ;1.778
DB 01H,0DAH,5BH ;1.706
DB 01H,0DEH,8AH ;1.739
DB 01H,0DCH,0C2H ;1.725
DB 01H,0DAH,5BH ;1.706
DB 01H,0E4H,0A6H ;1.786
DB 01H,0DBH,97H ;1.716
DB 01H,0D9H,0CFH ;1.702
DB 01H,0E7H,1EH ;1.806
DB 01H,0DEH,67H ;1.738
DB 01H,0E7H,1EH ;1.806
DB 01H,0DCH,6AH ;1.722
DB 01H,0D7H,10H ;1.680
DB 01H,0DEH,33H ;1.736
DB 01H,0E9H,73H ;1.824
DB 01H,0D5H,0D4H ;1.671
DB 01H,0E3H,0D3H ;1.780
DB 01H,0D5H,8EH ;1.668
DB 01H,0EAH,69H ;1.831
DB 01H,0D7H,56H ;1.682
DB 01H,0DDH,0DBH ;1.733
DB 01H,0E0H,0E0H ;1.757
DB 01H,0E1H,6CH ;1.761
DB 01H,0E3H,9EH ;1.778
DB 01H,0E6H,28H ;1.798
DB 01H,0E3H,35H ;1.775
DB 01H,0DDH,08H ;1.727
DB 01H,0E0H,76H ;1.754
DB 01H,0E4H,94H ;1.786
DB 01H,0E6H,91H ;1.801
DB 01H,0D7H,79H ;1.683
DB 01H,0E0H,53H ;1.753
DB 01H,0DBH,63H ;1.714
DB 01H,0E7H,87H ;1.809
DB 01H,0D7H,79H ;1.683
DB 01H,0D3H,0E8H ;1.656
DB 01H,0D8H,0D9H ;1.694
DB 01H,0D3H,0E8H ;1.656
DB 01H,0DEH,33H ;1.736
DB 01H,0E2H,2DH ;1.767
DB 01H,0D8H,0B6H ;1.693
DB 01H,0E3H,0C1H ;1.779
DB 01H,0E9H,2DH ;1.822
DB 01H,0DFH,05H ;1.742
DB 01H,0DFH,4CH ;1.744
DB 01H,0EBH,0EBH ;1.843
DB 01H,0E1H,7EH ;1.762
DB 01H,0DDH,0B8H ;1.732
DB 01H,0DEH,9CH ;1.739
DB 01H,0ECH,0EH ;1.844
DB 01H,0DCH,24H ;1.720
DB 01H,0D4H,75H ;1.660
DB 01H,0E3H,00H ;1.773
DB 01H,0EBH,0A5H ;1.841
DB 01H,0D8H,0D9H ;1.694
DB 01H,0E6H,91H ;1.801
DB 01H,0EDH,4BH ;1.854
DB 01H,0EDH,04H ;1.852
DB 01H,0DEH,33H ;1.736
DB 01H,0DFH,0A3H ;1.747
DB 01H,0E2H,0AH ;1.766
DB 01H,0DCH,58H ;1.721
DB 01H,0DAH,0D6H ;1.710
DB 01H,0DCH,12H ;1.719
DB 01H,0EAH,69H ;1.831
DB 01H,0D2H,0F2H ;1.648
DB 01H,0D3H,15H ;1.649
DB 01H,0E5H,8AH ;1.793
DB 01H,0DFH,80H ;1.746
DB 01H,0EDH,0D7H ;1.858
DB 01H,0DFH,0B5H ;1.748
DB 01H,0E2H,97H ;1.770
DB 01H,0DEH,0F4H ;1.742
DB 01H,0E3H,58H ;1.776
DB 01H,0E5H,78H ;1.793
DB 01H,0E5H,0BFH ;1.795
DB 01H,0DAH,7EH ;1.707
DB 01H,0E1H,0B2H ;1.763
DB 01H,0E6H,0C6H ;1.803
DB 01H,0D5H,01H ;1.664
DB 01H,0E1H,6CH ;1.761
DB 01H,0E9H,73H ;1.824
DB 01H,0D6H,0CAH ;1.678
DB 01H,0D8H,6FH ;1.691
DB 01H,0DDH,60H ;1.729
DB 01H,0E4H,3CH ;1.783
DB 01H,0D0H,0D2H ;1.631
DB 01H,0D1H,0D9H ;1.639
DB 01H,0E9H,2DH ;1.822
DB 01H,0E0H,88H ;1.754
DB 01H,0DFH,29H ;1.743
DB 01H,0DDH,0A6H ;1.732
DB 01H,0DBH,63H ;1.714
DB 01H,0DCH,12H ;1.719
DB 01H,0E7H,0CEH ;1.811
DB 01H,0E2H,1CH ;1.766
DB 01H,0D6H,83H ;1.676
DB 01H,0DFH,0FBH ;1.750
DB 01H,0ECH,78H ;1.847
DB 01H,0D0H,0D2H ;1.631
DB 01H,0EFH,02H ;1.867
DB 01H,0E0H,65H ;1.753
DB 01H,0E3H,0D3H ;1.780
DB 01H,0E4H,4EH ;1.784
DB 01H,0D8H,0D9H ;1.694
DB 01H,0E7H,1EH ;1.806
DB 01H,0E0H,1EH ;1.751
DB 01H,0E9H,0AH ;1.821
DB 01H,0DDH,71H ;1.730
DB 01H,0D8H,4CH ;1.690
DB 01H,0DFH,0FBH ;1.750
DB 01H,0E2H,0BAH ;1.771
DB 01H,0E5H,32H ;1.791
DB 01H,0EFH,5AH ;1.870
DB 01H,0CCH,0A2H ;1.599
DB 01H,0DDH,0FEH ;1.734
DB 01H,0E3H,8DH ;1.778
DB 01H,0DEH,67H ;1.738
DB 01H,0EAH,69H ;1.831
DB 01H,0F1H,0D2H ;1.889
DB 01H,0DDH,2BH ;1.728
DB 01H,0E1H,5BH ;1.761
DB 01H,0E1H,0C4H ;1.764
DB 01H,0E6H,5DH ;1.800
DB 01H,0D6H,1AH ;1.673
DB 01H,0F2H,0A5H ;1.896
DB 01H,0DBH,74H ;1.714
DB 01H,0E4H,0B7H ;1.787
DB 01H,0E5H,67H ;1.792
DB 01H,0D9H,42H ;1.697
DB 01H,0D3H,5CH ;1.651
DB 01H,0E1H,8FH ;1.762
DB 01H,0E4H,94H ;1.786
DB 01H,0DDH,0C9H ;1.733
DB 01H,0E6H,0D8H ;1.803
DB 01H,9AH,0E1H ;1.210
DB 01H,0ACH,0CDH ;1.350
DB 01H,8EH,14H ;1.110
DB 01H,0DFH,0D8H ;1.749
DB 02H,96H,66H ;2.350
DB 01H,0DFH,0B5H ;1.748
DB 01H,0E2H,0AH ;1.766
DB 01H,0E5H,78H ;1.793
DB 01H,0E4H,0ECH ;1.788
DB 01H,0DFH,4CH ;1.744
DB 01H,0E3H,7BH ;1.777
DB 01H,0DDH,2BH ;1.728
DB 01H,0DBH,0CCH ;1.717
DB 01H,0DCH,12H ;1.719
DB 01H,0E1H,37H ;1.760
DB 01H,0E2H,0BAH ;1.771
DB 01H,0E0H,65H ;1.753
DB 01H,0DBH,0BH ;1.711
DB 01H,0D9H,0F2H ;1.703
DB 01H,0E3H,0D3H ;1.780
DB 01H,0DAH,0F9H ;1.711
DB 01H,0DCH,35H ;1.720
DB 01H,0E4H,0ECH ;1.788
DB 01H,0EAH,0AFH ;1.833
DB 01H,0DEH,8AH ;1.739
DB 01H,0DDH,1AH ;1.727
DB 01H,0E1H,0F9H ;1.765
DB 01H,0DDH,08H ;1.727
DB 01H,0E1H,8FH ;1.762
DB 01H,0E3H,0D3H ;1.780
DB 01H,0E0H,42H ;1.752
DB 01H,0DAH,0A1H ;1.708
DB 01H,0D9H,77H ;1.699
DB 01H,0E5H,0BFH ;1.795
DB 01H,0D8H,29H ;1.689
DB 01H,0E7H,1EH ;1.806
DB 01H,0D9H,0E0H ;1.702
DB 01H,0DCH,47H ;1.721
DB 01H,0DFH,3AH ;1.744
DB 01H,0DDH,0B8H ;1.732
DB 01H,0DFH,80H ;1.746
DB 01H,0E5H,67H ;1.792
DB 01H,0E6H,6EH ;1.800
DB 01H,0DAH,0F9H ;1.711
DB 01H,0E2H,62H ;1.769
;以下是浮点子程序库中的有关子程序。
FSDT: LCALL MVR0
LCALL RLN
LJMP MOV0
FADD: CLR F0
SJMP AS
FSUB: SETB F0
AS: LCALL MVR1
MOV C,F0
RRC A
XRL A,@R1
MOV C,ACC.7
ASN: MOV PFB,C
XRL A,@R0
RLC A
MOV F0,C
LCALL MVR0
LCALL AS1
MOV0: INC R0
INC R0
MOV A,R4
MOV @R0,A
DEC R0
MOV A,R3
MOV @R0,A
DEC R0
MOV A,R2
MOV C,PFA
MOV ACC.7,C
MOV @R0,A
CLR ACC.7
CLR OV
CJNE A,#3FH,MV01
SETB OV
MV01: MOV A,@R0
RET
MVR0: MOV A,@R0
MOV C,ACC.7
MOV PFA,C
MOV C,ACC.6
MOV ACC.7,C
MOV R2,A
INC R0
MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R4,A
DEC R0
DEC R0
RET
MVR1: MOV A,@R1
MOV C,ACC.7
MOV PFB,C
MOV C,ACC.6
MOV ACC.7,C
MOV R5,A
INC R1
MOV A,@R1
MOV R6,A
INC R1
MOV A,@R1
MOV R7,A
DEC R1
DEC R1
RET
AS1: MOV A,R6
ORL A,R7
JZ AS2
MOV A,R3
ORL A,R4
JNZ EQ1
MOV A,R6
MOV R3,A
MOV A,R7
MOV R4,A
MOV A,R5
MOV R2,A
MOV C,PFB
MOV PFA,C
AS2: RET
EQ1: MOV A,R2
XRL A,R5
JZ AS4
JB ACC.7,EQ3
MOV A,R2
CLR C
SUBB A,R5
JC EQ4
EQ2: CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
INC R5
ORL A,R6
JNZ EQ1
MOV A,R2
MOV R5,A
SJMP AS4
EQ3: MOV A,R2
JNB ACC.7,EQ2
EQ4: CLR C
LCALL RR1
ORL A,R3
JNZ EQ1
MOV A,R5
MOV R2,A
AS4: JB F0,AS5
MOV A,R4
ADD A,R7
MOV R4,A
MOV A,R3
ADDC A,R6
MOV R3,A
JNC AS2
LJMP RR1
AS5: CLR C
MOV A,R4
SUBB A,R7
MOV B,A
MOV A,R3
SUBB A,R6
JC AS6
MOV R4,B
MOV R3,A
LJMP RLN
AS6: CPL PFA
CLR C
MOV A,R7
SUBB A,R4
MOV R4,A
MOV A,R6
SUBB A,R3
MOV R3,A
RLN: MOV A,R3
ORL A,R4
JNZ RLN1
MOV R2,#0C1H
RET
RLN1: MOV A,R3
JB ACC.7,RLN2
CLR C
LCALL RL1
SJMP RLN
RLN2: CLR OV
RET
RL1: MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
DEC R2
CJNE R2,#0C0H,RL1E
CLR A
MOV R3,A
MOV R4,A
MOV R2,#0C1H
RL1E: CLR OV
RET
RR1: MOV A,R3
RRC A
MOV R3,A
MOV A,R4
RRC A
MOV R4,A
INC R2
CLR OV
CJNE R2,#40H,RR1E
MOV R2,#3FH
SETB OV
RR1E: RET
FMUL: LCALL MVR0
MOV A,@R0
XRL A,@R1
RLC A
MOV PFA,C
LCALL MUL0
LJMP MOV0
MUL0: LCALL MVR1
MUL1: MOV A,R3
ORL A,R4
JZ MUL6
MOV A,R6
ORL A,R7
JZ MUL5
MOV A,R7
MOV B,R4
MUL AB
MOV A,B
XCH A,R7
MOV B,R3
MUL AB
ADD A,R7
MOV R7,A
CLR A
ADDC A,B
XCH A,R4
MOV B,R6
MUL AB
ADD A,R7
MOV R7,A
MOV A,B
ADDC A,R4
MOV R4,A
CLR A
RLC A
XCH A,R3
MOV B,R6
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
JB ACC.7,MUL2
MOV A,R7
RLC A
MOV R7,A
LCALL RL1
MUL2: MOV A,R7
JNB ACC.7,MUL3
INC R4
MOV A,R4
JNZ MUL3
INC R3
MOV A,R3
JNZ MUL3
MOV R3,#80H
INC R2
MUL3: MOV A,R2
ADD A,R5
MD: MOV R2,A
JB ACC.7,MUL4
JNB ACC.6,MUL6
MOV R2,#3FH
SETB OV
RET
MUL4: JB ACC.6,MUL6
MUL5: CLR A
MOV R3,A
MOV R4,A
MOV R2,#41H
MUL6: CLR OV
RET
FDIV: INC R0
MOV A,@R0
INC R0
ORL A,@R0
DEC R0
DEC R0
JNZ DIV1
MOV @R0,#41H
CLR OV
RET
DIV1: INC R1
MOV A,@R1
INC R1
ORL A,@R1
DEC R1
DEC R1
JNZ DIV2
SETB OV
RET
DIV2: LCALL MVR0
MOV A,@R0
XRL A,@R1
RLC A
MOV PFA,C
LCALL MVR1
LCALL DIV3
LJMP MOV0
DIV3: CLR C
MOV A,R4
SUBB A,R7
MOV A,R3
SUBB A,R6
JC DIV4
LCALL RR1
SJMP DIV3
DIV4: CLR A
XCH A,R0
PUSH ACC
CLR A
XCH A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV B,#10H
DIV5: CLR C
MOV A,R1
RLC A
MOV R1,A
MOV A,R0
RLC A
MOV R0,A
MOV A,R4
RLC A
MOV R4,A
XCH A,R3
RLC A
XCH A,R3
MOV F0,C
CLR C
SUBB A,R7
MOV R2,A
MOV A,R3
SUBB A,R6
ANL C,/F0
JC DIV6
MOV R3,A
MOV A,R2
MOV R4,A
INC R1
DIV6: DJNZ B,DIV5
MOV A,R6
CLR C
RRC A
SUBB A,R3
CLR A
ADDC A,R1
MOV R4,A
CLR A
ADDC A,R0
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
MOV A,R2
CLR C
SUBB A,R5
LCALL MD
LJMP RLN
FCLR: INC R0
INC R0
CLR A
MOV @R0,A
DEC R0
MOV @R0,A
DEC R0
MOV @R0,#41H
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -