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

📄 postfix.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		lda	#09h		;06h
		sta0	.AfterPari
		br	.EndCheckPari		
.D_M_S:		
		lda0	.DataBuf+1
		cmpe	#.DMS
		brnz	.Degrees		;dms degree
		lda	#0ah
		sta0	.AfterPari
		br	.EndCheckPari
.Degrees:		
		lda0	.DataBuf+1
		cmpe	#0aah
		brnz	.Degrees1
		lda	#0ah
		sta0	.AfterPari
		br	.EndCheckPari		
.Degrees1:		
		lda0	.DataBuf+1
		cmpe	#.Degree
		brnz	.Mins
		lda	#0ah
		sta0	.AfterPari
		br	.EndCheckPari
.Mins:		
		lda0	.DataBuf+1
		cmpe	#.Minute
		brnz	.Secs
		lda	#0ah
		sta0	.AfterPari
		br	.EndCheckPari
.Secs:		
		lda0	.DataBuf+1
		cmpe	#.Second
		brnz	.EXP
		lda	#0ah
		sta0	.AfterPari
		br	.EndCheckPari	
.EXP:
		lda0	.DataBuf+1
		cmpe	#0a1h
		brnz	.CommaP
		lda	#0bh
		sta0	.AfterPari
		br	.EndCheckPari
.CommaP:		
		lda0	.DataBuf+1
		cmpe	#0b4h
		brnz	.Sime
		lda	#02h
		sta0	.AfterPari
		br	.EndCheckPari
.Sime:		
		lda0	.DataBuf+1
		cmpe	#0b0h
		brnz	.CKBaseN
		lda	#02h
		sta0	.AfterPari
		br	.EndCheckPari		
		
														
.CKBaseN:
		lda0	.DataBuf+1
		cmpe	#20h		;and
		brz	.Paris9
		cmpe	#21h		;or
		brz	.Paris9
		cmpe	#22h		;xnor
		brz	.Paris9
		cmpe	#23h		;xor
		brz	.Paris9
		cmpe	#24h		;not
		brz	.Paris5
		cmpe	#25h		;neg
		brz	.Paris5
		br	.CKFunc
.Paris9:
		lda	#09h
		sta0	.AfterPari
		br	.EndCheckPari
.Paris5:	
		lda	#06h		;05h
		sta0	.AfterPari
		br	.EndCheckPari				
.CKFunc:

		call	.CheckFuncd

.EndCheckPari:
		ret		
;-------------------------------------------
.PushStackCls:
		 
		call	.ClosEndPS
.PushStack:
		lda0	.DataBuf
		sta0	.Buf1
		call	.PushData

		br	.IN2PS

;-------------------------------------------
.PushData::
		lda0	.DataBuf			 
		sta0	Temp2
		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		cmpe	#0ffh
		brz	.Push2Stack
		lda	i
		sta0	.DataBuf
		sta0	.DataBuf+1
		cmpe	#0h
		brz	.Push2Stack
		cmpe	#.LC
		brz	.Push2Stack
		call	.CheckPari
		lda0	.AfterPari
		sta0	.BeforePari		;-12/16
		lda0	Temp2		 
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		lda	#0h
		sta	PP
		lda0	.AfterPari
		suba	.BeforePari
		brnc	.PopDataEQU
		brz	.PopDataEQU
.Push2Stack:
		lda0	Temp2
		sta0	.DataBuf
		call	.StoStack
		lda0	.AfterPari
		sta0	.BeforePari
		br	.EndPushData
.PopDataF:
		lda0	.STDP
		deca
		sta0	.STDP
		call	.PopData
		br	.EndPushData
		
.PopDataEQU:			
		call	.PopData
.EndPushData:
		ret
;-------------------------------------------
.PopData:

		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	.DataBuf+1
		lda0	.DataBuf
		sta	i
		lda0	.DataBuf+1
		sta0	.DataBuf
		call	.ClosEndPS		 
		call	.StoFuncPS
		lda0	.AfterPari
		sta0	.BeforePari
		call	.ClosEndPS
		call	.PopSatck
		ret


;===========================================
.PopSatck:

		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	Temp2	;Buf2
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		lda0	.AfterPari
		sta0	.BeforePari	
		decdp
		lda	DP
		cmpe	#0ffh
		brz	.EndCkStack
		cmpe	#.LC
		brz	.EndCkStack
		lda	#.STPP
		sta	PP
		lda	i
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		lda	#0h
		sta	PP
		lda0	.AfterPari
		suba	.BeforePari
		brc	.PopStackall
		brnz	.EndCkStack				
		lda	#.STPP
		sta	PP
		lda0	Temp2		;.Buf2
		sta	i
		lda	DP
		sta0	.STDP
		lda0	.DataBuf
		sta0	.DataBuf+1
		call	.StoFuncPS
		call	.ClosEndPS
		br	.EndCkStack		;2002,01,23
.PopStackall:	
		lda	#.STPP
		sta	PP
		lda0	Temp2			;	.Buf2
		sta	i
		lda	DP
		sta0	.STDP
		lda0	.DataBuf
		sta0	.DataBuf+1
		call	.StoFuncPS
		call	.ClosEndPS
		br	.PopSatck
.EndCkStack:
		ret
;===========================================
.CkRightC::
		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	.DataBuf+1
		cmpe	#.LC
		brz	.EedDataC	 
		lda0	.DataBuf+1
		sta0	.DataBuf
		lda0	.FractCount
		cmpe	#01h
		brnz	.NextPOP
		lda0	.DataBuf
		cmpe	#0dfh		;DT
		brnz	.NextPOP
		lda	#0deh		;Fract div code
		sta0	.DataBuf
		lda	#0h
		sta0	.FractCount	
.NextPOP:		
		call	.StoFuncPS
		call	.ClosEndPS
		lda0	.STDP
		deca
		sta0	.STDP
		br	.CkRightC
.EedDataC:

		lda0	.STDP
		deca
		sta0	.STDP
		lda	#.PSPP
		sta	PP
		lda0	.PSDP
		sta	DP
		decdp
		lda	i
		cmpe	#0ffh
		brz	.EndCkRightC
		lda	#0ffh
		sta	i
		incdp
		lda	DP
		sta0	.PSDP
.EndCkRightC:

		ret

;===========================================
.StoStack::
		lda	#.STPP
		sta	PP
		lda     #0h
		sta     DP
		lda     i
		cmpe    #0h
		brz     .FirstST
		lda0	.STDP
		sta	DP
		incdp
		lda	DP
		cmpe	#4fh
		brnz	.FirstST
		lda	#03h
		sta0	ErrorFlag
.FirstST:
		lda0	.DataBuf
		sta	i
		lda	DP
		sta0	.STDP

		ret


;===========================================
.LC2StackCls::
		call	.ClosEndPS
.LC2Stack::
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
;-------------------------------------------		
.LCAddMulCls:
		call	.ClosEndPS
.LCAddMul:
		call	.CheckFrcatDF	
		lda0	.DataBuf
		sta0	.Buf1		
		lda	#0ech		;lc*
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.PushData		
		lda0	.Buf1		
		sta0	.DataBuf
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.IN2PS
.CheckFrcatDF:
		lda	#03h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		cmpe	#0dfh
		brnz	.EndDFCK
		lda	#0deh
		sta	i
		lda	#0h
		sta0	.FractCount
.EndDFCK:
		ret				
;===========================================
.StoPosfix::
		
		lda0	.DecFlag
		anda	#01h
		cmpe	#01h
		brnz	.NoSignal
		lda	#0h
		sta0	.DecFlag
		lda	#.PSPP
		sta	PP
		lda0	.PSDP
		sta	DP		 		
		lda0	.DataBuf
		sta0	Temp2
		sta	i
		lda	#.Negative
		sta0	.Buf1		
		incdp
		lda	DP
		sta0	.PSDP
		lda	#.STPP
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	.DataBuf
		sta0	.Buf2
		cmpe	#0h
		brz	.STOstk0
		lda0	.DataBuf
		sta0	.DataBuf+1		
		call	.CheckPari
		lda0	.Buf1
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#0h		
		brz	.STOstk
		cmpe	#02h
		brz	.STOstk
		cmpe	#03h
		brz	.STOstk
		cmpe	#04h
		brz	.STOstk
		cmpe	#05h
		brz	.STOstk
		cmpe	#06h		;05h
		brz	.STOstk	
		cmpe	#07h		;05h
		brz	.STOstk	
		cmpe	#08h		;05h
		brz	.STOstk	
		cmpe	#09h
		brz	.STOstk		;.StoPScls	
		cmpe	#0bh
		brz	.PushSTK	;.StoPScls
		cmpe	#0ch
		brz	.PushSTK
		br	.Endps
.StoPScls:	
		call	.ClosEndPS
		br	.StoFuncPS
.PushSTK:		
		lda	#.STPP
		sta	PP
		lda0	.STDP
		inca
		sta0	.STDP
		sta	DP		
		lda	#.Negative
		sta	i
		lda	#0h
		sta0	.DecFlag				 		
		br	.Endps
.STOstk0:	
		lda0	.Buf1
		sta0	.DataBuf		
		call	.StoStack
		lda0	Temp2
		sta0	.DataBuf			 		
		br	.Endps				
.STOstk:	
		call	.StoStack			
		lda0	Temp2
		sta0	.DataBuf			 		
		br	.Endps
.NoSignal::

		lda	#0h
		sta0	.DecFlag
.StoFuncPS::
		lda	#.PSPP
		sta	PP
		lda0	.PSDP
		sta	DP
		lda0	.DataBuf
		sta	i
		incdp
		lda	DP
		sta0	.PSDP		
.Endps:		
		ret
;===========================================
.SftRight::
		lda0	.DataBuf
		anda	#0f0h
		rorc
		anda	#~80h
		rorc
		anda	#~80h
		rorc
		anda	#~80h
		rorc
		anda	#~80h
		sta0	.DataBuf
		ret
;===========================================
.SftLeft::
		lda0	.DataBuf
		anda	#0fh
		rolc
		anda	#~01h
		rolc
		anda	#~01h
		rolc
		anda	#~01h
		rolc
		anda	#~01h
		sta0	.DataBuf
		ret
;===========================================
.CheckFuncd::

		lda	#01h
		sta	PP
		lda	#^(.CheckFunD)
		sta	TPP
		lda	#@(.CheckFunD)
		sta	TPH
		lda	#<(.CheckFunD)
		sta	TPL
.CmpFunC:
		ldv
		sta0	.DataBuf+1
		cmpe	#0ffh
		brz	.CheckOtherfunc
		lda	#0h
		sta	PP
		lda0	.DataBuf
		cmpe	.DataBuf+1
		brnz	.CmpFunC
		lda	#06h		;05h
		sta0	.AfterPari
		br	.EndCheck
.CheckOtherfunc:
		lda	#0ah
		sta0	.AfterPari
.EndCheck:
		ret
;===========================================
.CheckMem::

		lda	#01h
		sta	PP
		lda	#^(.CheckMemory)
		sta	TPP
		lda	#@(.CheckMemory)
		sta	TPH
		lda	#<(.CheckMemory)
		sta	TPL
.CmpMem:
		ldv
		sta0	.DataBuf+1
		cmpe	#0ffh
		brz	.EndMem
		lda	#0h
		sta	PP
		lda0	.DataBuf
		cmpe	.DataBuf+1
		brnz	.CmpMem
		lda	#01h
		sta0	.AfterPari
.EndMem:
		lda0	.DataBuf
		sta0	.DataBuf+1
		ret
;-------------------------------------------
.Clrformula::
		lda	#01h
		sta	PP
		lda	#0b0h
		sta	DP
.ClrP1C:
		lda	DP
		cmpe	#0ffh
		brz	.EndClrP1
		lda	#0h
		sta	i
		incdp
		br	.ClrP1C
.EndClrP1:
		ret
;-------------------------------------------
.ClrP2::
		lda	#02h
		sta	PP
		lda	#50h
		sta	DP
.ClrP2C:
		lda	DP
		cmpe	#0ffh
		brz	.EndClrP2
		lda	#0h
		sta	i
		incdp
		br	.ClrP2C
.EndClrP2:
		
		ret	
			
;-------------------------------------------
.ClrallP::
		lda	#01h
		sta	PP
		lda	#0h
		sta	DP
.ClrP:		
		lda	DP
		cmpe	#0ffh
		brz	.EndClrP 
		lda	#0h
		sta	i
		incdp
		br	.ClrP 
.EndClrP:
		lda	PP
		inca
		sta	PP
		cmpe	#04h
		brz	.EndClrall
		lda	#0h
		sta	DP
		br	.ClrP
.EndClrall:	
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.NoFormulamode
		lda	#0h
		sta0	.FormulaFlag
.NoFormulamode:
		ret				
;-------------------------------------------
.ClrP2Data::
		lda	#0h
		sta	PP
		lda	#0h
		sta0	.DataDP				
		sta0	.SFDP
		sta0	.CommaFlag
		sta0	.TFlag
			
		call	.ClrZ			1$:		
		lda	#01h
		sta 	PP	
		lda	#0h		 
		sta 	.SetFlag
		lda	.SFlag		;2002.2.21
		anda	#~70h			 
		sta	.SFlag
		anda	#80h
		brnz	.EndCP2
		lda	#0h
		sta	.SFlag
		sta0	.FormulaFlag
.EndCP2:
.ClrP2Edit::
		
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
.ClrP2Cd:
		lda	DP
		cmpe	#.PosfixDP
		brz	.EndClrP2d
		lda	#0h
		sta	i
		incdp
		br	.ClrP2Cd
.EndClrP2d:
		
		ret
;-------------------------------------------
.ClosEndPS::
		lda	#.PSPP
		sta	PP
		lda0	.PSDP
		sta	DP		
		cmpe	#50h
		brz	.EndClsPS		
		decdp
		lda	i
		cmpe	#0ffh
		brz	.EndClsPS
		incdp
		lda	#0ffh
		sta	i
		incdp
		lda	DP
		sta0	.PSDP
.EndClsPS:		
		ret


;-------------------------------------------
.InitPsData:
		lda	#.PosfixDP
		sta0	.PSDP		;Postfix dp
		lda	#0h
		sta0	.STDP		;stack dp
		lda	#0h
		sta0	.FractTrsCnt
		sta0	.CommaFlag
		sta0	.PointFlag		
		sta0	.INDP
		sta0	.IFlag
		sta0	.SymFlag
		sta0	.DecFlag
		sta0	.Buf1
		sta0	.DataBuf
		sta0	.BeforePari
		sta0	.AfterPari
		sta0	.DmsCount
		sta0	.FractCount
		lda0	.FormulaFlag			;IF flag=1 belong to formula mode
		cmpe	#01h
		brnz	.ClrP23
		lda	#01h
		sta	PP
		lda	.SFlag
		anda	#80h
		brnz	.ClrP23
		lda0	.DataDP
		cmpe	#02h
		brz	.FormulaErr
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		sta0	.DataBuf
		call	.CheckMem
		lda0	.AfterPari
		cmpe	#01h
		brnz	.FormulaErr		
		lda	#02h
		sta	PP
		lda	#01h
		sta	DP
		lda	i
		sta0	.Buf1
		lda	#02h
		sta0	.INDP
		br	.ClrP23
.FormulaErr:
		lda	#02h
		sta0	ErrorFlag
		lda0	.DataDP
		sta0	.SFDP
		br	.EndInitPsData		
.ClrP23:				
		call	.ClrP2
		call	.ClrP3
		lda	#01h
		sta	PP
		lda	#0h
		sta	.FunctFlag
		lda	StateFlag
		anda	#07h
		brz	.EndInitPsData
		 
.EndInitPsData:		
		ret
;===========================================;,029h,026h,027h,028h,

.CheckFunC::
		DB	0c8h,0d1h,0d2h,0d4h,0c4h,0c5h,0c6h,0c7h,0d8h,0d3h,0d7h
		DB	0d9h,0b9h,0b9h,0c0h,0c1h,0e0h,0e1h,0e2h,0e9h,0f0h,0f1h,0bdh,0beh
		DB	0f2h,0f3h,0f4h,0d5h,0c9h,0ffh
.CheckFunD::
		DB	0d1h,0c4h,0c6h,0c7h,0d8h,0a8h
		DB	0d9h,0b9h,0c0h,0c1h,0e0h,0e1h,0e2h,0e9h,0f0h,0f1h
		DB	0f2h,0f3h,0f4h,0f9h,0ffh
.CheckMemory::
		DB	0a9h,0f9h,0a2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0f6h
		DB 	0f7h,0bbh,0ceh,0cfh,0fah,0fbh,0fch,0fdh,0feh,0cah
		DB	0cbh,0bah,0bch,0aah,0ffh														

⌨️ 快捷键说明

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