📄 sat.asm
字号:
ret
Z_Trans_YSquDiff:
lda #>SignZ
sta0 .PXPP
lda #<SignZ
sta0 .PXDP
lda #>SignYSquDiff
sta0 .PYPP
lda #<SignYSquDiff
sta0 .PYDP
call .CopyData
ret
XFourSum_Trans_X:
lda #>SignXFourSum
sta0 .PXPP
lda #<SignXFourSum
sta0 .PXDP
lda #>SignX
sta0 .PYPP
lda #<SignX
sta0 .PYDP
call .CopyData
ret
YSquDiff_Trans_X:
lda #>SignYSquDiff
sta0 .PXPP
lda #<SignYSquDiff
sta0 .PXDP
lda #>SignX
sta0 .PYPP
lda #<SignX
sta0 .PYDP
call .CopyData
ret
XYSum_Trans_Y:
lda #>SignXYSum
sta0 .PXPP
lda #<SignXYSum
sta0 .PXDP
lda #>SignY
sta0 .PYPP
lda #<SignY
sta0 .PYDP
call .CopyData
ret
Z_Trans_XYSum:
lda #>SignZ
sta0 .PXPP
lda #<SignZ
sta0 .PXDP
lda #>SignXYSum
sta0 .PYPP
lda #<SignXYSum
sta0 .PYDP
call .CopyData
ret
Z_Trans_XSquYSum:
lda #>SignZ
sta0 .PXPP
lda #<SignZ
sta0 .PXDP
lda #>SignXSquYSum
sta0 .PYPP
lda #<SignXSquYSum
sta0 .PYDP
call .CopyData
ret
Z_Trans_XYMulDiff:
lda #>SignZ
sta0 .PXPP
lda #<SignZ
sta0 .PXDP
lda #>SignXYMulDiff
sta0 .PYPP
lda #<SignXYMulDiff
sta0 .PYDP
call .CopyData
ret
XSquYSum_Trans_X:
lda #>SignXSquYSum
sta0 .PXPP
lda #<SignXSquYSum
sta0 .PXDP
lda #>SignX
sta0 .PYPP
lda #<SignX
sta0 .PYDP
call .CopyData
ret
XYMulDiff_Trans_X:
lda #>SignXYMulDiff
sta0 .PXPP
lda #<SignXYMulDiff
sta0 .PXDP
lda #>SignX
sta0 .PYPP
lda #<SignX
sta0 .PYDP
call .CopyData
ret
;Public functions
;; compute Standard deviation
; Clear statistic memory for computing SD
SD_Scl::
lda #>SDBuf
sta0 Param+0 ;; PP
lda #<SDBuf
sta0 Param+1 ;; DP
;lda #(SDBufEnd-SDBuf+7)
lda #27
sta0 Param+2 ;; Length
call ClearBuf
lda #0h
sta PP
ret
;// Calling the function to prepare SD operation after data input
; Input:OperandX (number)
QR_PrepareX:
LR_PrepareX:
SD_Prepare::
call .X_trans_S
call XSum_Trans_Y
call Addition
call Z_Trans_XSum ;xSum+=num
call .S_trans_X
call .XSqu ;num^2
call .Z_trans_Y
call XSquSum_Trans_X
call Addition ;XSquSum+=num^2
call Z_Trans_XSquSum
call .Put_1_to_OperandX
call XCnt_Trans_Y
call Addition ;XCnt+=1
call Z_Trans_XCnt
call XSum_Trans_Y
call .Y_trans_X
call Multiplation ;XSum^2
call .Z_trans_Buf
call XSquSum_Trans_X
call XCnt_Trans_Y
call Multiplation ;XCnt*XSquSum
call .Z_trans_X
call .Buf_trans_Y
call Subtration ;XCnt*XSquSum-(XSum^2)
call Z_Trans_XSquDiff ;XSquDiff=XCnt*XSquSum-(XSum^2)
ret
;// Computing delta(n) for X
;Input:No
;Output:OperandZ
LR_CalcXPSD::
SD_CalcPSD::
QR_CalcXPSD::
call XSquDiff_Trans_X ;sqrt(XSquDiff)
call Squ
call .Z_trans_X
call XCnt_Trans_Y
call Division ;sqrt(XSquDiff)/XCnt
ret
;// Computing delta(n-1) for X
;Input:No
;Output:OperandZ
LR_CalcXSSD::
SD_CalcSSD::
QR_CalCXSSD::
call XCnt_Trans_Y
call .Y_trans_X
;call .X_trans_Buf
call Multiplation ;XCnt^2
call .Z_trans_X
;call .Buf_trans_Y
call XCnt_Trans_Y
call Subtration ;XCnt^2-XCnt
call .Z_trans_Y
call XSquDiff_Trans_X
call Division ;sqrt(XSquDiff/XCnt^2-XCnt)
call .Z_trans_X
call Squ
ret
;// Computing X's arithmetic mean
;Input:No
;Output:OperandZ
QR_CalcXAvg::
LR_CalcXAvg::
SD_CalcXAvg::
call XSum_Trans_Y
call .Y_trans_X
call XCnt_Trans_Y
call Division
ret
;; Linear Regression
;// Clear statistic memory for computing LR
LR_Scl::
lda #>LRBuf
sta0 Param+0 ;; PP
lda #<LRBuf
sta0 Param+1 ;; DP
lda #54
sta0 Param+2 ;; Length
call ClearBuf
lda #0h
sta PP
ret
;// Calling the function to prepare Y's SD operation after data input
; Input:OperandX (number)
QR_PrePareY:
LR_PrepareY:
call .X_trans_S
call YSum_Trans_Y
call Addition
call Z_Trans_YSum ;YSum+=num
call .S_trans_X
call .XSqu ;num^2
call .Z_trans_Y
call YSquSum_Trans_X
call Addition ;YSquSum+=num^2
call Z_Trans_YSquSum
;call .Put_1_to_OperandX
;call YCnt_Trans_Y
;call Addition ;YCnt+=1
;call Z_Trans_YCnt
call YSum_Trans_Y
call .Y_trans_X
call Multiplation ;YSum^2
call .Z_trans_Buf
call YSquSum_Trans_X
call YCnt_Trans_Y
call Multiplation ;YCnt*YSquSum
call .Z_trans_X
call .Buf_trans_Y
call Subtration ;YCnt*YSquSum-(YSum^2)
call Z_Trans_YSquDiff ;YSquDiff=YCnt*YSquSum-(YSum^2)
ret
;// Calling the function to prepare LR operation after data input
;Input OperandX,OperandY
LR_Prepare::
;;XYSum+=NumX*NumY
call .Y_trans_B
call .X_trans_Buf
call Multiplation
call .Z_trans_X
call XYSum_Trans_Y
call Addition
call Z_Trans_XYSum
;;
call .Buf_trans_X
call LR_PrepareX
;;
call .B_trans_X
call LR_PrepareY
;;XSum*YSum
call YSum_Trans_Y
call .Y_trans_X
call XSum_Trans_Y
call Multiplation
call .Z_trans_Buf
;;XYSum*XCnt
call XCnt_Trans_Y
call .Y_trans_X
call XYSum_Trans_Y
call Multiplation
;;XYSum*XCnt-XSum*YSum
call .Z_trans_X
call .Buf_trans_Y
call Subtration
call Z_Trans_XYMulDiff ;XYMulDiff=XYSum*XCnt-XSum*YSum
ret
;// Computing delta(n) for Y
QR_CalCYPSD::
LR_CalcYPSD::
call YSquDiff_Trans_X ;sqrt(YSquDiff)
call Squ
call .Z_trans_X
call YCnt_Trans_Y
call Division ;sqrt(YSquDiff)/YCnt
ret
;// Computing delta(n-1) for Y
; Input:No
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -