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

📄 syntax.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;/subrutine name : Syntax.asm
;/user bady      : HE83137 
;/fast clock     : 4Mhz
;/slow clock     : 32768khz
;/programer      : Alton	
.INPP		EQU		0x02 
.Calc		EQU		0x7b
		.area   Syntaxc(code)
.Syntax::	
		
		lda	#0h			
		sta0	.LRcnt
		sta0	.BeforePari
		sta0	.DmsCount
		sta0	.AfterPari
		sta0	ErrorFlag			;ErrorFlag=1 ma error
		sta0	.INDP				;ErrorFlag=2 syntax error		 	
		sta0	.CommaFlag			;ErrorFlag=3 stack error
		sta0	.SimeFlag
		lda0	.FormulaFlag			;IF flag=1 belong to formula mode
		cmpe	#01h
		brnz	.SyntaxCK
		lda	#02h
		sta0	.INDP					
;----------------.EndSyntaxCK---------------------------		
.SyntaxCK:	
		lda	#0h
		sta	PP		 		 
		lda0	.DataDP
		cmpe	#0h
		brz	.EndSymbor
		cmpe	.INDP	
		brz	.EndSyntaxCK
;-------------------------------------------		
.StartCK: 	
		lda0	ErrorFlag
		cmpe	#02h
		brz	.EndSymbor
		lda	#.INPP
		sta	PP
		lda0	.INDP
		sta	DP
		lda	i
		sta0	.DataBuf
		sta0	.DataBuf+1		
		lda0	.INDP
		inca
		sta0	.INDP		 		
		br	.Complier

;-------------------------------------------
.Complier::
		lda0	ErrorFlag
		cmpe	#02h
		brz	.ErrorSym
		call	.SymborCK	
		lda0	.BeforePari
		cmpe	#0h
		brnz	.StartCmp
		 	
.StartCmp:		
		call	.StackCk
		lda0	ErrorFlag
		cmpe	#02h
		brz	.ErrorSym		
.EndComplier:
		lda0	.AfterPari
		sta0	.BeforePari
		lda0	.DataBuf
		sta0	.Buf1		
		br	.EndSyntax
.ErrorSym:
		lda	#02h
		sta0	ErrorFlag
		lda	#0h
		sta0	.TFlag		 
		lda0	.INDP
		deca
		sta0	.SFDP
		br	.StartCK		
.EndSyntax:
		br	.SyntaxCK 		
;-------------------------------------------		
.SymborCK:
		call	.FunctCode
		lda0	.AfterPari
		cmpe	#08h
		brz	.EndSymbor
		lda0	.DataBuf
		cmpe	#07ah
		brz	.ErrorSym
		cmpe	#0d0h
		brz	.EnPolRec
		cmpe	#0d6h
		brz	.EnPolRec		
		cmpe	#0b0h
		brz	.Semicolon
		cmpe	#0a4h
		brz	.IsADD
		cmpe	#0a5h
		brz	.IsDEC
		cmpe	#0a6h
		brz	.IsMUL			
		cmpe	#0a7h
		brz	.IsDIV
		cmpe	#0b2h
		brz	.IsLC
		cmpe	#0b3h
		brz	.IsRC
		cmpe	#0aah
		brz	.IsDRG
		cmpe	#0bbh
		brz	.IsDRG
		cmpe	#0ceh
		brz	.IsDRG
		cmpe	#0a8h
		brz	.IsSignDec
		cmpe	#0b6h
		brz	.IsMemoryClr
		cmpe	#0b4h
		brz	.Comma
		cmpe	#0c3h
		brz	.Fraction
		cmpe	#0b7h
		brz	.Dms								
		cmpe	#0a0h
		brz	.IsPoint		
		brnc	.IsNum
		call	.CkMemory
		lda0	.AfterPari
		cmpe	#0h
		brnz	.EndSymbor
;-------------------------------------------		
.IsNum:		
		lda	#01h
		sta0	.AfterPari		
		br	.EndSymbor
.IsADD:
		lda	#02h
		sta0	.AfterPari
		br	.EndSymbor
.IsDEC:
		lda	#03h
		sta0	.AfterPari
		br	.EndSymbor		
.IsMUL:
		lda	#04h
		sta0	.AfterPari
		br	.EndSymbor
.IsDIV:
		lda	#05h
		sta0	.AfterPari
		br	.EndSymbor			
.IsLC:
		lda	#06h
		sta0	.AfterPari
		br	.EndSymbor
.IsRC:
		lda	#07h
		sta0	.AfterPari
		br	.EndSymbor
.IsDRG:
		lda	#0ah
		sta0	.AfterPari
		br	.EndSymbor		
.IsPoint:
		lda	#09h
		sta0	.AfterPari
		br	.EndSymbor
.IsSignDec:
		lda	#0bh
		sta0	.AfterPari
		br	.EndSymbor					
.IsMemoryClr:
		lda	#0ch
		sta0	.AfterPari
		br	.EndSymbor
.Comma:
		lda	#0fh
		sta0	.AfterPari		 
		lda0	.CommaFlag
		deca
		sta0	.CommaFlag		 
		br	.EndSymbor	
.Fraction:
		lda	#10h
		sta0	.AfterPari
		br	.EndSymbor
.Dms:
		lda	#11h
		sta0	.AfterPari
		br	.EndSymbor
.Semicolon:
		lda	#12h
		sta0	.AfterPari
		br	.EndSymbor											
.OtherFunc:
		lda	#02h
		sta0	ErrorFlag
		lda 	#0h		;set error site
		sta0	.TFlag
		lda0	.INDP
		deca
		sta0	.SFDP
		br	.EndSymbor		
;-------------------------------------------		
.EndSyntaxCK:
		lda0	.DmsCount
		cmpe	#0h
		brz	.ChkSimeflag
		lda0	.DataBuf
		cmpe	#0b7h		;dms
		brz	.ChkSimeflag
		br	.SyntaxError
.ChkSimeflag:	
		lda0	.CommaFlag
		cmpe	#0h
		brz	.CheckSime
		lda0	.KeyPos
		cmpe	#0b5h
		brz	.CheckSime
		cmpe	#0dfh		
		brnz	.SyntaxError	
.CheckSime:		
		lda0	.SimeFlag
		cmpe	#01h
		brnz	.CkCommaFlag
		lda0	.KeyPos
		cmpe	#0b5h
		brz	.3$ 
		cmpe	#0dfh		
		brnz	.SyntaxError
.3$:						
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		cmpe	#0b0h		;bo is Simecolon ";"
		brz	.CkCommaFlagFirst
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#40h		;check	SDmode
		cmpe	#40h
		brz	.CheckSDmd
		lda	StateFlag
		anda	#07h		;check	SDmode		
		brnz	.CheckLRmd
		br	.SyntaxError
.CheckSDmd:		
		lda0	.CommaFlag
		cmpe	#0h
		brz	.Endck
		br	.SyntaxError
.CheckLRmd:				 	
		lda0	.CommaFlag
		cmpe	#0ffh
		brnz	.SyntaxError
.CkCommaFlag:	
		lda0	.SimeFlag
		cmpe	#02h
		brc	.SyntaxError		
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		brz	.CompSDmode
		lda0	.KeyPos
		cmpe	#0b5h
		brz	.4$
		cmpe	#0dfh
		brnz	.CompSDmode
		;br	.Endck			
.4$:		
		lda0	.CommaFlag
		cmpe	#0ffh 
		brz	.Endck
		lda0	.SimeFlag
		cmpe	#01h
		brz	.Endck				
		br 	.SynError	 		 
.CkCommaFlagFirst:
		lda0	.CommaFlag
		cmpe	#0h
		brnz	.SynError
		br 	.Endck	 
.CompSDmode:		
		lda0	.CommaFlag
		cmpe	#0h
		brz	.Endck
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h		;check	LRmode
		brz	.SynError
		lda0	.CommaFlag
		cmpe	#0ffh
		brz	.Endck		
		br	.SynError
.Endck:		
		lda	#01h
		sta	PP
		lda	#^(.DataEndCheck)
		sta	TPP
		lda	#@(.DataEndCheck)
		sta	TPH
		lda	#<(.DataEndCheck)
		sta	TPL
.SearchEnd:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.Endend
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.DataBuf
		brnz	.SearchEnd		
		br	.EndSymbor	
.Endend:	
		lda0	.DataBuf		
		cmpe	#0ah
		brc	.SyntaxError				
		lda0	.DmsCount
		cmpe	#0h
		brz	.EndSymbor
		br 	.EndSymbor
.SyntaxError:						
		lda	#02h
		sta0	ErrorFlag
		lda 	#0h		;set error site
		sta0	.TFlag
		lda0	.INDP
		deca
		sta0	.SFDP			
.EndSymbor:
		ret

;-------------------------------------------		
.StackCk:
		
		lda0	.BeforePari
		cmpe	#0h
		brz	.HeadCodCK
		lda0	.AfterPari
		cmpe	#01h
		brz	.NumCK
		cmpe	#02h
		brz	.AddDecCK
		cmpe	#03h
		brz	.AddDecCK
		cmpe	#04h
		brz	.MulDivCK
		cmpe	#05h
		brz	.MulDivCK
		cmpe	#06h
		brz	.LCCK
		cmpe	#07h
		brz	.RCCK
		cmpe	#08h
		brz	.FuncCK
		cmpe	#09h
		brz	.PointCK
		cmpe	#0ah
		brz	.DRGCK
		cmpe	#0bh
		brz	.SignDec
		cmpe	#0ch
		brz	.MemCLR
		cmpe	#0eh
		brz	.MemCmp
		cmpe	#0fh
		brz	.CommaFractDms
		cmpe	#10h
		brz	.CommaFractDms
		cmpe	#11h
		brz	.CommaFractDms
		cmpe	#12h
		brz	.DoSemicolon
		br	.EndStackCk
;-------------------------------------------		
.HeadCodCK:
		
		lda0	.DataBuf		
		cmpe	#0b0h
		brz	.DoSemicolon	
		lda	#01h
		sta	PP
		lda	#^(.HeadCheck)
		sta	TPP
		lda	#@(.HeadCheck)
		sta	TPH
		lda	#<(.HeadCheck)
		sta	TPL
.Searchhead:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.EndHead
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.DataBuf
		brnz	.Searchhead		
		br	.SynError
.EndHead:	
		lda0	.DataBuf
		cmpe	#0aah
		brz	.SynError
		cmpe	#0bbh
		brz	.SynError
		cmpe	#0ceh
		brz	.SynError				
		cmpe	#0b2h
		brz	.LCCK
		br	.EndStackCk
		
;-------------------------------------------							
.NumCK:
		lda0	.Buf1
		cmpe	#0b3h		;)
		brz	.SynError
		cmpe	#0d4h		;x!
		brz	.SynError
		cmpe	#0c8h		;X^-1
		brz	.SynError
		cmpe	#0d2h		;x!
		brz	.SynError
		cmpe	#0c5h		;X^-1
		brz	.SynError		
		cmpe	#0b7h
		brz	.CKdMS	
		lda0	.AfterPari
		cmpe	#0ah		;4/11
		brz	.SynError
		cmpe	#0eh
		brz	.SynError				
		br	.EndStackCk
.MemCmp:	
		lda0	.Buf1
		cmpe	#0b3h		;)
		brz	.EndStackCk		
		cmpe	#0aah		;4/11
		brz	.SynError
		cmpe	#0bbh		;4/11
		brz	.SynError
		cmpe	#0ceh		;4/11
		brz	.SynError
		;cmpe	#0d4h		;x!
		;brz	.SynError
		;cmpe	#0c8h		;X^-1
		;brz	.SynError
		;cmpe	#0d2h		;x!
		;brz	.SynError
		;cmpe	#0c5h		;X^-1
		;brz	.SynError
		cmpe	#0b7h
		brz	.CKdMS		
		br	.EndStackCk
.CKdMS:
		lda	#01h
		sta0	.DmsCount
		br	.EndStackCk			
;--------------------------------------------
.AddDecCK:
		lda	#01h
		sta	PP
		lda	#^(.SignCheck)
		sta	TPP
		lda	#@(.SignCheck)
		sta	TPH
		lda	#<(.SignCheck)
		sta	TPL
.SearchAD:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.EndAD
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.Buf1
		brnz	.SearchAD				
		br	.EndStackCk
.EndAD:		
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1
		sta0	.DataBuf
		cmpe	#0a1h
		brnc	.IsNumDt
		call	.CheckFuncd
		lda0	.AfterPari
		cmpe	#06h		;05h
		brnz	.SynError
.IsNumDt:				
		lda0	.Buf2		
		sta0	.DataBuf
		br	.EndStackCk				
;-------------------------------------------			
.MulDivCK:
		lda	#01h
		sta	PP
		lda	#^(.SignMUL)
		sta	TPP
		lda	#@(.SignMUL)
		sta	TPH
		lda	#<(.SignMUL)
		sta	TPL
.SearchMD:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.EndMD
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	.Buf1
		brnz	.SearchMD				
		br	.EndStackCk
.EndMD:		
		lda0	.Buf1		
		cmpe	#0a1h
		brnc	.EndStackCk	
		br 	.SynError
;-------------------------------------------		
.LCCK:
		lda0	.LRcnt
		inca
		sta0	.LRcnt
		br	.EndStackCk
.RCCK:						
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.Buf1
		sta0	.DataBuf		 
		call	.CheckMem
		lda0	.Buf2
		sta0	.DataBuf		
		lda0	.LRcnt
		deca
		sta0	.LRcnt
		cmpe	#0ffh
		brz	.SynError				
		lda0	.Buf1				
		cmpe	#0d4h		;x!
		brz	.EndStackCk
		cmpe	#0c8h		;X^-1
		brz	.EndStackCk
		cmpe	#0d2h		;x!
		brz	.EndStackCk
		cmpe	#0c5h		;X^-1
		brz	.EndStackCk
		cmpe	#0B3h		;)
		brz	.EndStackCk
		cmpe	#0b2h		;(
		brz	.SynError	
		cmpe	#0c3h		;Fraction
		brz	.SynError
		cmpe	#0b4h		;Comma
		brz	.SynError
		cmpe	#0b7h		;DMS		;2002.02.06
		brz	.EndStackCk	;.SynError
		cmpe	#0ah
		brnc	.EndStackCk				
		lda0	.AfterPari
		cmpe	#01h
		brz	.EndStackCk			
		br 	.SynError
;-------------------------------------------		
.FuncCK:
		lda0	.DataBuf		
		sta0	.DataBuf+1 		
		call	.CheckPari
		call	.CheckMem
		lda0	.AfterPari
		cmpe	#05h
		brz	.Function2		
		cmpe	#06h		;05h
		brz	.EndStackCk
		cmpe	#09h
		brz	.Function2
		cmpe	#0ah
		brz	.Function2 
		br	.EndStackCk
		
.Function2:						
		lda	#01h
		sta	PP
		lda	#^(.Function)
		sta	TPP
		lda	#@(.Function)
		sta	TPH
		lda	#<(.Function)
		sta	TPL
.Funct2:		
		ldv
		sta0	.DataBuf+1 
		lda0	.AfterPari
		cmpe	#09h
		brnz	.Paris08
		lda0	.DataBuf+1 	
		cmpe	#0abh
		brz	.EndFunction2
		br	.cmpeData
.Paris08:	
		lda0	.DataBuf+1 	
		cmpe	#0ffh
		brz	.EndFunction2
.cmpeData:		
		lda	#0h
		sta	PP
		lda0	.Buf1 
		cmpe	.DataBuf+1
		brnz	.Funct2	
		lda0	.DataBuf
		cmpe	#0d0h
		brz	.EnPolRec
		cmpe	#0d6h
		brz	.EnPolRec					
		br	.EndStackCk
.EndFunction2:
		lda0	.Buf1
		cmpe	#0ah
		brc	.SynError			
		br	.EndStackCk
.EnPolRec:
		lda0	.CommaFlag
		inca		
		sta0	.CommaFlag				
		br	.LCCK		

⌨️ 快捷键说明

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