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

📄 postfixvalume.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		cmpe	#0e5h
		brz	.M6
		cmpe	#0e6h
		brz	.M7
		cmpe	#0e7h
		brz	.M8
		cmpe	#0e8h
		brz	.M9
		cmpe	#0f5h
		brz	.M10
		cmpe	#0f6h
		brz	.M11
		cmpe	#0f7h
		brz	.M12
		cmpe	#0aah
		brz	.M13
		cmpe	#0bbh
		brz	.M14
		cmpe	#0ceh
		brz	.M15
;-LR		
		cmpe	#0fah		;A
		brz	.LR1
		cmpe	#0fbh		;B
		brz	.LR2
		cmpe	#0cfh		;C
		brz	.LR3		
		cmpe	#0cbh		
		brz	.LR4
		cmpe	#0fdh
		brz	.LR5
		cmpe	#0bah
		brz	.LR6
		cmpe	#0feh
		brz	.LR7
		cmpe	#0bch
		brz	.LR8
		cmpe	#0cah
		brz	.LR9
		cmpe	#0bdh
		brz	.LR10	
		cmpe	#0beh
		brz	.LR11
		cmpe	#0fch
		brz	.LR12
		ret
.M1:
		call	.Random
		ret
.M2:	
		lda	#>(PI_tab1)	 	 
		sta	TableC+1
		lda	#<(PI_tab1)
		sta	TableC 		 
		lda      #0
	        sta     .M_Data_Offset 	
	        call	.GetTabVal		 	
		ret
.M3:
		call	.I_trans_X
		call	.X_trans_Z
		ret				
.M4:
		call	.A_TO_Z
		ret						
.M5:
		call	.B_TO_Z
		ret			
.M6:
		call	.C_TO_Z
		ret
.M7:
		call	.D_TO_Z
		ret						
.M8:
		call	.E_TO_Z
		ret			
.M9:
		call	.F_TO_Z
		ret
.M10:
		call	.X_TO_Z
		ret
.M11:
		call	.Y_TO_Z
		ret	
.M12:
		call	.M_TO_Z
		ret
;-------------------------------------------
;M13 is Degree mode			
;degree of Degree =X*1
;degree of Rad=X*pi/180
;degree of Gra=X/0.9
;-------------------------------------------			
.M13:
		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#10h
		brz	.Degree1
		cmpe	#30h
		brz	.EndM13Gra
		call	.PiDivD180
		call	.Z_trans_X
		call	.ReciX
		ret	
.EndM13Gra:
		call	.GRA0POINT9
		call	.Z_trans_X
		call	.ReciX		
		ret	
;-------------------------------------------
;M14 is Rad mode			
;rad of Degree =X*180/pi
;rad of Rad=X*1
;rad of Gra=X*180/pi/0.9
;-------------------------------------------					
.M14:

		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#20h
		brz	.Degree1
		cmpe	#30h
		brz	.EndM14Gra	
		call	.PiDivD180		
		ret
.EndM14Gra:
		call	.PiDivD180					
		call	.Z_trans_X
		call	.GRA0POINT9
		call	.Z_trans_Y
		call    Division	
		ret	
;-------------------------------------------
;M15 is Gra mode			
;gra of Degree =X*0.9
;gra of Rad=X*0.9*pi/180
;gra of Gra=X*1 
;-------------------------------------------				
.M15:
		lda	#01h
		sta	PP
		lda	StateFlag
		anda	#30h
		cmpe	#30h
		brz	.Degree1
		cmpe	#20h
		brz	.RadM15			
		call	.GRA0POINT9		
		ret					
.RadM15:					
		call	.PiDivD180					
		call	.Z_trans_Y
		call	.GRA0POINT9
		call	.Z_trans_X
		call    Division
		ret
		
.LR1:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brnz	.OtherA
		call	QR_CalcA
		ret
.OtherA:		
		call	LR_CalcA		
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#03h
		brz	.Z_to_expA
		cmpe	#04h
		brz	.Z_to_expA
		ret
.Z_to_expA:
		call	.Z_trans_X
		lda	#0h
		sta	PP
		call	Ex
		ret		
.LR2:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brnz	.OtherB
		call	QR_CalcB
		ret
.OtherB:		
		call	LR_CalcB		
		ret				
.LR3:
		call	LR_CalcR		
		ret		
.LR4:
		
		call	LR_CalcXAvg	
		ret	
.LR5:
		
		call	LR_CalcYAvg		
		ret
.LR6:
		call	LR_CalcXPSD		
		ret		
.LR7:
		call	LR_CalcYPSD		
		ret		
.LR8:
		call	LR_CalcXSSD		
		ret
.LR9:
		call	LR_CalcYSSD		
		ret	
.LR12:
		
		call	QR_CalcC
		ret
																													
 
;-------------------------------------------		
.PiDivD180:
		call	.PI
		call	.Z_trans_Y	
		call	.ClrX
		lda	#0h
		sta	PP		
		lda	#90h
		sta0	OperandX+6
		call    Division		
		ret

.GRA0POINT9:
		call	.ClrZ
		lda	#09h
		sta0	OperandZ+6
		lda	#01h
		sta0	PointZ
		ret
.Degree1:						
		call	.ClrZ
		lda	#01h
		sta0	OperandZ+6
		ret			
		
;-------------------------------------------		
.CalcDMS:
		;lda	#01h
		;sta	PP
		;lda 	.SetFlag
		;anda	#10h
		;brnz	.NoSetDms		
		;ora	#04h
		;sta	.SetFlag
.NoSetDms:		
		call	.R_trans_X
		lda0	.DataBuf
		cmpe	#0abh
		brz	.Dodegrees
		;cmpe	#0aah
		;brz	.Dodegrees
		cmpe	#0ach
		brz	.Domins
		cmpe	#0adh
		brz	.Dosecs
		br	.EndCalcVal
.Dodegrees:		
		call	.X_trans_Z	
		br 	.MarkDP1
		
.Domins:
		
		call	.ClrY
		lda	#60h
		sta0	OperandY+6
		lda     #0h
		sta     PP 
		call    Division
		call	.Z_trans_X
		br 	.MarkDP1
.Dosecs:
		call	.ClrY
		lda	#36h
		sta0	OperandY+5
		lda     #0h
		sta     PP 
		call    Division
		call	.Z_trans_X
		br 	.MarkDP1

;-------------------------------------------
.PointToDMS::
		 
		call	.ClearInt		
		call    CheckOutData 
		lda0	OperandZ+6
		cmpe	#0h
		brnz	.NotModify	    
		call	.I_trans_Z
		call	.ClrY
		call	.Y_trans_S
		call	.Y_trans_B	
		br	.EndDMS

.NotModify:				          
		call	.Mul60		
		call	.Z_trans_S
		call	.DelPoint
		call	.Z_trans_Buf		;M 
		call	.S_trans_Z
		call	.ClearInt
		call	.Mul60		 
		call	.CheckS		 				 	
		call	.S_trans_X		 
		call	.ClrY
		lda	#60h
		sta0	OperandY+6
		call	Mod
		call	.X_trans_S
		call	.Z_trans_X
		call	.Buf_trans_Y
		lda	#0h
		sta0	SignX
		sta0	SignY
		call	Addition
		call	.Z_trans_X
		call	.ClrY
		lda	#60h
		sta0	OperandY+6
		call	Mod
		call	.X_trans_B
		call	.GetDpCount
		lda0	DpCount
		cmpe	#0h
		brz	.EndDMS
		call	.I_trans_Z
		call	.DelPoint
		call	.Z_add_One
		ret
	 
.EndDMS:	
		call	.I_trans_Z			
		ret
;--------------
.Mul60:		
		call	.Z_trans_X
		call	.ClrY
		lda	#60h
		sta0	OperandY+6
		lda	#0h
		sta	PP
		call	Multiplation		
		ret
;-------------- 
.Z_add_One:		
		call	.Z_trans_Y		
		call	.Put_1_to_OperandX
		lda	PointY
		sta	PointX
		lda	SignY
		sta	SignX
		call	Addition
		lda	#0h
		sta	OperandZ+7 
		ret
;--------------		
.CheckS:			 
		lda0	PointZ
		cmpe	#03h
		brnc	.ShowS		
		cmpe	#04h
		brnc	.CkZcarry
		lda0	PointZ
		suba	#03h
		sta0	PointZ
		call	GetInt
		lda	#0h		
		sta0	OperandZ+7
		call	CheckOutData
		lda	#03h
		sta0	PointZ
.CkZcarry:
		lda0	OperandZ+6
		anda	#0fh
		cmpe	#05h
		brnc	.NoCarryZ
		lda0	OperandZ+6
		anda	#0f0h
		sta0	OperandZ+6
		call	.Z_trans_X
		call	.ClrY
		lda	#10h
		sta0	OperandY+6
		lda	#0h
		sta0	SignX
		lda0	PointX
		sta0	PointY
		call	Addition
		br	.ShowS
.NoCarryZ:
		lda0	OperandZ+6
		anda	#0f0h
		sta0	OperandZ+6		
.ShowS:		
		lda	#0h
		sta0	OperandZ+7
		call	CheckOutData				
		call	.Z_trans_S		
		ret										
;-------------------------------------------
.ChkInput::
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#08h
		brz	.EndInput		 
.ChangInput:				
		lda0	.Buf1
		cmpe	#26h
		brz	.ChkDec
		cmpe	#27h
		brz	.ChkHex
		cmpe	#28h
		brz	.ChkBin
		cmpe	#29h
		brz	.ChkOct
		br	.EndInput
.ChkDec:			
		call	.CalcDataCnt
		call	.DecDataChk
		lda0	PointX
		cmpe	#0bh
		brc	.ErrorSyn
		br	.EndInput
.ChkHex:			
		call	.CalcDataCnt
		call	.DecDataChk
		lda0	PointX
		cmpe	#09h
		brc	.ErrorSyn
		br	.EndInput		
.ChkOct:			
		call	.CalcDataCnt
		call	.DecDataChk
		lda0	PointX
		cmpe	#0bh
		brc	.ErrorSyn
		br	.EndInput		
.ChkBin:			
		call	.CalcDataCnt
		call	.DecDataChk
		lda0	PointX
		cmpe	#0bh
		brc	.ErrorSyn
		br	.EndInput			
.ErrorSyn:
		lda	#02h
		sta0	ErrorFlag
.EndInput:		
		
		ret
;-------------------------------------------
.CalcDataCnt:
		lda	#0eh
		sta0	PointX
		lda	#0h
		sta0	.Counter
		lda	#<OperandX
		sta	DP
.CalcCnt:		
		lda0	.Counter
		cmpe	#07h
		brz	.EndCalc
		lda	#>OperandX
		sta	PP
		lda	i		
		cmpe	#0h
		brz	.Dec2OpXCnt
		anda	#0f0h
		brz	.Dec1OpXCnt
		br	.EndCalc
.IncCnt:	
		incdp	
		lda0	.Counter
		inca
		sta0	.Counter
		br	.CalcCnt					
.Dec2OpXCnt:
		lda0	PointX
		suba	#02h
		sta0	PointX
		br	.IncCnt	
.Dec1OpXCnt:
		lda0	PointX
		deca
		sta0	PointX	
.EndCalc:
		ret	
;-------------------------------------------
.DecDataChk:
		lda	#0h
		sta0	.Counter
		lda 	#<OperandX
		sta	DP 
		lda0	.Buf1
		cmpe	#26h
		brz	.LimitDec
		cmpe	#27h
		brz	.EndDecChk
		cmpe	#28h
		brz	.LimitBin
		cmpe	#29h
		brz	.LimitOct
		br	.ErrorData
.LimitDec:
		lda	#0ah
		sta0	.Buf2
		lda 	#0a0h
		sta0	.Buf3
		br	.StartDecChk
.LimitOct:
		lda	#08h
		sta0	.Buf2
		lda 	#80h
		sta0	.Buf3
		br	.StartDecChk
.Limitbin:
		lda	#02h
		sta0	.Buf2
		lda 	#20h
		sta0	.Buf3
		br	.StartDecChk
			
.StartDecChk:	
		lda	#0h
		sta	PP	
		lda0	.Counter
		cmpe	#07h
		brz	.EndDecChk
		lda	i
		anda	#0fh
		cmpe	.Buf2
		brc	.ErrorData
		lda	i
		anda	#0f0h
		cmpe	.Buf3
		brc	.ErrorData
		Incdp
		lda0	.Counter
		inca
		sta0	.Counter
		br	.StartDecChk
.ErrorData:
		lda	#02h
		sta0	ErrorFlag		
.EndDecChk:
		ret
;-------------------------------------------
.BaseModeChk::
		lda	#>BasenFlag
		sta	PP
		lda	BasenFlag
		anda	#0f0h
		cmpe	#80h
		brnz	.Ckhex
		lda	#26h
		sta0	.DataBuf+1
		br	.EndBaseModeChk
.Ckhex:
		cmpe	#40h
		brnz	.Ckbin
		lda	#27h
		sta0	.DataBuf+1
		br	.EndBaseModeChk	
.Ckbin:
		cmpe	#20h
		brnz	.Ckoct
		lda	#28h
		sta0	.DataBuf+1
		br	.EndBaseModeChk	
.Ckoct:
		cmpe	#10h
		brnz	.Ckhex
		lda	#29h
		sta0	.DataBuf+1
.EndBaseModeChk:
		ret
;-------------------------------------------
.NBase2_DEC::
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#08h
		brz	.NotBaseNmode
		call	.Z_trans_X
		lda0	.Buf1
		cmpe	#26h
		brz	.EndNBaseDEC
		cmpe	#27h
		brz	.HexToDec
		cmpe	#28h
		brz	.BinToDec
		cmpe	#29h
		brz	.OctToDec
		br	.EndNBaseDEC
.HexToDec:		
		call	Base_Hex2Dec
		br	.EndNBaseDEC
.BinToDec:		
		call	Base_Bin2Dec
		br	.EndNBaseDEC 
.OctToDec:		
		call	Base_Oct2Dec
		br	.EndNBaseDEC 
.EndNBaseDEC:
		call	.X_trans_Z
.NotBaseNmode:		
		ret	
;-------------------------------------------
.SimeCounter::
		lda0	.KeyPos
		cmpe	#0a3h		
		brz	.SynError
		cmpe	#77h		
		brz	.SynError
		call	.X_trans_Z
		call	.DelPoint
		lda	#0h
		sta0	OperandZ+7
		call	CheckOutData		
		lda0	PointZ
		cmpe	#0h
		brnz	.InpErr		
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		cmpe	#0b0h
		brz	.DoLRSimeCnt
		call	.ClrY
		lda	#01h
		sta0	OperandY+6
		call	Subtration
		call	.Z_trans_X
		
		
.DoLRSimeCnt:	
		lda0	.KeyPos
		cmpe	#0dfh		;IF Key is CL cntX chang sign
		brnz	.DoLRCnt
		lda0	SignX
		cmpe	#01h
		brz	.DoLRCnt		
		lda	#01h
		sta0	SignX
.DoLRCnt:				
		call	X_SatDataCnt_Trans
		call	.LRX_trans_X
		call	.LRY_trans_Y		
		lda	#>stateFlag
		sta	PP
		lda	StateFlag
		anda	#40h
		brnz	.SDntime
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brz	.QRntime
		cmpe	#02h
		brz	.TransLog
		cmpe	#03h
		brz	.TransExp
		cmpe	#04h
		brz	.TransPwr
		cmpe	#05h
		brz	.TransInv
.LR_NTimes:		
		call	LR_PrepareNTimes
.ShowSimeX:		
		call	.LRX_trans_X
		call	.X_trans_I
		call	.I_trans_Z
		br	.EndSimeCounter
.TransLog:		
		call	.X_trans_I
		call	.Y_trans_B		
		call	Ln	
		call	.Z_trans_X
		call	.B_trans_Y
		br	.LR_NTimes
.TransExp:		
		call	.X_trans_I		
		call	.Y_trans_X
		call	Ln	
		call	.Z_trans_Y
		call	.I_trans_X
		br	.LR_NTimes
.TransPwr:		
		call	.X_trans_I
		call	.Y_trans_B	
		call	Ln	
		call	.Z_trans_S			
		call	.B_trans_X
		call	Ln	
		call	.Z_trans_Y		
		call	.S_trans_X
		br	.LR_NTimes
.TransInv:	
		call	.X_trans_I
		call	.Y_trans_B	
		call	.ReciX	
		call	.Z_trans_X
		call	.B_trans_Y
		br	.LR_NTimes	
.InpErr:
		lda	#02h
		sta0	ErrorFlag
.EndSimeCounter:				
		ret	
		
;-------------------------------------------
.ChkOverExp50:
		lda	#0h
		sta0	ErrorFlag
		call	.ClrY
		lda	#01h
		sta0	OperandY+6
		lda	#0ceh
		sta0	PointY
		call	Subtration
		lda0	SignZ
		cmpe	#0h
		brnz	.EndCkExp50
		lda	#01h
		sta0	ErrorFlag
.EndCkExp50:
		ret		
		 							 																			

⌨️ 快捷键说明

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