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

📄 baseposfix.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
字号:
;/subrutine name : BasenPosfix.asm
;/user bady      : HE
;/fast clock     : 4Mhz
;/slow clock     : 32768khz
;/programer      : Alton
.ADD		EQU		0xa4
.DEC		EQU		0xa5
.MUL		EQU		0xa6
.DIV		EQU		0xa7
.LC		EQU		0xb2
.RC		EQU		0xb3
.And		EQU		0x20
.Or		EQU		0x21
.Xnor		EQU		0x22
.Xor		EQU		0x23
.Not		EQU		0x24
.Neg		EQU		0x25

			.area   basepostfix(code,rel)
.BaseNPosfix::
		call	.InitBasePos
.TransbaseN:
		lda	#>.INDP
		sta	PP		 
		lda0	.INDP
		cmpe	.DataDP
		brz	.EndBasePos		
		lda	#02h
		sta	PP
		lda0	.INDP	
		sta	DP
		lda	i
		sta0	.DataBuf
		cmpe	#10h		;0----9 A---F
		brc	.CmpOperand
		br	.DOnum
		 
.NextDp:		
		lda0	.INDP
		inca
		sta0	.INDP
		br	.TransbaseN
.SynError:
		lda	#02h
		sta0	ErrorFlag
		br	.EedBasen		
;-------------------------------------------		
.EndBasePos:
		
		lda	#02h
		sta	PP
		lda0	.PSDP	
		sta	DP
		decdp	
		lda	DP	
		cmpe	#0ffh
		brz	.BasePosEnd
		call	.ClosEndPS

.BasePosEnd:
		lda0	.DecFlag
		anda	#01h
		brz	1$
		lda0	.DataBuf
		sta0	.Buf3		
		lda	#0a8h
		sta0	.DataBuf
		lda	#0h
		sta0	.DecFlag
		call	.StoStack
		lda0	.Buf3
		sta0	.DataBuf	
1$:		
		lda	#03h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	DP
		cmpe	#0ffh
		brz	.PosEnd
		lda	i
		sta0	.DataBuf
		cmpe	#0h
		brz	.PosEnd
		cmpe	#.LC
		brz	.NotSave
		call	.NoSignal		
		call	.ClosEndPS
.NotSave:		
		lda0	.STDP
		deca
		sta0	.STDP
		br	.BasePosEnd
.PosEnd:	
		lda	#02h
		sta	PP
		lda0	.PSDP
		sta	DP
		decdp
		lda	#0eeh
		sta	i
.EedBasen:		
		ret					
;-------------------------------------------
.CmpOperand:		
		call	.CheckMem
		call	.Paricmp
		lda0	.DataBuf
		cmpe	#.LC
		brz	.DOLC
		cmpe	#.RC
		brz	.DORC
		lda0	.AfterPari
		sta0	.BeforePari
		lda0	.AfterPari
		cmpe	#01h
		brz	.DOmemSto
		cmpe	#04h
		brz	.DOnum		
		cmpe	#0eh
		brz	.DONotNeg		
		cmpe	#0ch
		brz	.DOaddec
		cmpe	#0dh
		brz	.DOmuldiv	
		cmpe	#0fh
		brz	.TransCode
		br	.DO2Operand
;-------------------------------------------
.DOLC:
		lda0	.INDP
		cmpe	#0h
		brz	.TOStack
		lda0	.Buf1
		cmpe	#.LC
		brz	.TOStack
		cmpe	#.RC
		brz	.RCAddMulCls		
		call	.GetPari		
		lda0	.AfterPari
		cmpe	#0h
		brz	.TOStack
		cmpe	#01h
		brz	.LCAddMulCls
		cmpe	#04h
		brz	.LCAddMulCls
		cmpe	#07h
		brz	.TOStack
		cmpe	#08h
		brz	.TOStack			
		cmpe	#09h
		brz	.TOStack
		cmpe	#0ch
		brz	.TOStack
		cmpe	#0dh
		brz	.TOStack
		cmpe	#0eh
		brz	.TOStack
		br	.NextDp
;-------------------------------------------
.DORC:		
		lda0	.DataBuf
		sta0	.Buf1
		call	.ClosEndPS
		call	.Addnegtive
		call	.ClosEndPS
		call	.CkRightC
		br	.NextDp
;-------------------------------------------
.DOmemSto:
		
		lda0	.INDP
		cmpe	#0h
		brz	1$				
		call	.GetPari		
		lda0	.AfterPari
		cmpe	#01h
		brz	.MemAddMulCls
		cmpe	#04h
		brz	.MemAddMulCls
		br	.Sto2PS
1$:		
		lda0	.DataBuf
		sta0	.Buf3
		lda	#26h
		sta0	.DataBuf			 
		call	.StoStack
		lda0	.Buf3
		sta0	.DataBuf	
.Sto2PS:
		call	.NotSign	;.PosFixSto
		br	.NextDp	
;-------------------------------------------		
.DOnum:
		lda0	.INDP
		cmpe	#0h
		brz	.AddBase
		call	.GetPari		
		lda0	.AfterPari
		cmpe	#04h
		brz	.Sto2PS	
		cmpe	#0fh
		brz	.Sto2PS		
		br 	.AddBase				
;-------------------------------------------
.DOaddec:
		lda0	.INDP
		cmpe	#0h
		brz	.Signal	
		
		call	.GetPari
		lda0	.Buf1
		cmpe	#.LC
		brz	1$
		cmpe	#.RC
		brz	2$	;.PushStackCls		
		lda0	.AfterPari
		cmpe	#01h
		brz	2$	;.PushStackCls
		cmpe	#04h
		brz	2$	;.PushStackCls			
1$:		
		br	.Signal		;.PushStackCls	
2$:
		call	.Addnegtive
		br	.PushStackCls	
;-------------------------------------------
.DOmuldiv:
		call	.Addnegtive
		br	.PushStackCls
;-------------------------------------------
.TransCode:
		lda0	.INDP
		cmpe	#0h
		brz	.PushStack 
		lda0	.Buf1
		cmpe	#.LC
		brz	.PushStack
		call	.GetPari
		lda0	.AfterPari
		cmpe	#01h
		brz	.AddMulCls
		cmpe	#04h
		brz	.AddMulCls
		br	.PushStack
		
;-------------------------------------------		 
.DO2Operand:
		call	.GetPari
		lda0	.AfterPari
		cmpe	#0h
		brz	.PushStack
		cmpe	#01h
		brz	.PushStackCls 
		cmpe	#04h
		brz	.PushStackCls 
		br	.NextDp	
;-------------------------------------------		
.DONotNeg:
		lda0	.INDP
		cmpe	#0h
		brz	.TOStack
		call	.GetPari
		lda0	.Buf1
		cmpe	#.LC
		brz	.TOStack
		cmpe	#.RC
		brz	.AddMul 
		lda0	.AfterPari
		cmpe	#01h
		brz	.AddMulCls
		cmpe	#04h
		brz	.AddMulCls
		cmpe	#0dh
		brz	.PushStack
		cmpe	#0ch
		brz	.PushStack
		cmpe	#09h
		brz	.PushStack
		cmpe	#08h
		brz	.PushStack
		cmpe	#07h
		brz	.PushStack
		cmpe	#0eh
		brz	.TOStack
		cmpe	#0fh
		brz	.SynError
		br	.NextDp	
;-------------------------------------------
.AddBase:
		call	.AddBaseUnit
		br	.NextDp	
.AddBaseUnit:		
		call	.BaseModeChk
		lda0	.DataBuf
		sta0	.Buf3
		lda0	.DataBuf+1
		sta0	.DataBuf
		call	.CheckMem		
		call	.Paricmp
		lda0	.AfterPari
		sta0	.BeforePari
		call	.Push2Stack
		lda0	.Buf3 
		sta0	.DataBuf
		call	.StoFuncPS		
		lda0	.DataBuf 
		sta0	.Buf1
		ret
							 
;-------------------------------------------		
.GetPari::	
					
		lda0	.DataBuf
		sta0	.Buf2
		lda0	.INDP
		cmpe	#0h
		brz	.Firstdp
		lda0	.Buf1
		sta0	.DataBuf
.Firstdp:						
		call	.CheckMem
		call	.Paricmp
		lda0	.Buf2
		sta0	.DataBuf									
		ret
;-------------------------------------------
.Signal:
		lda0	.DataBuf
		cmpe	#.ADD
		brz	.IsADD
		lda0	.DecFlag
		inca
		sta0	.DecFlag
.IsADD:
		lda0	.DataBuf
		sta0	.Buf1
		br	.NextDp			
;-------------------------------------------
.PushStackCls:
		call	.ClosEndPS
.PushStack:
		lda0	.DataBuf
		sta0	.Buf1		
		call	.Push2Stack
		br	.NextDp					
;-------------------------------------------		
.TOStack:
		lda0	.DecFlag
		anda	#01h
		brz	1$
		lda0	.DataBuf
		sta0	.Buf3		
		lda	#0a8h
		sta0	.DataBuf
		lda	#0h
		sta0	.DecFlag
		call	.StoStack
		lda0	.Buf3
		sta0	.DataBuf	
1$:		
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.NextDp	
.LCAddMulCls:
		call	.Addnegtive
		call	.ClosEndPS
.LCAddMul:
		lda	#03h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		cmpe	#2Ah
		brc	11$
		cmpe	#26h
		brnc	11$
		sta0	.DataBuf	
		lda0	.STDP
		deca
		sta0	.STDP
		call	.StoFuncPS
		call	.ClosEndPS
11$:		
		lda0	.DataBuf		
		sta0	.Buf1
		lda	#.MUL
		sta0	.DataBuf
		call	.StoStack
		lda 	#.LC
		sta0	.DataBuf
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1			
		br	.NextDp	
.RCAddMulCls:	
			
		call	.ClosEndPS
.RCAddMul:
		lda0	.DataBuf		
		sta0	.Buf1
		lda	#.MUL
		sta0	.DataBuf
		call	.CheckMem		
		call	.Paricmp
		lda0	.AfterPari
		sta0	.BeforePari
		call	.StoStack
		lda 	#.LC
		sta0	.DataBuf
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.NextDp		
		
		
;-------------------------------------------
.AddMulCls: 		
		call	.ClosEndPS
.AddMul:
		lda0	.DataBuf
		sta0	.Buf3
		lda	#.MUL
		sta0	.DataBuf
		call	.CheckMem		
		call	.Paricmp
		lda0	.AfterPari
		sta0	.BeforePari
		call	.Push2Stack
		lda0	.Buf3
		sta0	.DataBuf
		call	.CheckMem
		call	.Paricmp
		lda0	.AfterPari
		sta0	.BeforePari
		call	.Push2Stack		
		br	.NextDp	
;-------------------------------------------		
.MemAddMulCls:
		lda0	.DataBuf
		sta0	.Buf3		 
		call	.Addnegtive
		call	.ClosEndPS
.MemAddMul:		
		lda	#03h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		cmpe	#2Ah
		brc	12$
		cmpe	#26h
		brnc	12$
		sta0	.DataBuf	
		lda0	.STDP
		deca
		sta0	.STDP
		call	.StoFuncPS
		call	.ClosEndPS
12$:		
		lda0	.DataBuf		
		sta0	.Buf1
		lda	#.MUL
		sta0	.DataBuf
		call	.StoStack
		lda0	.Buf3
		sta0	.DataBuf
		call	.StoFuncPS
		lda0	.DataBuf
		sta0	.Buf1			
		br	.NextDp	

					
;-------------------------------------------		
.PosFixSto:	
		lda0	.DecFlag
		anda	#01h
		brz	.NotSign
		lda	#0h
		sta0	.DecFlag
		lda0	.DataBuf
		sta0	.Buf3		
		lda	#0a8h
		sta0	.DataBuf
		lda	#0h
		sta0	.DecFlag
		call	.StoStack
		lda0	.Buf3
		sta0	.DataBuf					
.NotSign:		
		lda	#02h
		sta	PP
		lda0	.PSDP
		sta	DP
		lda0	.DataBuf
		sta	i
		lda0	.PSDP
		inca
		sta0	.PSDP
		lda0	.DataBuf
		sta0	.Buf1	 	
		ret	
;-------------------------------------------
.Push2Stack:
		lda0	.DataBuf
		sta0	.Buf2
		lda	#03h
		sta	PP
		lda0	.STDP
		sta	DP				
		cmpe	#0ffh
		brz	.Fstdp			
		lda	i
		cmpe	#0h
		brz	.Fstdp
		cmpe	#.LC
		brz	.Fstdp
		sta0	.DataBuf		
		call	.CheckMem
		call	.Paricmp
		lda	#0h
		sta	PP
		lda0	.BeforePari
		suba	.AfterPari
		brz	.PopStk
		brnc	.PopStk	
		lda0	.Buf2
		sta0	.DataBuf			
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1
		br	.EndPushStk
.Fstdp:
		call	.StoStack
		lda0	.DataBuf
		sta0	.Buf1		
		br	.EndPushStk			
.PopStk:
		
		call	.PosFixSto
		call	.ClosEndPS
		
		lda0	.Buf3
		sta0	.DataBuf		
		lda0	.Buf2
		sta0	.DataBuf
		lda0	.STDP
		deca
		sta0	.STDP
		cmpe	#0ffh
		brnz	.Push2Stack		 
		br	.Fstdp	
		 	
.EndPushStk:
		
		ret
.Addnegtive::		
		call	.ClosEndPS
		lda0	.DecFlag
		anda	#01h
		brz	1$
		lda	#0h
		sta0	.DecFlag
		lda0	.DataBuf
		sta0	.Buf3		
		lda	#0a8h
		sta0	.DataBuf
		lda	#0h
		sta0	.DecFlag
		call	.StoFuncPS
		lda0	.Buf3
		sta0	.DataBuf
1$:																						 
		ret
;-------------------------------------------
.Paricmp::
		lda0	.DataBuf
		cmpe	#10h
		brc	.OP1
		lda	#04h
		sta0	.AfterPari			
		br	.EndParicmp
.OP1:		
		cmpe	#.LC
		brnz	.OP2
		lda	#0h
		sta0	.AfterPari
		br	.EndParicmp
.OP2:
		cmpe	#.RC
		brnz	.OP3
		lda	#0h
		sta0	.AfterPari
		br	.EndParicmp
.OP3:
		cmpe	#.Xor
		brnz	.OP4
		lda	#07h
		sta0	.AfterPari
		br	.EndParicmp
.OP4:
		cmpe	#.Xnor
		brnz	.OP5
		lda	#07h
		sta0	.AfterPari
		br	.EndParicmp
.OP5:
		cmpe	#.Or
		brnz	.OP6
		lda	#07h		;8
		sta0	.AfterPari
		br	.EndParicmp
.OP6:	
		cmpe	#.And
		brnz	.OP7
		lda	#09h
		sta0	.AfterPari
		br	.EndParicmp
.OP7:	
		cmpe	#.Not
		brnz	.OP8
		lda	#0eh
		sta0	.AfterPari
		br	.EndParicmp
.OP8:
		cmpe	#.Neg
		brnz	.OP9
		lda	#0eh
		sta0	.AfterPari
		br	.EndParicmp
.OP9:	
		cmpe	#.ADD
		brnz	.OP10
		lda	#0ch
		sta0	.AfterPari
		br	.EndParicmp
.OP10:	
		cmpe	#.DEC
		brnz	.OP11
		lda	#0ch
		sta0	.AfterPari
		br	.EndParicmp
.OP11:		
		cmpe	#.MUL
		brnz	.OP12
		lda	#0dh
		sta0	.AfterPari
		br	.EndParicmp
.OP12:
		cmpe	#.DIV
		brnz	.OP13
		lda	#0dh
		sta0	.AfterPari
		br	.EndParicmp
.OP13:
		cmpe	#26h
		brnz	.OP14
		lda	#0fh
		sta0	.AfterPari
		br	.EndParicmp
.OP14:
		cmpe	#27h
		brnz	.OP15
		lda	#0fh
		sta0	.AfterPari
		br	.EndParicmp
.OP15:
		cmpe	#28h
		brnz	.OP16
		lda	#0fh
		sta0	.AfterPari
		br	.EndParicmp
.OP16:	
		cmpe	#29h
		brnz	.OP17
		lda	#0fh
		sta0	.AfterPari
		br	.EndParicmp
.OP17:
		cmpe	#0a8h
		brnz	.EndParicmp
		lda	#0eh
		sta0	.AfterPari
		br	.EndParicmp
.EndParicmp:
		ret
	
;-------------------------------------------		
.InitBasePos:		
		lda	#50h
		sta0	.PSDP		;Postfix dp
		lda	#0h
		sta0	.STDP		;stack dp
		lda	#0h			
		sta0	.INDP		
		sta0	.Buf1
		sta0	.DataBuf
		sta0	.BeforePari
		sta0	.DecFlag
		sta0	.AfterPari		
		call	.ClrP2
		call	.ClrP3
	
		 
.EndInitBasePos:		
		ret			

⌨️ 快捷键说明

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