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

📄 syntax.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------------	
.PointCK:
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1		
		cmpe	#0a0h
		brz	.SynError
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.Buf2
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#01h
		brz	.EndStackCk
		cmpe	#02h		;+
		brz	.EndStackCk
		cmpe	#03h		;-
		brz	.EndStackCk
		cmpe	#04h		;*
		brz	.EndStackCk
		cmpe	#05h		;/
		brz	.EndStackCk
		cmpe	#06h		;05h
		brz	.EndStackCk
		cmpe	#0ah
		brz	.EndStackCk
		lda0	.Buf1
		cmpe	#0b2h
		brz	.EndStackCk	
		cmpe	#0d3h
		brz	.EndStackCk
		cmpe	#0d7h
		brz	.EndStackCk					
		br	.SynError
;-------------------------------------------		
.DRGCK:
		lda0	.AfterPari
		sta0	.Buf3
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.Buf2
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#06h		;05h
		brz	.SynError
		cmpe	#09h
		brz	.SynError
		lda0	.Buf3
		sta0	.AfterPari
		br	.EndStackCk 
;-------------------------------------------
.MemCLR:
		lda0	.DataBuf
		cmpe	#02h
		brc	.SynError				
		br	.EndStackCk
;-------------------------------------------		
.DoSemicolon:
		lda0	.SimeFlag
		inca
		sta0	.SimeFlag
		lda0	.Buf1
		cmpe	#0b0h		;b0=';'
		brz	.SynError
		cmpe	#0b4h		;b4=','
		brz	.SynError
		lda0	.SimeFlag
		cmpe	#02h
		brc 	.SynError		 	
		br	.EndStackCk						
;-------------------------------------------		
.SignDec:
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1	
		cmpe	#0b4h		; ,			;2002 10 22   Alton
		brz	.EndStackCk
		cmpe	#0a8h
		brz	.EndStackCk
		cmpe	#0c3h
		brz	.EndStackCk
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.Buf2
		sta0	.DataBuf
		lda0	.AfterPari
		cmpe	#01h
		brz	.SynError
		cmpe	#02h
		brz	.SynError			
		cmpe	#0ah
		brz	.SynError		
		cmpe	#09h
		brz	.EndStackCk
		cmpe	#12h		;Semicolon
		brz	.SynError	
		lda0	.Buf1
		cmpe	#0b3h
		brz	.SynError
		br	.EndStackCk
;-------------------------------------------		
.CommaFractDms:	
		lda	#0h
		sta0	.DmsCount	
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1
		sta0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.Buf2
		sta0	.DataBuf
		lda0	.Buf1
		cmpe	#0b3h		;)
		brz	.EndStackCk				
		lda0	.DataBuf
		cmpe	#0b4h		;b4= ','
		brz	.Checkcomma
		cmpe	#0c3h		;fract
		brz	.Chkfract
		lda0	.Buf1
		cmpe	#0b7h		;degree
		brz	.SynError
		lda0	.AfterPari
		cmpe	#0ah
		brz	.EndStackCk
		lda0	.AfterPari
		cmpe	#01h
		brz	.EndStackCk
		cmpe	#02h
		brz	.EndStackCk										 			
		br	.SynError
.Chkfract:
.Checkcomma:
		lda0	.Buf1
		cmpe	#0b7h		;degree
		brz	.EndStackCk
		cmpe	#0c3h		;fract
		brz	.SynError
		cmpe	#0b4h
		brz	.SynError
		cmpe	#0b0h
		brz	.SynError
		lda0	.AfterPari
		cmpe	#0ah
		brz	.EndStackCk
		lda0	.AfterPari
		cmpe	#01h
		brz	.EndStackCk
		cmpe	#02h
		brz	.EndStackCk											 			
		br	.SynError	
;-------------------------------------------		
.SynError:
		lda	#02h
		sta0	ErrorFlag
		lda     #0h 		;set error site
		sta0	.TFlag
		lda0	.INDP
		deca
		sta0	.SFDP
.EndStackCk:
		ret	
;-------------------------------------------
.FunctCode::
		lda	#01h
		sta	PP
		lda	#^(.CheckFunC)
		sta	TPP
		lda	#@(.CheckFunC)
		sta	TPH
		lda	#<(.CheckFunC)
		sta	TPL
.KeepSearch:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.EndCode
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.DataBuf
		brnz	.KeepSearch
		lda	#08h
		sta0	.AfterPari
		br	.EndunctCode
.EndCode:
		lda	#0h
		sta0	.AfterPari
.EndunctCode:		
		ret	
;-------------------------------------------		
.CkMemory::		
		lda	#0h
		sta0	.AfterPari
		lda	#01h
		sta	PP
		lda	#^(.CheckMemory)
		sta	TPP
		lda	#@(.CheckMemory)
		sta	TPH
		lda	#<(.CheckMemory)
		sta	TPL
.Searchmem:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.Endmem
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.DataBuf	;.Buf1
		brnz	.Searchmem				
		lda	#0eh
		sta0	.AfterPari
.Endmem:		
		br	.EndStackCk	
		
;-------------------------------------------------
.DispPari::
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#20h
		brnz	.EndDispPari		
		lda	#0h
		sta	DP
		sta0	.DispFlag
.CKloop:	
		
		lda	#0h
		sta	PP
		lda	DP
		cmpe	.DataDP
		brz	.EndDispPari
		lda	#02h
		sta	PP	
		lda	i
		sta0	.DataBuf
		cmpe	#0a0h
		brz	.SetPoint	
		cmpe	#0ah
		brc	.CKPari
.NextDP:		
		incdp		
		br	.CKloop		
.CKPari:					 
		lda0	.DataBuf
		cmpe	#0b7h
		brz	.DmsMode
		cmpe	#0c3h
		brz	.FractMode
		cmpe	#0d0h
		brz	.22$
		cmpe	#0d6h
		brz	.22$
		lda0	.DataBuf
		sta0	.DataBuf+1
		call	.CheckPari
		call	.CheckMem
		lda0	.AfterPari
		cmpe	#06h		 
		brz	.DisDmsFractFlag
		cmpe	#09h
		brz	.DisDmsFractFlag
		cmpe	#0ah
		brz	.DisDmsFractFlag 	
		br	.NextDP
.DmsMode:				
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~04h
		ora	#04h
		sta	.SetFlag
		lda	#04h
		sta0	.DispFlag		 
		br	.NextDP	
.FractMode:	
		lda0	.DispFlag
		cmpe	#03h
		brz	.NextDP
		cmpe	#02h
		brz	.NextDP
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~18h
		ora	#08h
		sta	.SetFlag
		lda	#05h
		sta0	.DispFlag 		 
		br	.NextDP	
.SetPoint:		
		lda0	.DispFlag
		cmpe	#02h
		brz	.NextDP	
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~1ch		 ;18
		sta	.SetFlag
		lda	#03h
		sta0	.DispFlag 		 
		br	.NextDP	
.DisDmsFractFlag:
		lda0	.DataBuf
		cmpe	#0xA8
		brz	.NextDP		
				
		
		
		
		lda0	.DispFlag		
		cmpe	#02h
		brz	.NextDP		
		lda	#0h
		sta0	.DispFlag		 
		br	.11$ 	
.EndDispPari:	
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#0ch		 
		cmpe	#0ch
		brz	.22$
.11$:		
		lda0	.DispFlag
		cmpe	#0h
		brnz	.33$
.22$:		
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~1ch		 
		sta	.SetFlag
.33$:		
		lda	#01h
		sta0	.DispFlag
		ret
;-------------------------------------------		
.FormulaCk::
		lda	#0h
		sta	DP
		sta0	.FormulaFlag
		lda	#02h
		sta	PP
		lda	i
		cmpe	#7ah
		brz	.ErrorSyn		
		 
.ScanEQU:	
		lda	#02h
		sta	PP	 		
		incdp
		lda	i
		cmpe	#7ah
		brz	.IsFormula
		lda	#0h
		sta	PP
		lda	DP
		cmpe	.DataDP
		brz	.EndFormula
		br	.ScanEQU
.ErrorSyn:
		lda	#02h
		sta0 	ErrorFlag
		lda	#0h
		sta0	.StoFlag
		sta0	.FormulaFlag
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#~80h
		sta 	.SFlag				 
		br	.EndFormula					
.IsFormula:
		lda	DP
		cmpe	#01h
		brnz	.ErrorSyn
		lda	#01h
		sta0	.FormulaFlag
		lda	#>.CalcFlag
		sta	PP
		lda	.CalcFlag
		cmpe	#01h
		brz	.CalcModeOp
		lda0	.KeyPos
		cmpe	#7bh
		brnz	.EndFormula
.CalcModeOp:	
		lda	#>.CalcFlag
		sta	PP
		lda	#01h		
		sta	.CalcFlag			
		call	.SyntaxFormula
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.ErrorSyn
		call	.Syntax
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.ErrorSyn	;.EndFormula
		call	.ClrFa
		call	.ClrP2		
		lda	#02h
		sta0	.FormulaDP
.stomem:	
		lda	#02h
		sta	PP	
		lda0	.FormulaDP
		sta	DP
		cmpe	#04fh
		brz	.copy2formula
		lda	i
		sta0	.DataBuf
		cmpe	#0e3h
		brz	.Recodemem
		cmpe	#0e4h
		brz	.Recodemem
		cmpe	#0e5h
		brz	.Recodemem
		cmpe	#0e6h
		brz	.Recodemem
		cmpe	#0e7h
		brz	.Recodemem
		cmpe	#0e8h
		brz	.Recodemem
		cmpe	#0f5h
		brz	.Recodemem
		cmpe	#0f6h
		brz	.Recodemem
		cmpe	#0f7h
		brz	.Recodemem
.nextdp1:		
		lda0	.FormulaDP
		inca
		sta0	.FormulaDP	
		br	.stomem
.Recodemem:
		
		lda	#<SignFa
		sta0	.Buf1
		lda	#09h
		sta0	.Counter
.MEMsto:	
		lda	#>SignFa
		sta	PP	
		lda0	.Counter
		cmpe	#0h
		brz	.nextdp1
		lda0	.Buf1
		sta	DP
		lda	i
		sta0	.DataBuf+1
		cmpe	#0h
		brnz	.Cmpdata
		lda0	.Databuf
		sta	i
		br	.nextdp1		
.Cmpdata:		
		lda	#0h
		sta	PP
		lda0	.Databuf
		cmpe	.Databuf+1
		brz	.nextdp1	;;; 
		lda0	.Counter
		deca
		sta0	.Counter
		lda0	.Buf1
		inca
		sta0	.Buf1
		br	.MEMsto		
.copy2formula:	
		lda	#>SignFa
		sta	PP
		lda	#<SignFa				
		sta0	.FormulaDP
		lda	#>.ForLDP
		sta	PP
		lda0	.DataDP
		sta	.ForLDP		
		call	.Input2Formula				
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~20h			
		sta	.SetFlag
		lda	.SFlag
		ora	#88h
		sta	.SFlag
		call	.ClrP2Data
		lda	#0h
		sta0	.StoFlag		
.EndFormula:		
		ret
;-------------------------------------------------
.SyntaxFormula::
		lda0	ErrorFlag		
		brnz	.ENDSyntaxFormula
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.ENDSyntaxFormula
		lda	#0h
		sta	DP
		sta0	.AfterPari		
		lda	#02h
		sta	PP
		lda	i
		sta0	.DataBuf		
		lda	#01h
		sta	PP
		lda	#^(.CheckMemory)
		sta	TPP
		lda	#@(.CheckMemory)
		sta	TPH
		lda	#<(.CheckMemory)
		sta	TPL
.CKmem:		
		ldv
		sta0	.DataBuf+1
		cmpe	#0aah
		brz	.EndCkmem
		lda	#0h
		sta	PP
		lda0	.DataBuf
		cmpe	.DataBuf+1
		brnz	.CKmem
		lda	#01h
		sta0	.AfterPari			
.EndCkmem:				
		lda0	.AfterPari
		cmpe	#01h
		brnz	.Errsyn
		incdp
		lda	#02h
		sta	PP
		lda	i		
		cmpe	#07ah		;7a = calc '='
		brz	.ENDSyntaxFormula
.Errsyn:
		lda	#02h
		sta0 	ErrorFlag			
.ENDSyntaxFormula:
		ret
;-------------------------------------------------
.GetMemData::
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		ora	#20h
		sta	.SetFlag				
		lda0	.FormulaDP
		sta	DP
		cmpe	#0ffh
		brz	.ClrForFlag
		lda	#>SignFa
		sta	PP
		lda	i		
		sta0	.ForData
		sta0	.KeyPos
		call	.RCLReg
		lda0	.KeyPos
		cmpe	#0h
		brz	.ClrForFlag
		lda0	.FormulaDP
		inca
		sta0	.FormulaDP
		br	.EndGetMemData
.ClrForFlag: 
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#~80h
		ora	#08h
		sta	.SFlag	
		call	.Formula2Input 
		lda	#>.ForLDP
		sta	PP
		lda	.ForLDP
		sta0	.DataDP
			
.EndGetMemData:		
		ret						
;-------------------------------------------------
.HeadCheck::
		DB	0b3h,0d4h,0c8h,0b7h,0c3h,0d3h,0d7h,0c9h,0d5h 		
		DB 	0d2h,0c5h,0a6h,0a7h,0c9h,0d5h,0b4h,0bdh,0beh,0ffh 				
		
.SignCheck::
		DB	0c9h,0d5h,0d3h,0d7h,0d4h,0c8h,0d2h,0c5h,0a2h,0a9h,0f9h
		DB	0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0aah,0bbh,0ceh					
		DB	0f6h,0f7h,0b7h,0c3h,0a4h,0a5h,0b1h,0b2h,0a8h
		DB	0b4h,0a6h,0a7h,0a1h,0b0h,0ffh
.SignMUL::
		DB	0aah,0bbh,0ceh,0d3h,0d7h,0d4h,0c8h,0d2h,0c5h,0a2h
		DB	0a9h,0f9h,0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h					
		DB	0f6h,0f7h,0b7h,0c9h,0d5h,0ffh 
		 
.Function:
		DB	0a0h,0b3h,0b0h,0c8h,0d2h,0c5h,0d4h,0c8h,0d2h	
		DB	0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0a2h 					
		DB	0f6h,0f7h,0a9h,0f9h,0d0h,0bdh,0beh,0d6h
		DB	0b7h,0abh,0ach,0adh,0ffh	
.DataEndCheck::
		DB	0d4h,0c8h,0d2h,0c5h,0a2h,0a9h,0aah,0bbh,0ceh
		DB	0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h 					
		DB	0f6h,0f7h,0b7h,0a0h,0f9h,0f8h,0b6h,0cfh	
		DB	0fah,0fbh,0fch,0fdh,0feh,0cah,0cbh,0bah
		DB	0bch,0bdh,0beh,0ffh	
.SymborCheck::
		DB	0a4h,0a5h,0a6h,0a7h,0b2h,0b3h,0a2h,0f8h,0d0h 
		DB	0d6h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h 					
		DB	0f6h,0f7h,0a9h,0f9h,0aah,0bbh,0ceh,0ffh
		
.MemoryCheck::
		DB	0a8h,0b7h,0b8h,0b9h,0c0h,0c1h,0b3h,0b4h,0b5h
		DB	0a9h,0f9h,0a2h,0ffh
		 			

⌨️ 快捷键说明

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