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

📄 sat.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                        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 + -