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

📄 postfix.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	Temp2
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#01h
		brz	.SynErr
		cmpe	#02h
		brz	.SynErr
		cmpe	#05h		;CNR
		brz	.Sign
		cmpe	#06h		;05h
		brz	.Sign			 
		cmpe	#09h
		brz	.Sign
		cmpe	#0ah
		brz	.PushStack	;.SynErr;	.Sign
		cmpe	#0bh
		brz	.Sign
		cmpe	#0ch
		brz	.Sign
		br	.IN2PS
;-------------------------------------------		
.LeftC:		
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.DoLCmode
		lda0	.INDP
		cmpe	#03h
		brnz	.DoLCmode
		br 	.LC2Stack
.DoLCmode:
		lda0	.FractTrsCnt
		inca
		sta0	.FractTrsCnt
		lda0	.DmsCount
		cmpe	#0h
		brz	.LCNoDms
		lda0	.Buf1
		cmpe	#.Degree
		brz	.LCNoDms
		cmpe	#.Minute
		brz	.LCNoDms
		cmpe	#.Second
		brz	.LCNoDms
		cmpe	#0aeh
		brz	.LCNoDms
		br	.SynErr
.LCNoDms:		
		lda	#0h 
		sta0	.PointFlag
		sta0	.DmsCount
		;sta0	.FractCount
		lda0	.INDP
		cmpe	#01h
		brz	.LC2Stack
		lda0	.Buf1		
		cmpe	#.Negative
		brz	.PushNegative
		cmpe	#.Dec
		brz	.PushNegative	;.PushDec
		cmpe	#0dfh		;fract add
		brz	.LC2Stack
		cmpe	#0deh		;fract div	
		brz	.LC2Stack	;.PushStack
		cmpe	#0aeh		;.dmsADD
		brz	.LCDms
		cmpe	#.Negative
		brz	.LC2Stack
		cmpe	#.LC
		brz	.LC2Stack
		cmpe	#.RC
		brz	.LCAddMul
		cmpe	#.Comma
		brz	.LC2Stack
		cmpe	#0b0h		;-----
		brz	.LC2Stack
		cmpe	#.Point		;.
		brz	.LCAddMulCls
		lda0	.DataBuf
		sta0	Temp2
		lda0	.Buf1
		sta0	.DataBuf+1
		sta0	.DataBuf
		call	.CheckPari
		lda0	Temp2
		sta0	.DataBuf
		lda0	.AfterPari		 
		cmpe	#0h
		brz	.LC2Stack
		cmpe	#01h
		brz	.LCAddMulCls
		cmpe	#02h
		brz	.LCAddMulCls
		cmpe	#03h
		brz	.LC2Stack
		cmpe	#04h
		brz	.LC2Stack
		cmpe	#05h		;CNR
		brz	.LC2Stack
		cmpe	#06h		;05h
		brz	.LC2Stack
		cmpe	#07h		;06h
		brz	.LCAddMulCls
		cmpe	#0ah	 
		brz	.LCAddMulCls
		cmpe	#09h
		brz	.LC2Stack
		cmpe	#0bh
		brz	.LC2Stack
		cmpe	#0ch
		brz	.LC2Stack		
		br	.AddMulCls
;.PushDec:
;		lda0	.DecFlag
;		anda	#01h
;		cmpe	#0h
;		brz	.LC2Stack
.PushNegative:	
		lda0	.DecFlag
		anda	#01h
		cmpe	#0h
		brz	.LC2Stack
		lda	#0h
		sta0	.DecFlag		;0304
		lda	#.Negative		
		sta0	.DataBuf
		call	.StoStack	;.PushData
		lda	#.LC
		sta0	.DataBuf
		call	.StoStack
		lda	#.LC
		sta0	.Buf1
		br	.IN2PS
		;lda	#0h
		;sta0	.DecFlag		;0304
		;call	.StoStack
		;lda0	.DataBuf
		;sta0	.Buf1		
		;lda	#.Negative		
		;sta0	.DataBuf
		;call	.PushData
		;lda	#.LC
		;sta0	.DataBuf
		;br	.IN2PS
.LCDms:
		lda	#0h
		sta0	.DmsCount
		br	.LCAddMul
;-------------------------------------------			
.RightC:
		lda0	.FractTrsCnt
		deca
		sta0	.FractTrsCnt
		lda	#0h
		sta0	.CommaFlag
		sta0	.PointFlag
		;sta0	.FractCount
		sta0	.DmsCount
		lda0	.DataBuf
		sta0	Temp2
		call	.ClosEndPS
		call	.CkRightC
		lda0	.AfterPari
		sta0	.BeforePari
		lda0	Temp2
		sta0	.Buf1
		br	.IN2PS
		

			
;-------------------------------------------		
.MemoryData:
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.NormalMem
		lda0	.INDP
		cmpe	#03h
		brz	.StoInPosfix
.NormalMem:						
		lda0	.INDP
		cmpe	#01h
		brz	.StoInPosfix
		lda0	.Buf1
		sta0	.DataBuf+1
		cmpe	#.RC
		brz	.MemAddMulCls
		cmpe	#.Negative
		brz	.StoInPosfix
		cmpe	#.Comma
		brz	.StoInPosfix 
		cmpe	#0b0h		;----
		brz	.StoInPosfix 
		lda0	.DataBuf
		sta0	Temp2
		lda0	.DataBuf+1
		sta0	.DataBuf
		call	.CheckPari
		call	.CheckMem
		lda0	Temp2 
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#01h
		brz	.MemAddMulCls
		cmpe	#02h
		brz	.MemAddMulCls
		cmpe	#03h
		brz	.StoInPosfix
		cmpe	#04h
		brz	.StoInPosfix
		cmpe	#05h
		brz	.StoInPosfix
		cmpe	#06h		;05h
		brz	.StoInPosfix
		cmpe	#07h		;06
		brz	.StoInPosfix	;.MemAddMulCls
		cmpe	#08h
		brz	.StoInPosfix
		cmpe	#09h
		brz	.StoInPosfix
		cmpe	#0bh
		brz	.StoInPosfix
		cmpe	#0ch
		brz	.StoInPosfix		 
		cmpe	#0ah
		brz	.CKFuncOrdms	;.MemAddMulCls	;.StoInPosfix		 
		cmpe	#0h
		brz	.StoInPosfix
		lda0	Temp2
		sta0	.Buf1
		lda	#01h
		sta0	.BeforePari
		br	.IN2PS
.CKFuncOrdms:
		lda0	.DmsCount
		cmpe	#0h
		brz	.MemAddMulCls
		br	.StoInPosfix	
.FuncCheck:
		lda	#01h
		sta	PP
		lda	#01h
		sta	.FunctFlag
		lda	#0h
		sta0	.PointFlag
		sta0	.DmsCount		 		 
		lda0	.DataBuf
		sta0	Temp2
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	Temp2
		sta0	.DataBuf
		lda0	.AfterPari
		sta0	.BeforePari
		lda0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.AfterPari
		cmpe	#05h
		brz	.CheckPari9
		cmpe	#06h		;05
		brz	.CheckPari5
		cmpe	#09h
		brz	.CheckPari9
		cmpe	#0ah
		brz	.CheckParia
		cmpe	#0bh
		brz	.CheckParib
		cmpe	#0ch
		brz	.CheckParib		
		br	.IN2PS
.CheckPari5:	
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.DOPari5
		lda0	.INDP
		cmpe	#03h
		brnz	.DOPari5
		br	.PushTOStack
.DOPari5:					
		lda0	.INDP
		cmpe	#01h
		brz	.PushTOStack		
		lda0	.Buf1
		cmpe	#.Negative		
		brz	.Chkckdecflag	;.PushStack
		cmpe	#.LC
		brz	.LC2Stack	;	.PushStack		
		cmpe	#.Comma		
		brz	.PushStack
		cmpe	#0aeh		;add
		brz	.AddMulCls
		cmpe	#0b0h
		brz	.PushStack		 
		cmpe	#.Degree
		brz	.ClrDmsaddmul
		cmpe	#.Minute
		brz	.ClrDmsaddmul
		cmpe	#.Second
		brz	.ClrDmsaddmul
		lda0	.BeforePari
		cmpe	#0h
		brz	.AddMul
		cmpe	#01h
		brz	.AddMulCls
		cmpe	#02h
		brz	.AddMulCls
		cmpe	#03h
		brz	.Chkckdecflag
		cmpe	#04h
		brz	.Chkckdecflag 
		cmpe	#06h		;05h
		brz	.PushTOStack
		cmpe	#07h		;06
		brz	.PushStack	;.AddMulCls
		cmpe	#08h		;06
		brz	.PushStack	;.AddMulCls
		cmpe	#0ah
		brz	.AddMulCls 
		cmpe	#09h
		brz	.LC2Stack;.PushStack 
		cmpe	#0ch
		brz	.PushStack
		cmpe	#0bh
		brz	.PushTOStack;.PushStack		  			
		cmpe	#0h
		brz	.PushStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
.Chkckdecflag:
		lda0	.DecFlag
		anda	#01h
		brz	.PushStack
		lda	#0h
		sta0	.DecFlag
		lda0	.DataBuf
		sta0	Temp3
		lda	#.Negative		
		sta0	.DataBuf
		call	.StoStack	;.PushData
		lda0	Temp3
		sta0	.DataBuf
		br	.PushTOStack	
.CKdms5:
		lda0	.DmsCount
		cmpe	#0h
		brnz	.SynErr	
		br	.AddMulCls
.CKdms9:
		lda0	.DmsCount
		cmpe	#0h
		brnz	.SynErr	
		br	.PushStackCLS				
.CheckParia:
		lda0	.Buf1
		cmpe	#.Degree
		brz	.ClrDmsPushStack	;.ClrDmsaddmul
		cmpe	#.Minute
		brz	.ClrDmsPushStack	;.ClrDmsaddmul
		cmpe	#.Second
		brz	.ClrDmsPushStack	;.ClrDmsaddmul
		lda0	.BeforePari
		cmpe	#0h
		brz	.PushStack
		cmpe	#01h
		brz	.PushStack
		cmpe	#02h
		brz	.PushStack
		cmpe	#06h		;06h
		brz	.PushStack 
		cmpe	#09h		;06h
		brz	.DmsPopAE	;.PushStack 
		cmpe	#0ah
		brz	.PushStackCls
		cmpe	#0bh
		brz	.ClrDmsaddmulcls
		cmpe	#0ch
		brz	.ClrDmsaddmulcls		 
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
.DmsPopAE:
		call	.PopData
		br	.IN2PS		
.CheckPari9:	

		lda0	.Buf1
		cmpe	#.Degree
		brz	.PushStack 	;.SynErr
		cmpe	#.Minute
		brz	.PushStack	;.SynErr
		cmpe	#.Second
		brz	.PushStack	;.SynErr	
		lda0	.BeforePari
		cmpe	#0h
		brz	.PushStack
		cmpe	#01h
		brz	.CKdms9
		cmpe	#02h
		brz	.CKdms9
		cmpe	#07h		;06
		brz	.PushStackCls
		cmpe	#09h
		brz	.PushStackCls
		cmpe	#0ah
		brz	.PushStackCls			
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
.CheckParib:	
		lda0	.INDP
		cmpe	#01h
		brz	.PushStack
		lda0	.Buf1
		cmpe	#.Degree
		brz	.PushStack 	;.SynErr
		cmpe	#.Minute
		brz	.PushStack	;.SynErr
		cmpe	#.Second
		brz	.PushStack	;.SynErr	
		lda0	.BeforePari
		cmpe	#0h
		brz	.PushStack
		cmpe	#01h
		brz	.CKdms9
		cmpe	#02h
		brz	.CKdms9
		cmpe	#03h
		brz	.Add1PushStack 
		cmpe	#04h
		brz	.Add1PushStack
		cmpe	#05h
		brz	.Add1PushStack
		cmpe	#06h		;05h
		brz	.Add1PushStack
		cmpe	#07h		;06
		brz	.PushStackCls
		cmpe	#09h
		brz	.Add1PushStack
		cmpe	#0ah
		brz	.SynErr	
		cmpe	#0bh
		brz	.SynErr	
		cmpe	#0ch
		brz	.SynErr		 
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
.Add1PushStack:
		 
		lda	#01h
		sta0	.DataBuf
		call	.ClosEndPS
		call	.StoPosfix
		call	.ClosEndPS
		lda	#0a1h
		sta0	.DataBuf
		br	.PushStack
.ClrDmsPushStack:		
		lda	#0h
		sta0	.DmsCount
		brz	.PushStack	
.ClrDmsaddmul:
		lda	#0h
		sta0	.DmsCount
		br	.AddMul	
.ClrDmsaddmulcls:
		call	.ClosEndPS
		lda	#0h
		sta0	.DmsCount
		br	.AddMul					
.PolRec:
		call	.PushStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;-------------------------------------------
.AddMulCls: 
		lda0	.DmsCount
		cmpe	#0h
		brnz	.AddMul
		call	.ClosEndPS
.AddMul:
		lda0	.FractCount
		cmpe	#01h
		brz	.AdjustFract
.FractAddMul:		
		lda0	.DataBuf
		sta0	.Buf1
		lda	#.MUL
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.PushData
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.PushData
		lda	#0h
		sta0	.BeforePari
		br	.IN2PS
.AdjustFract:
		
		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP 		
		lda	i
		cmpe	#.LC
		brz	.FractAddMul		
		lda	#0deh
		sta	i	
		lda	#0h
		sta0	.FractCount
		br	.FractAddMul

				
		
				
;-------------------------------------------
.StoInPosfixCls:
		call	.ClosEndPS
.StoInPosfix:
		call	.StoPosfix
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;-------------------------------------------
.MemAddMulCls:
		call	.ClosEndPS
.MemAddMul:
		lda0	.DataBuf
		sta0	.Buf2
		lda	#0cdh
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.PushData
		lda0	.Buf2
		sta0	.DataBuf
		call	.StoFuncPS
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;-------------------------------------------
.MemToMem:

		lda0	.DataBuf
		sta0	.Buf1
		call	.ClosEndPS
		call	.StoFuncPS
		lda	#.MUL
		sta0	.DataBuf
		call	.ClosEndPS
		call	.StoFuncPS
		br	.IN2PS
;-------------------------------------------
.Sign:
		lda0	.DataBuf
		cmpe	#.ADD
		brz	.IsADD
		lda0	.DecFlag
		inca
		sta0	.DecFlag
.IsADD:
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;-------------------------------------------
.PushTOStack:
		lda0	.DecFlag
		anda	#01h
		brz	.1$
		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		cmpe	#0h
		brz	.NoAdddp
		incdp
		lda	DP
		sta0	.STDP
.NoAdddp:		
		lda	#.Negative
		sta	i		
		lda	#0h
		sta0	.DecFlag
.1$:			
		call	.StoStack
		lda0	.AfterPari
		sta0	.BeforePari
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;===========================================
.CheckPari::
		lda0	.DataBuf+1
		cmpe	#.Point
		brnz	.CheckNum
		lda	#02h
		sta0	.AfterPari
		br	.EndCheckPari
.CheckNum:		
		cmpe	#10h
		brc	.CKAdd
		lda	#02h
		sta0	.AfterPari
		br	.EndCheckPari
.CKAdd:
		cmpe	#.ADD
		brnz	.CKDec
		lda	#03h
		sta0	.AfterPari
		br	.EndCheckPari
.CKDec:
		lda0	.DataBuf+1
		cmpe	#.DEC
		brnz	.CKMul
		lda	#03h
		sta0	.AfterPari
		br	.EndCheckPari
.CKMul:
		lda0	.DataBuf+1
		cmpe	#.MUL
		brnz	.CKDiv
		lda	#04h
		sta0	.AfterPari
		br	.EndCheckPari
.CKDiv:
		lda0	.DataBuf+1
		cmpe	#.DIV
		brnz	.SPadd
		lda	#04h
		sta0	.AfterPari
		br	.EndCheckPari
.SPadd:
		lda0	.DataBuf+1
		cmpe	#0dfh		
		brnz	.CKLC
		lda	#07h		;06
		sta0	.AfterPari
		br	.EndCheckPari		
.CKLC:
		lda0	.DataBuf+1
		cmpe	#.LC
		brnz	.CKRC
		lda	#0h
		sta0	.AfterPari
		br	.EndCheckPari
.CKRC:
		lda0	.DataBuf+1
		cmpe	#.RC
		brnz	.CKFun5
		lda	#0h
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun5:
		lda0	.DataBuf+1
		cmpe	#.NPR
		brnz	.CKFun6
		lda	#05h		;9h
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun6:
		lda0	.DataBuf+1
		cmpe	#.NCR
		brnz	.CKFun1
		lda	#05h		;9h
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun1:
		lda0	.DataBuf+1
		cmpe	#.XY
		brnz	.CKFun2
		lda	#09h
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun2:
		lda0	.DataBuf+1
		cmpe	#.SQUX
		brnz	.CKFun3
		lda	#09h
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun3:
		lda0	.DataBuf+1
		cmpe	#.POL
		brnz	.CKFun4
		lda	#0ch
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun4:
		lda0	.DataBuf+1
		cmpe	#.REC
		brnz	.CKFun7
		lda	#0ch
		sta0	.AfterPari
		br	.EndCheckPari
.CKFun7:
		lda0	.DataBuf+1
		cmpe	#.REG
		brnz	.LCmul
		lda	#0h
		sta0	.AfterPari
		br	.EndCheckPari
.LCmul:		
		lda0	.DataBuf+1
		cmpe	#0ech
		brnz	.MemMul
		lda	#05h
		sta0	.AfterPari
		br	.EndCheckPari
		
						
.MemMul:
		lda0	.DataBuf+1
		cmpe	#0cdh		;mem *
		brnz	.MemDiv
		lda	#07h		;06h
		sta0	.AfterPari
		br	.EndCheckPari
.MemDiv:
		lda0	.DataBuf+1
		cmpe	#0deh		;mem /
		brnz	.DmsAdd
		lda	#08h		;7 
		sta0	.AfterPari
		br	.EndCheckPari		
		
.DmsAdd:
		lda0	.DataBuf+1
		cmpe	#0aeh		;dms +
		brnz	.D_M_S

⌨️ 快捷键说明

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