⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sat.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                        call  Multiplation      
                        call  .Z_trans_X        
                        call  XYSum_Trans_Y     
                        call  Addition          
                        call  Z_Trans_XYSum     
                        call  .B_trans_X
                        call   QR_PrepareX
                        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_Y
                        call  XCubeSum_Trans_X  ;XcubeSum+=num^3
                        call  Addition
                        call  Z_Trans_XCubeSum
                        call  .Buf_trans_X      ;X^2
                        call  .XSqu             ;X^4  
                        call  .Z_trans_Y
                        call  XFourSum_Trans_X  
                        call  Addition          ;XFourSum+=X^4
                        call  Z_Trans_XFourSum
                        call  .Buf_trans_X      ;Buf=X^2  
                        call  .R_trans_Y        ;Y 
                        call   Multiplation     ;(X^2)*Y  
                        call   .Z_trans_Y
                        call   XSquYSum_Trans_X
                        call   Addition
                        call   Z_Trans_XSquYSum ;XSquYSum+=(X^2*Y)
                        call   .R_trans_X       ;y 
                        call   QR_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
;Private functions for calc Q.R coefficients (A,B,C)
;Input:No
;Output:OperandZ                        
;Output=XSum*YSum-n*XYSum                        
QR_CalcXYDiff:
                        call   XSum_trans_Y
                        call   .Y_trans_X
                        call   YSum_trans_Y
                        call   Multiplation      ;XSum*YSum
                        call   .Z_trans_Buf      ;Buf=XSum*YSum
                        call   XCnt_Trans_Y
                        call   .Y_trans_X
                        call   XYSum_Trans_Y     ;n*XYSum
                        call   Multiplation
                        call   .Z_trans_Y
                        call   .Buf_trans_X
                        call   Subtration        ;XSum*YSum-n*XYSum
                        ret                        
;Input:No
;Output:OperandZ                        
;output=XSquSum*XSum-n*XCubeSum
QR_CalcXCubeDiff:
                        call  XSum_trans_Y
                        call  XSquSum_Trans_X
                        call  Multiplation      ;XSquSum*XSum 
                        call  .Z_trans_Buf      ;Buf=XSquSum*XSum 
                        call  XCubeSum_Trans_X
                        call  XCnt_Trans_Y
                        call  Multiplation      ;n*XCubeSum
                        call  .Z_trans_Y      
                        call  .Buf_trans_X
                        call  Subtration        ;XSquSum*XSum-n*XCubeSum
                        ret
;Input:No
;Output:OperandZ                        
;Output:XSum^2-n*XsquSum                                                
QR_CalcXSquDiff:
                        call  XSum_trans_Y
                        call  .Y_trans_X
                        call  Multiplation
                        call  .Z_trans_Buf      ;Buf=XSum^2
                        call  XSquSum_Trans_X   ;XSum^2
                        call  XCnt_Trans_Y
                        call  Multiplation      ;n*XSquSum
                        call  .Z_trans_Y
                        call  .Buf_trans_X    
                        call  Subtration        ;XSum^2-n*XsquSum                                                
                        ret                        
;Input:No
;Output:OperandZ                        
;Output:YSum*XSquSum-n*XSquYSum
QR_CalcXSquYDiff:
                        call   YSum_Trans_Y
                        call   XSquSum_Trans_X
                        call   Multiplation  ;YSum*XSquSum
                        call   .Z_trans_Buf
                        call   XSquYSum_Trans_X
                        call   XCnt_Trans_Y      
                        call   Multiplation  ;n*XSquYSum
                        call   .Z_trans_Y
                        call   .Buf_trans_X
                        call   Subtration    ;YSum*XSquSum-n*XSquYSum
                        ret               
;Input:No
;Output:OperandZ                        
;Output:[XSquSum^2-n*XFourSum]
                        
QR_CalcXFourDiff:
                        call   XSquSum_Trans_X
                        call   .XSqu
                        call   .Z_trans_Buf    ;Buf=XSquSum^2
                        call   XCnt_Trans_Y      
                        call   XFourSum_Trans_X
                        call   Multiplation    ;n*XFourSum
                        call   .Z_trans_Y
                        call   .Buf_trans_X
                        call   Subtration      ;XSquSum^2-n*XFourSum
                        ret                        
;X=4                        
Put_4_to_OperandX:
                        call	.ClrX
		        lda	#04h
	   	        sta0	OperandX+6
	   	        lda	#0h
	   	        sta0	PointX
	   	        sta0	SignX
                        ret                        
;X=2                        
Put_2_to_OperandX:
                        call	.ClrX
		        lda	#02h
	   	        sta0	OperandX+6
	   	        lda	#0h
	   	        sta0	PointX
	   	        sta0	SignX
                        ret                                                
;Public functions                        
;Compute Coff C of Q.R                        
;;Input:No
;Output:OperandZ
;Using S,B,Buf
;[(YSum*XSum-n*XYSum)*(XSum*XSquSum-n*XCubeSum)-(YSum*XSquSum-n*XSquYSum)*(XSum^2-n*XSquSum)]/[(XSquSum*XSum-n*XCubeSum)^2-(XSquSum^2-n*XFourSum)(XSum^2-nXSquSum)]
QR_CalcC::
                        call  QR_CalcXYDiff
                        call  .Z_trans_S
                        call  QR_CalcXCubeDiff
                        call  .Z_trans_X
                        call  .S_trans_Y
                        call  Multiplation
                        call  .Z_trans_S   ;S=(YSum*XSum-n*XYSum)*(XSum*XSquSum-n*XCubeSum)
                        call  QR_CalcXSquYDiff
                        call  .Z_trans_B
                        call  QR_CalcXSquDiff
                        call  .B_trans_X
                        call  .Z_trans_Y
                        call  Multiplation
                        call  .Z_trans_Y
                        call  .S_trans_X   
                        call  Subtration
                        call  .Z_trans_S    ; Reserved computed value
;(XSum^2-nXSquSum)                        
                        call  QR_CalcXSquDiff
                        call  .Z_trans_B
;(XSquSum^2-n*XFourSum)                        
                        call   QR_CalcXFourDiff          
                        call  .Z_trans_Y
                        call  .B_trans_X
                        call  Multiplation
                        call   .Z_trans_B
;(XSquSum*XSum-n*XCubeSum)^2                        
                        call  QR_CalcXCubeDiff
                        call  .Z_trans_X
                        call  .XSqu
;[(XSquSum*XSum-n*XCubeSum)^2-(XSquSum^2-n*XFourSum)(XSum^2-nXSquSum)]
                        call  .Z_trans_X
                        call  .B_trans_Y
                        call  Subtration
                        call  .Z_Trans_Y
                        call  .S_trans_X
                        call  Division 
                        ret
;Compute Coff B of Q.R                                                
;Input:No
;Output:OperandZ
;[(YSum*XSum-n*XYSum)-(XSquSum*XSum-n*XCubeSum)*C]/[XSum^2-n*XSquSum]
QR_CalcB::
                        call  QR_CalcXYDiff
                        call  .Z_trans_R
                        call  QR_CalcC
                        call  .Z_Trans_S     ; S= coeff C
                        call  QR_CalcXCubeDiff
                        call  .Z_trans_Y
                        call  .S_trans_X
                        call  Multiplation
                        call  .Z_trans_Y
                        call  .R_trans_X
                        call  Subtration
                        call  .Z_Trans_R      ; reserve computed value
                        call  QR_CalcXSquDiff
                        call  .Z_trans_Y
                        call  .R_trans_X
                        call  Division
                        ret
;Input:No
;Output:OperandZ
;Compute Coff A of Q.R                        
;A=YSum-(A*XSquSum+B*XSum)
QR_CalcA::
                        call  QR_CalcB       ;S=Coff C
                        call  .Z_Trans_B     ;B=B
                        call  .Z_trans_X
                        call  XSum_Trans_Y
                        call  Multiplation
                        call  .Z_trans_R     ;Z=R=XSum*Coff B
                        call   XSquSum_Trans_X
                        call  .S_trans_Y     ;C -> Y
                        call  Multiplation   ;Z=XSquSum*Coff C  
                        call  .Z_trans_X
                        call  .R_trans_Y
                        call  Addition       
                        call  YSum_Trans_Y
                        call  .Y_trans_X  
                        call  .Z_trans_Y  ;XSquSum*Coff C+XSum* Coff B
                        call  Subtration  ;YSum-(XSquSum*C+XSum*B)
                        call  .Z_Trans_X
                        call  XCnt_Trans_Y
                        call  Division
                        ret

;Input:OperandX (X)
;Output:OperandZ
;S=Coff C
;B=Coff B
;Y=C*(X^2)+B*X+A
QR_EstimateY::
                        call  X_Trans_Tmp
                        call  QR_CalCA
                        call  .Z_trans_Buf  ;Buf=A         
                        call  .B_trans_Y
                        call  Tmp_Trans_X
                        call  Multiplation  ;B*X
                        call  .Z_trans_X
                        call  .Buf_trans_Y
                        call  Addition
                        call  .Z_trans_Buf ;Buf=B*X+A
                        call  Tmp_Trans_X
                        call  .XSqu
                        call  .Z_trans_Y
                        call  .S_trans_X
                        call  Multiplation ;C*(X^2)
                        call  .Z_Trans_Y
                        call  .Buf_trans_X
                        call   Addition ;C*(X^2)+B*X+A
                        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
;[sqrt([B^2+4*(y-A)*C]-B]/(2C)
QR_EstimateX1::
                        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   ;Buf=4*(y-A)*C 
                        call  .B_trans_X
                        call  .XSqu          ;B^2
                        call  .Z_trans_X
                        call  .Buf_trans_Y

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -