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

📄 postfixvalume.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		inca
		sta0	.Buf2
		br	.StartChang
		
.EndReSetP3STK:
		
		ret		
		
;===========================================
.ChoiceFunc:
		lda	#0h
		sta0	OperandX+7
		lda	#0h
		sta	PP
		lda0	.Buf1
		cmpe	#0b0h
		brz	.DoSimeFunct
		cmpe	#0a1h
		brz	.ExpD
		cmpe	#0D4h
		brz	.FactD
		cmpe	#0C8h
		brz	.ReciXD
		cmpe	#0d1h
		brz	.Pow_3_invyD	;-------------no
		cmpe	#0d2h
		brz	.XCubeD
		cmpe	#0d3h
		brz	.Pow_x_yD
		cmpe	#0d7h
		brz	.Pow_x_invyD
		cmpe	#0c4h
		brz	.SquD
		cmpe	#0c5h
		brz	.XSquD
		cmpe	#0c6h
		brz	.LogD
		cmpe	#0d8h		;-----------no	
		brz	.TenXD
		cmpe	#0c7h
		brz	.LnD
		cmpe	#0d9h
		brz	.ExD
		cmpe	#0b9h
		brz	.SinD
		cmpe	#0e0h
		brz	.AsinD
		cmpe	#0c0h
		brz	.CosD
		cmpe	#0e1h
		brz	.AcosD
		cmpe	#0c1h
		brz	.TanD
		cmpe	#0e2h
		brz	.AtanD
		cmpe	#0e9h
		brz	.SinHD
		cmpe	#0f2h
		brz	.AsinHD
		cmpe	#0f0h
		brz	.CosHD
		cmpe	#0f3h
		brz	.AcosHD
		cmpe	#0f1h
		brz	.TanHD
		cmpe	#0f4h
		brz	.AtanHD
		cmpe	#0beh
		brz	.LR10	
		cmpe	#0bDh
		brz	.LR11
		cmpe	#0a8h
		brz	.DecSignD
		cmpe	#024h
		brz	.Donot
		cmpe	#025h
		brz	.Doneg
		cmpe	#026h
		brz	.TrnsDec
		cmpe	#027h
		brz	.TrnsHex
		cmpe	#028h
		brz	.TrnsBin
		cmpe	#029h
		brz	.TrnsOct		
		br	.EndChoiceFunc	
.FactD:
		call	.Factorial
		call	.Z_trans_X
		lda0	.DPBuf
		deca
		sta0	.DPBuf
		br	.EndChoiceFunc	
.ReciXD:
		call	.ReciX
		call	.Z_trans_X
		lda0	.DPBuf
		deca
		sta0	.DPBuf
		br	.EndChoiceFunc	
.Pow_3_invyD:
		call	.Pow_x_inv3
		call	.Z_trans_X
		br	.EndChoiceFunc	
.XCubeD:
		call	.XCube
		call	.Z_trans_X
		lda0	.DPBuf
		deca
		sta0	.DPBuf
		br	.EndChoiceFunc	
				
.SquD:
		call	.CKNear_1
		call	Squ
		call	.CKNear_1
		call	.Z_trans_X		
		br	.EndChoiceFunc	
.XSquD:
		call	.XSqu 
		call	.Z_trans_X
		lda0	.DPBuf
		deca
		sta0	.DPBuf
		br	.EndChoiceFunc	
.LogD:
		call	.CKNear_1
		call	.Log 
		call	.CKNear_1
		call	.Z_trans_X
		br	.EndChoiceFunc			
.TenXD:
		call	.Pow_10_X
		call	.Z_trans_X
		br	.EndChoiceFunc	
.LnD:
		call	.CKNear_1
		call	Ln
		call	.CKNear_1
		call	.Z_trans_X
		br	.EndChoiceFunc					
.ExD:
		call	Ex
		call	.Z_trans_X
		br	.EndChoiceFunc		
.SinD:		
		
		call	.CheckRrdDegre
		call	.RadCheck
		call	Sin
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AsinD:		
			 
		call	.Asin
		call	.CheckAsinRrdDegre
		call	.Z_trans_X
		br	.EndChoiceFunc		
.CosD:		
		
		call	.CheckRrdDegre
		call	Cos
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AcosD:		
		
		call	.Acos
		call	.CheckAsinRrdDegre
		call	.Z_trans_X
		br	.EndChoiceFunc			
.TanD:		
		
		call	.CheckRrdDegre
		call	.RadCheck
		call	Tan
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AtanD:		
			 
		call	.Atan
		call	.CheckAsinRrdDegre
		call	.Z_trans_X
		br	.EndChoiceFunc			
.SinHD:		
		 
		call	.SinH
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AsinHD:	
		 
		call	.AsinH
		call	.Z_trans_X
		br	.EndChoiceFunc		
.CosHD:		
		 
		call	.CosH
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AcosHD:	
		 
		call	.AcosH
		call	.Z_trans_X
		br	.EndChoiceFunc			
.TanHD:		
		 
		call	.TanH
		call	.Z_trans_X
		br	.EndChoiceFunc	
.AtanHD:	
		 
		call	.AtanH
		call	.Z_trans_X
		br	.EndChoiceFunc			
.ExpD:
		 
		call	.Expp		 
		br	.EndChoiceFunc	
.DecSignD:
		call	.X_trans_Z
		lda0	SignX
		cmpe	#01h
		brz	.DECsign
		lda	#01h
		sta0	SignZ			
		call	.Z_trans_X
		br	.EndChoiceFunc		
.DECsign:	
		lda	#0h
		sta0	SignZ		
		call	.Z_trans_X
		br	.EndChoiceFunc
.TrnsDec:
		call	.ChkInput
		call   CheckDecLimit	
		call	.Z_trans_X
		br	.EndChoiceFunc
.TrnsHex:
		call	.ChkInput
		call   CheckHexLimit
		call	Base_Hex2Dec	
		call	.Z_trans_X
		br	.EndChoiceFunc		
.TrnsBin:
		call	.ChkInput
		call   CheckBinLimit
		call	Base_Bin2Dec		
		call	.Z_trans_X
		br	.EndChoiceFunc		
.TrnsOct:
		call	.ChkInput
		call   CheckOctLimit
		call	Base_Oct2Dec		
		call	.Z_trans_X
		br	.EndChoiceFunc		
		
.DOnot:
		call	LogicNot	
		call	.Z_trans_X	
		br	.EndChoiceFunc		
.DOneg:
		call	LogicNeg
		call	.Z_trans_X		
		br	.EndChoiceFunc		
.LR10:
		 
		call	.X_trans_LRX
		lda	#>DaltaXcnt	
		sta	PP			 		
		lda	#02h
		sta	DaltaXcnt
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brz	.QR_EstimateY
		cmpe	#05h
		brz	.LR_InvEstimateY
		cmpe	#04h
		brz	.LR_PwrEstimateY
		cmpe	#03h
		brz	.LR_ExpEstimateY
		cmpe	#02h
		brz	.LR_LogEstimateY
		cmpe	#01h
		brz	.LR_LinEstimateY
		br	.EndChoiceFunc
		
.QR_EstimateY:		
		call	.X_trans_T
		call	QR_EstimateY		
		br	.EndChoiceFunc
.LR_LinEstimateY:	
		call	.X_trans_Y	
		call	.Y_trans_LRY
		call	LR_EstimateY				
		br	.EndChoiceFunc			
.LR_LogEstimateY:		
		call	.X_trans_Y	
		call	.Y_trans_LRY
		call	LR_LnEstimateY				
		br	.EndChoiceFunc	
.LR_ExpEstimateY:		
		call	.X_trans_Y	
		call	.Y_trans_LRY
		call	LR_ExpEstimateY				
		br	.EndChoiceFunc
.LR_PwrEstimateY:		
		call	.X_trans_Y	
		call	.Y_trans_LRY
		call	LR_PwrEstimateY				
		br	.EndChoiceFunc
.LR_InvEstimateY:		
		call	.X_trans_Y	
		call	.Y_trans_LRY
		call	LR_InvEstimateY				
		br	.EndChoiceFunc						
;-------------------------------------------		
.LR11:
		call	.X_trans_Y
		call	.Y_trans_LRY
		lda	#>DaltaXcnt
		sta	PP		
		lda	#01h
		sta	DaltaXcnt
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brz	.QR_EstimateX
		cmpe	#05h
		brz	.LR_InvEstimateX
		cmpe	#04h
		brz	.LR_PwrEstimateX
		cmpe	#03h
		brz	.LR_ExpEstimateX
		cmpe	#02h
		brz	.LR_LogEstimateX
		cmpe	#01h
		brz	.LR_LinEstimateX
		br	.EndChoiceFunc
		
.QR_EstimateX:		
		call	.X_trans_T
		call	QR_EstimateX1		
		br	.EndChoiceFunc
.LR_LinEstimateX:	
		 
		call	.X_trans_LRX		
		call	LR_EstimateX				
		br	.EndChoiceFunc			
.LR_LogEstimateX:		
		call	.X_trans_LRX
		call	LR_LnEstimateX				
		br	.EndChoiceFunc	
.LR_ExpEstimateX:		
		call	.X_trans_LRX
		call	LR_ExpEstimateX				
		br	.EndChoiceFunc
.LR_PwrEstimateX:		
		call	.X_trans_LRX
		call	LR_PwrEstimateX				
		br	.EndChoiceFunc
.LR_InvEstimateX:		
		call	.X_trans_LRX
		call	LR_InvEstimateX			
		br	.EndChoiceFunc	
 
;---------------------------------------------			
.DoSimeFunct:
		call	.SimeCounter		
		br	.EndChoiceFunc
.SDntime:		
		call	SD_PrepareNTimes		
		br	.ShowSimeX
		
.QRntime:		
		call	QR_PrepareNTimes		
		br	.ShowSimeX
.SynError:
		lda	#02h
		sta0	ErrorFlag	
		br	.EndChoiceFunc								
.EndChoiceFunc:
		
		ret
;-------------------------------------------		
.RadCheck:		
		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#20h
		brnz	.EndRadCheck
		lda	#>Sign_i
		sta	PP
		lda	Sign_i
		sta0	SignX
		sta0	SignZ
.EndRadCheck:		
		lda	#>SignX
		sta	PP
		ret
;-------------------------------------------		
.CheckRrdDegre::		
		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#20h
		brz	.TOrad
		cmpe	#30h
		brnz	.EndCheckRrdDegre
		call	.Z_trans_X
		call	.Gpercent
		call	.Z_trans_X
		br	.EndCheckRrdDegre	
.TOrad:		

		
;-------------------------------------------------------SPECIAL ANGLE						
;;;Input=OperandX
;;;	X->I
;;;	X->Buf
;;;	X%2PI=Q,R-->Buf
;;;	Buf%(pi/4)=Q,R
;;;	If R!=0 ,data not special angle
;;;	else Do special angle
;-------------------------------------------------------	
		call	.X_trans_Buf		
		call	.X_trans_I		 		 				
		lda	#>(PI2_tab)	 	;2*PI =6.2831853071795 
		sta	TableC+1
		lda	#<(PI2_tab)
		sta	TableC 		 
		lda      #0
	        sta     .M_Data_Offset 	
	        call	.GetTabVal		;X%2PI=Q   R->X	       	        
	        call	.Z_trans_T
	        call	.Z_trans_Y	           
	        call	.Buf_trans_X	
	           
	        call	ModCarry	        ;  
	        call	.X_trans_Z		;X<2pi	        
	        call	.Z_trans_Buf
	        
 		call	.T_trans_X		;S=2PI , S/4=90
	        call	.ClrY
		lda	#04h
		sta0	OperandY+6		 
		call	Division
		
	        call	.Z_trans_Y		;Y=PI/4	        
	        call	.Buf_trans_X		;INPUT<2PI 
	        	         
	        call	ModCarry		
	        call	CheckOutData
	        call	.GetDpCountX		;Judge no R
	        lda0	DpCount
	        cmpe	#0h
	        brnz	.NotSpecialAngle
	        lda0	PointZ
	        cmpe	#0h
	        brnz	.NotSpecialAngle
	        lda0	OperandZ+6
	        cmpe	#0h
	        brz	.SetX360
	        cmpe	#01h
	        brz	.SetX90
	        cmpe	#02h
	        brz	.SetX180
	        cmpe	#03h
	        brz	.SetX270
	        cmpe	#04h
	        brz	.SetX360
;;;---------------------------------------------	        
.NotSpecialAngle:	        
		call	.I_trans_X						
		call	.ClrY
		lda	#0eh
		sta0	PointY
		lda	#01h
		sta0	OperandY+6
		call	Subtration
		lda0	SignZ
		cmpe	#01h
		brz	.NoAddOffest
 	
		call	.I_trans_X
		call	.I_trans_Z	
		call	.Degree			
		call	.Z_trans_X
	
		call	.ClrY
		lda	#58h
		sta0	OperandY
		lda	#00h
		sta0	OperandY+1
		lda	#00h
		sta0	OperandY+5
		lda	#03h
		sta0	OperandY+6
		lda	#1bh
		sta0	PointY
		call	Addition
		call	.Z_trans_X
		br	.EndCheckRrdDegre
		
.NoAddOffest:
		call	.I_trans_X
		call	.I_trans_Z
		call	.ClrY	
		call	.Degree			
		call	.Z_trans_X
			
.EndCheckRrdDegre:
		
		lda	#0h
		sta	PP
		ret	
.SetX360:
		call	.ClrX
		lda	#60h
		sta	OperandX+6
		lda	#03h
		sta	OperandX+5
		call	.X_trans_Z		
		br	.EndCheckRrdDegre
.SetX270:		 
		call	.ClrX
		lda	#70h
		sta	OperandX+6
		lda	#02h
		sta	OperandX+5
		call	.X_trans_Z
		br	.EndCheckRrdDegre			
.SetX180:
		call	.ClrX
		lda	#80h
		sta	OperandX+6
		lda	#01h
		sta	OperandX+5
		call	.X_trans_Z
		br	.EndCheckRrdDegre
.SetX90:		 
		call	.ClrX
		lda	#90h
		sta	OperandX+6			
		call	.X_trans_Z
		br	.EndCheckRrdDegre		
;-------------------------------------------						
.CheckAsinRrdDegre::
		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#20h
		brz	.DtoRad
		cmpe	#30h
		brnz	.EndRrdDegre		 
		call	.Z_trans_X
		call	.ClrY
		lda	#09h
		sta0	OperandY+6
		lda	#01h
		sta0	PointY
		lda     #0h
		sta     PP 
		call    Division
		call	.Z_trans_X		
		br	.EndRrdDegre
		
.DtoRad:			 		
		call	.Z_trans_X
		call	.Rad
		br	.EndRrdDegre	
.EndRrdDegre:
		lda	#0h
		sta	PP
		ret						
;===========================================
.SearchError::	 		
		lda	#0h					
		sta0	.INDP				
		sta0	.IFlag
		lda	#0h
		sta0	.Cnter2
		lda0	.FunDP		
		sta0	.Buf3	
		sta	DP
		lda	#02h					
		sta	PP
.33$:		
		lda	i
		cmpe	#0ffh
		brz	.ErrorCK
		cmpe	#0feh
		brz	.ErrorCK
		cmpe	#0eeh
		brz	.ErrorCK
		lda0	.Cnter2
		inca
		sta0	.Cnter2
		incdp
		br	.33$
;-------------------------------------------		
.ErrorCK:	
		lda	#0h
		sta	PP		
		lda0	.INDP
		cmpe	.DataDP	
		brz	.EndGetData
;-------------------------------------------		
.StartCKC: 			
		lda	#.INPP
		sta	PP
		lda0	.INDP
		sta	DP
		lda	i
		sta0	.Buf2
		sta0	.DataBuf+1
		lda0	.IFlag
		cmpe	#0h
		brnz	.GetRightc													
		lda0	.Buf2
		anda	#0f0h						
		cmpe	#0a0h
		brc	.FuncLc
		lda	#01h
		sta0	.IFlag	
		call	.SftRight
		lda0	.DataBuf+1
		sta0	.Buf2							
		br	.EndGetData
.FuncLc:
		lda0	.INDP
		inca
		sta0	.INDP
		lda	#0h
		sta0	.IFlag			
		br	.EndGetData
;-------------------------------------------	
.GetRightc:		
		lda0	.Buf2
		anda	#0fh
		sta0	.Buf2
		cmpe	#0ah
		brc	.FuncRc
		lda	#0h
		sta0	.IFlag
		lda0	.INDP
		inca
		sta0	.INDP
		br	.EndGetData
;-------------------------------------------		
.FuncRc:
		lda	#.INPP
		sta	PP
		lda0	.INDP
		sta	DP
		lda	i
		sta0	.DataBuf+1
		sta0	.Buf2
		call	.SftLeft
		lda0	.DataBuf+1		
		sta0	.Buf2
		incdp
		lda	i
		sta0	.DataBuf+1
		lda	#.INPP
		sta	PP
		lda	DP
		sta0	.INDP
		lda	#01h
		sta0	.IFlag	
		call	.SftRight				
		lda	#0h
		sta	PP
		lda0	.Buf2
		adda	.DataBuf+1
		sta0	.DataBuf+1
		sta0	.Buf2										
		br	.EndGetData
.EndGetData:
		lda	#02h
		sta	PP
		lda0	.FunDP		
		sta	DP
		lda	i
		sta0	.DataBuf		
		cmpe	#0ffh
		brz	.EndCmpe
		cmpe	#0feh
		brz	.EndCmpe
		cmpe	#0feh
		brz	.EndCmpe
		lda	#0h
		sta	PP
		lda0	.DataBuf
		cmpe	.Buf2
		brnz	.RestCnt		
		lda0	.FunDP
		inca
		sta0	.FunDP
		lda0	.Cnter
		inca
		sta0	.Cnter
		lda	#02h
		sta	PP
		incdp
		lda	i
		cmpe	#0ffh
		brz	.EndCmpe
		cmpe	#0feh
		brz	.EndCmpe
		cmpe	#0eeh
		brz	.EndCmpe
		br	.ErrorCK
.RestCnt:		
		lda0	.Buf3
		sta0	.FunDP
		lda	#0h
		sta0	.Cnter
		br	.ErrorCK
.EndCmpe:		
		lda	#0h
		sta	PP
		lda0	.Cnter2
		cmpe	.Cnter
		brnz	 .EndSearch
		lda0	.INDP
		sta0	.SFDP
		lda0	.IFlag		
		sta0	.TFlag
.EndSearch:
		
		ret
;-------------------------------------------
.MemoryToZ::
		lda0	.DataBuf+1
		cmpe	#0a9h
		brz	.M1
		cmpe	#0f9h
		brz	.M2
		cmpe	#0a2h
		brz	.M3
		cmpe	#0e3h
		brz	.M4
		cmpe	#0e4h
		brz	.M5

⌨️ 快捷键说明

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