📄 sat.asm
字号:
call Addition
call .Z_trans_X
call Squ
call .Z_trans_X ;sqrt(B^2+4*(y-A)*C)
call .B_trans_Y
call Subtration ;sqrt(B^2+4*(y-A)*C)-B
call .Z_trans_Buf ;Buf=sqrt(B^2+4*(y-A)*C)-B
call Put_2_to_OperandX
call .S_trans_Y
call Multiplation ;2*C
call .Z_trans_Y
call .Buf_trans_X
call Division ; [sqrt([B^2+4*(y-A)*C]-B]/(2C)
ret
;Input:OperandX (y)
;Output:OperandZ
;S=Coff C
;B=Coff B
;Note:Q.R's X estimate has two values i.e. x1,x2
;Output:[-sqrt([B^2+4*(y-A)*C]-B]/(2C)
QR_EstimateX2::
call X_Trans_Tmp
call QR_CalCA
call .Z_trans_Y ;Y=A
call Tmp_Trans_X
call Subtration ;(y-A)
call .Z_Trans_X
call .S_Trans_Y ;C
call Multiplation ;(y-A)*C
call .Z_trans_Y
call Put_4_to_OperandX
call Multiplation ;4*(y-A)*C
call .Z_trans_Buf
call .B_trans_X
call .XSqu ;B^2
call .Z_trans_X
call .Buf_trans_Y
call Addition
call .Z_trans_X
call Squ
call .Z_trans_Y ;sqrt(B^2+4*(y-A)*C)
call .ClrX
call Subtration
call .Z_trans_X ;-sqrt(B^2+4*(y-A)*C)
call .B_trans_Y
call Subtration ;-sqrt(B^2+4*(y-A)*C)-B
call .Z_trans_Buf ;
call Put_2_to_OperandX
call .S_trans_Y
call Multiplation ;2*C
call .Z_trans_Y
call .Buf_trans_X
call Division ; [-sqrt([B^2+4*(y-A)*C]-B]/(2C)
ret
;// Calling the function to prepare SD operation after data input
; Input:OperandX (number),SatDataCnt (sat smaple data count)
QR_PrepareXNTimes::
LR_PrepareXNTimes::
SD_PrepareNTimes::
call .X_trans_S
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_X
call XSum_Trans_Y
call Addition
call Z_Trans_XSum ;xSum+=num*SatDataCnt
call .S_trans_X
call .XSqu ;num^2
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_Y
call XSquSum_Trans_X
call Addition ;XSquSum+=(num^2)*SatDataCnt
call Z_Trans_XSquSum
call SatDataCnt_Trans_X
call XCnt_Trans_Y
call Addition ;XCnt+=SatDataCnt
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
;// Calling the function to prepare Y's SD operation after data input
; Input:OperandX (number),SatDataCnt(Sat sample data count)
QR_PrePareYNTimes:
LR_PrepareYNTimes:
call .X_trans_S
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_X
call YSum_Trans_Y
call Addition
call Z_Trans_YSum ;YSum+=(num*SatDatCnt)
call .S_trans_X
call .XSqu ;num^2
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_Y
call YSquSum_Trans_X
call Addition ;YSquSum+=(num^2*SatDatCnt)
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,SatDatCnt(Sat sample data count)
LR_PrepareNTimes::
;;XYSum+=NumX*NumY*SatDataCnt
call .Y_trans_B
call .X_trans_Buf
call Multiplation
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_X
call XYSum_Trans_Y
call Addition
call Z_Trans_XYSum
;;
call .Buf_trans_X
call LR_PrepareXNTimes
;;
call .B_trans_X
call LR_PrepareYNTimes
;;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
;Calling the function to prepare QR operation after data input
;Input:OperandX,OperandY;SatDataCnt
;Output:No
QR_PrepareNTimes::
call .X_trans_B ;x
call .Y_trans_R ;y
call Multiplation
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation ;X*Y*SatDataCnt
call .Z_trans_X
call XYSum_Trans_Y
call Addition
call Z_Trans_XYSum
call .B_trans_X
call QR_PrepareXNTimes
call .B_trans_X
call .XSqu ;X^2
call .Z_trans_Buf ;Buf=X^2
call .Z_trans_X
call .B_trans_Y ;X
call Multiplation ;X*X^2=X^3
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_Y
call XCubeSum_Trans_X ;XcubeSum+=(num^3)*DatCnt
call Addition
call Z_Trans_XCubeSum
call .Buf_trans_X ;X^2
call .XSqu ;X^4
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_Y
call XFourSum_Trans_X
call Addition ;XFourSum+=(X^4)*SatDatCnt
call Z_Trans_XFourSum
call .Buf_trans_X ;Buf=X^2
call .R_trans_Y ;Y
call Multiplation ;(X^2)*Y
call .Z_trans_X
call SatDataCnt_Trans_Y
call Multiplation
call .Z_trans_Y
call XSquYSum_Trans_X
call Addition
call Z_Trans_XSquYSum ;XSquYSum+=(X^2*Y)*SatDatCnt
call .R_trans_X ;y
call QR_PrePareYNTimes
;;;
;;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
SatDataCnt_Trans_Y::
lda #>SignSatDataCnt
sta0 .PXPP
lda #<SignSatDataCnt
sta0 .PXDP
lda #>SignY
sta0 .PYPP
lda #<SignY
sta0 .PYDP
call .CopyData
ret
X_Trans_FractBuf::
lda #>SignX
sta0 .PXPP
lda #<SignX
sta0 .PXDP
lda #>SignSatDataCnt
sta0 .PYPP
lda #<SignSatDataCnt
sta0 .PYDP
call .CopyData
ret
FractBuf_Trans_X::
SatDataCnt_Trans_X::
lda #>SignSatDataCnt
sta0 .PXPP
lda #<SignSatDataCnt
sta0 .PXDP
lda #>SignX
sta0 .PYPP
lda #<SignX
sta0 .PYDP
call .CopyData
ret
X_SatDataCnt_Trans::
lda #>SignSatDataCnt
sta0 .PYPP
lda #<SignSatDataCnt
sta0 .PYDP
lda #>SignX
sta0 .PXPP
lda #<SignX
sta0 .PXDP
call .CopyData
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -