📄 标准方差.asm
字号:
SWARP: MOV RW2,#0
MOV RW1,#0
MOV RW0,#0
MOV DPTR,#0D000H ;根据T由 UVRAM取 V
MOVX A,@DPTR
MOV MTH,A
INC DPTR
MOVX A,@DPTR
MOV MTL,A ;从UVRAM取T
GB1: PUSH MTH
PUSH MTL
LCALL ATTV
CLR C
MOV A,BF0
SUBB A,VAGL
MOV BF0,A
MOV A,BF1
SUBB A,VAGH
MOV BF1,A
JC GB2
GB4: MOV R2,BF1 ;Vi-VAG(Vi>VAG)
MOV R3,BF0
MOV R6,BF1
MOV R7,BF0
LCALL BMUL ;(Vi-VAG)(Vi-VAG)
LJMP GB3
GB2: MOV A,BF1
CPL A
MOV BF1,A
MOV A,BF0
CPL A
ADD A,#1
MOV BF0,A
MOV A,BF1
ADDC A,#0
MOV BF1,A ;若Vi<VAG,则求补码
LJMP GB4
GB3: MOV A,RW0
ADD A,R7
MOV RW0,A
MOV A,RW1
ADDC A,R6
MOV RW1,A
MOV A,RW2
ADDC A,#0
MOV RW2,A ;(Vi-VAG)!2进入累积和
POP MTL
POP MTH
MOV A,MTL
CLR C
SUBB A,#1
MOV MTL,A
MOV A,MTH
SUBB A,#0
MOV MTH,A ;T-1
MOV A,MTH
JNZ GB1
MOV A,MTL
JNZ GB1
MOV DPTR,#0D000H
MOVX A,@DPTR
MOV MTH,A
INC DPTR
MOVX A,@DPTR
CLR C
SUBB A,#1
MOV MTL,A
MOV A,MTH
SUBB A,#0
MOV MTH,A ;T-1
MOV R2,#0
MOV R3,RW2
MOV R4,RW1
MOV R5,RW0
MOV R6,MTH
MOV R7,MTL
LCALL BDIV ;M(Vi-VAG)!2/(T-1)
JB PSW.5,OVR
MOV RW1,R4
MOV RW0,R5
MOV R0,#6EH
LCALL SQRS ;开方
RET
SQRS: LCALL SQR20 ;双字节开平方,入口:(R0)-MSB,(R0+1)-LSB,出口:(R0)单字节
JB F0,SQR26 ;小数部分四舍五入
MOV A,R5
SETB C
SUBB A,@R0
CLR OV
JC SQR27
SQR26: MOV A,@R0
ADD A,#1
MOV @R0,A
MOV OV,C
SQR27: RET
SQR20:MOV A,@R0
MOV R4,A
LCALL SQR0
SWAP A
MOV @R0,A
SWAP A
INC A
MOV B,A
MOV A,R3
RL A
RL A
RL A
DIV AB
ORL A,@R0
MOV @R0,A
MOV B,A
MUL AB
INC R0
XCH A,@R0
SUBB A,@R0
MOV R5,A
MOV A,B
XCH A,R4
SUBB A,R4
MOV R4,A
DEC R0
SQR22:MOV A,@R0
RLC A
MOV R6,A
CLR A
RLC A
MOV R3,A
MOV A,R5
SETB C
SUBB A,R6
MOV R2,A
MOV A,R4
SUBB A,R3
JC SQR23
MOV R4,A
MOV A,R2
MOV R5,A
INC @R0
AJMP SQR22
SQR23:MOV A,R4
RRC A
MOV F0,C
RET
SQR0: MOV R3,A
JZ SQR14
SWAP A
ANL A,#0FH
ADD A,#2
MOVC A,@A+PC
SJMP SQR11
DB 1,4,5
DB 6,8,8
DB 9,10,11
DB 12,12,13
DB 13,14,14
DB 15
SQR11: MOV R2,A
SQR12: MOV B,R2
INC B
MOV A,R3
DIV AB
SETB C
SUBB A,R2
INC R2
JZ SQR13
JNC SQR12
DEC R2
SQR13: MOV A,R2
MOV B,A
MUL AB
XCH A,R3
CLR C
SUBB A,R3
MOV R3,A
MOV A,R2
SQR14: RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -