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

📄 postfixvalume.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
		brnz	.6$	
		lda	#0h
		sta0	SignY		
.6$:		
		call	Addition
		call	.Z_trans_X			
		call	.SimeCounter
		call	.I_trans_Z
		br	.MarkDP2
.SimeERROR:
		lda	#02h
		sta0	ErrorFlag
		br	.MarkDP2		
;-------------------------------------------
;		Input 	Regdata
;-------------------------------------------

.DoLin:
		call	.X_trans_I		
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.LinInp
		br	.DoLRCLmode
.LinInp:		
		call	LR_Prepare
		call	.I_trans_Z
		br	.MarkDP2		
		
.DoLog:
		lda	#0h
		sta	PP
		call	.X_trans_I
		call	.Y_trans_B		
		call	Ln	
		call	.Z_trans_X
		call	.B_trans_Y
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.LogInp				
		br	.DoLRCLmode
.LogInp:					 
		call	LR_Prepare
		call	.I_trans_Z
		br	.MarkDP2		
.DoExp:
		lda	#0h
		sta	PP
		call	.X_trans_I		
		call	.Y_trans_X
		call	Ln	
		call	.Z_trans_Y
		call	.I_trans_X
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.ExpInp	
		br	.DoLRCLmode	
.ExpInp:	 
		call	LR_Prepare
		call	.I_trans_Z				
		br	.MarkDP2
.DoPwr:
		lda	#0h
		sta	PP	
		call	.X_trans_I
		call	.Y_trans_B	
		call	Ln	
		call	.Z_trans_S			
		call	.B_trans_X
		call	Ln	
		call	.Z_trans_Y		
		call	.S_trans_X
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.PwrInp
		br	.DoLRCLmode
.PwrInp:
		call	LR_Prepare
		call	.I_trans_Z				
		br	.MarkDP2
.DoInv:		
		lda	#0h
		sta	PP	
		call	.X_trans_I
		call	.Y_trans_B	
		call	.ReciX	
		call	.Z_trans_X
		call	.B_trans_Y
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.InvInpt
		br	.DoLRCLmode
.InvInpt:		
		call	LR_Prepare
		call	.I_trans_Z
		br	.MarkDP2
.DoQuad:
		call	.X_trans_I		
		lda0	.KeyPos
		cmpe	#0dfh
		brnz	.QuadInp
		br	.DoLRCLmode
.QuadInp:		
		call	QR_Prepare
		call	.I_trans_Z
		br	.MarkDP2
.DoLRCLmode:		
		call	.ClrX
		lda	#02h
		sta0	OperandX+6			
		call	.SimeCounter
		br	.MarkDP2											
;-------------------------------------------
.PercentEqu:
		decdp
		lda	i
		sta	DP
		lda	#02h
		sta	PP
		lda	i
		cmpe	#0a4h
		brz	.Pecadd
		cmpe	#0a5h
		brz	.Pecdec
		cmpe	#0a6h
		brz	.Pecmul
		cmpe	#0a7h
		brz	.Pecdiv	
		br	.IsEqu		;.EndPercentEqu
.Pecadd:
		lda	#0h
		sta	PP
		call	.Percent_Add
		br	.EndPercentEqu
.Pecdec:
		lda	#0h
		sta	PP
		call	.Percent_Dec
		br	.EndPercentEqu
.Pecmul:
		lda	#0h
		sta	PP
		call	.X_trans_B
		call	.Percent_Mul
		call	.B_trans_X
		lda	#>.SetFlag
		sta	PP
		lda	.SetFlag
		anda	#~80h
		ora	#80h
		sta	.SetFlag
		br	.EndPercentEqu
.Pecdiv:
		lda	#0h
		sta	PP
				 
		call	.Percent_Div		 		
		br	.EndPercentEqu
.EndPercentEqu:
		br	.MarkDP2		
;-------------------------------------------
.ClearrMem::
		lda	#01h
		sta	PP
		lda	StateFlag			
		anda	#88h			;;COMP && basen
		brnz	.CompClr	
		lda	StateFlag
		anda	#47h
		brz	.EndClearMem
		;call	QR_Scl
		;call	.MCL 
		;br	.EndClearMem
.CompClr:	
			
		call	.MCL
		call	.ClrZ
		call	.Z_trans_I
		;call	QR_Scl	
.EndClearMem:		
		ret
;-------------------------------------------		
.MarkDP1:
		lda	#0h
	 	sta0	.ErrorCnt
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.EndCalcVal
		lda	#02h
		sta	PP
		lda0	.P2DP
		sta	DP
		lda0	.P3DP
		sta	i		
		call	.StoResult
                lda0	.IndexDP
                sta     DP
                lda     #03h
                sta     PP
                lda    #0ffh
                sta    i               
                incdp
                lda0	.P2DP
                sta	i
                decdp
                lda	DP
                sta0	.IndexDP
                lda0	.P2DP
                inca
                sta0	.P2DP 
                lda	#01h
		sta0	.FinFlag               
                br     .EndCalcVal 						
.MarkDP2:
		lda	#0h
	 	sta0	.ErrorCnt	
		lda0	ErrorFlag
		cmpe	#0h
		brnz	.EndCalcVal
		lda	#02h
		sta	PP
		lda0	.P2DP
		sta	DP
		lda0	.P3DP
		sta	i		
		call	.StoResult
                lda0	.IndexDP
                sta     DP
                lda     #03h
                sta     PP
                lda    #0ffh
                sta    i
                incdp
                lda    #0ffh
                sta    i
                incdp
                lda0	.P2DP
                sta	i               
                lda0	.P2DP
                inca
                sta0	.P2DP                 
                lda	#01h
		sta0	.FinFlag             
                br     .EndCalcVal 							
.EndCalcVal:	
		
					
		ret
;-------------------------------------------		
.P3dataToZ:
		
		lda0	.PsValDP
		sta	DP		
		lda	#02h
		sta	PP		
		lda	i
		sta	DP				
.GetP3ToZ::		
		lda	#03h
		sta	PP
		lda	i
		sta0	SignZ		
		incdp		
		lda	i
		sta0	PointZ				
		lda	#0h
		sta	i		
		incdp
		lda	i
		sta0	OperandZ
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+1
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+2
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+3
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+4
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+5
		lda	#0h
		sta	i
		incdp
		lda	i
		sta0	OperandZ+6
		lda	#0h
		sta	i
		lda	#0h
		sta0	OperandZ+7
		call	CheckOutData		
		ret	
						
;-------------------------------------------		
.StoResult:	
		
		lda0	.P3DP
		cmpe	#0a4h			;0dfh
		brc	.StackError
		lda0	.P3DP
		sta	DP
		lda	#03h
		sta	PP
		lda0	SignZ
		sta	i
		incdp
		lda0	PointZ
		sta	i
		incdp
		lda0	OperandZ
		sta	i
		incdp
		lda0	OperandZ+1
		sta	i
		incdp
		lda0	OperandZ+2
		sta	i
		incdp
		lda0	OperandZ+3
		sta	i
		incdp
		lda0	OperandZ+4
		sta	i
		incdp
		lda0	OperandZ+5
		sta	i	
		incdp
		lda0	OperandZ+6
		sta	i
		incdp
		lda	DP
		sta0	.P3DP
		br	.EndStoResult
.StackError:
		lda	#03h
		sta0	ErrorFlag			
.EndStoResult:
		ret				
;-------------------------------------------
.PushSkData::
		lda	#03h
		sta	PP
		lda	#0h
		sta	DP
		sta0	Temp2
		lda	#50h
		sta	i
		incdp
		lda	DP
		sta0	Temp2							
		lda	#50h
		sta0	Temp1
.SearchPS:		
		lda0	Temp1
		sta	DP
		lda	#02h
		sta	PP
		lda	i
		cmpe	#0eeh
		brz	.EndPushSkData
		cmpe	#0ffh
		brz	.StoDataDP
		cmpe	#0feh
		brz	.StoDataDP
		incdp
		lda	DP
		sta0	Temp1
		br	.SearchPS			
.StoDataDP:		
		call	.JumpOFF
		lda	#03h
		sta	PP
		lda0	Temp2
		sta	DP
		lda0	Temp1		
		sta	i			
		lda0	Temp2
		inca
		sta0	Temp2		
		br	.SearchPS
.EndPushSkData::

		ret			
;-------------------------------------------
.JumpOFF:
		lda	#02h
		sta	PP
		lda0	Temp1
		inca
		sta0	Temp1
		sta	DP	
		lda	i	
		cmpe	#0eeh
		brz	.EndSetDP
		cmpe	#0ffh
		brnz	.EndSetDP				
		br	.JumpOFF
.EndSetDP:	
		 
 							
		ret					
;-------------------------------------------			
.SaveToZ::
		call	.ClrZ
		lda	#0h
		sta0	.PFlag
		sta0	.Buf2
		sta0	.NumCnt
		sta0	.ZeroFlag
		sta0	.PointFlag
		
		lda	#0h
		sta	PP		
		lda 	#OperandZ
		sta0	.STDP
			
.Num2OPC:	
		lda	#02h
		sta	PP
		lda0	.PsValDP
		sta	DP
		lda	i		
		sta0	.DataBuf 			
		cmpe	#0ffh
		brz	.SetOPdata
		cmpe	#0c3h
		brz	.SetOPdata
		cmpe	#0eeh
		brz	.SetOPdata
		cmpe	#0a0h
		brz	.CntPoint		
.StartSavenum:
		lda0	.Buf2
		cmpe	#01h
		brz	.SaveInput	
		lda0	.DataBuf
		cmpe	#0h
		brz	.NextInput
		lda	#01h		
		sta0	.Buf2		
.SaveInput:							
		lda0	.PFlag
		anda	#0fh
		cmpe	#0h
		brz	.NumIsL
.NumIsR:		
		lda0	.NumCnt
		cmpe	#0fh
		brc	.AddPSDP		
		lda	#0h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	.DataBuf+1
		ora	.DataBuf		 
		sta0	.DataBuf+1				
		cmpe	#0h
		brnz	.NextDTr
		lda0	.Buf2
		cmpe	#01h
		brnz	.NextInput
		lda0	.ZeroFlag
		cmpe	#0h
		brz	.NextDPr
.NextDTr:	
		lda0	.DataBuf+1	
		sta	i
		lda	#01h
		sta0	.ZeroFlag
		lda0	.NumCnt
		inca
		sta0	.NumCnt		
		lda0	.STDP
		inca
		sta0	.STDP
		lda0	.PFlag
		anda	#0f0h
		sta0	.PFlag
.NextDPr:		
		lda0	.PsValDP
		inca
		sta0	.PsValDP
		lda0	.PointFlag
		cmpe	#01h
		brnz	.Num2OPC
		lda0	PointZ
		inca
		sta0	PointZ
		br	.Num2OPC		
.NumIsL:
		lda0	.NumCnt
		cmpe	#0fh
		brc	.AddPSDP
		lda0	.DataBuf 
		call	.SftLeft
		lda	#0h
		sta	PP
		lda0	.STDP
		sta	DP
		lda	i
		sta0	.DataBuf+1
		ora	.DataBuf 
		sta0	.DataBuf+1
		cmpe	#0h
		brnz	.NextDTl
		lda0	.Buf2
		cmpe	#01h
		brnz	.NextInput
		lda0	.ZeroFlag
		cmpe	#0h
		brz	.NextDPl
.NextDTl:	
		lda0	.DataBuf+1	
		sta	i 		
		lda	#01h
		sta0	.ZeroFlag
		lda0	.NumCnt
		inca
		sta0	.NumCnt
		lda0	.PFlag
		inca
		sta0	.PFlag	
.NextDPl:		
		lda0	.PsValDP
		inca
		sta0	.PsValDP	
		lda0	.PointFlag
		cmpe	#01h 
		brnz	.Num2OPC
		lda0	PointZ
		inca
		sta0	PointZ	
		br	.Num2OPC	
.NextInput:
		lda0	.Buf2
		cmpe	#01h
		brz	.SaveInput
		lda0	.PsValDP
		inca
		sta0	.PsValDP
		br	.Num2OPC
;-------------------------------------------		
.CntPoint:					
		lda0	.PsValDP
		inca
		sta0	.PsValDP
		lda0	.PointFlag			
		inca
		sta0	.PointFlag
		lda	#01h
		sta0	.Buf2
		br	.Num2OPC
.ChangSign:
		lda  	#01h		
		sta0	SignZ		
		lda0	.PsValDP
		inca
		sta0	.PsValDP	
		br	.Num2OPC
.AddPSDP:
		lda0	.PsValDP
		inca
		sta0	.PsValDP
		lda0	.NumCnt
		inca
		sta0	.NumCnt
		lda0	.PointFlag
		cmpe	#01h 
		brnz	.Num2OPC
		lda0	PointZ
		inca
		sta0	PointZ						
		br	.Num2OPC
;-------------------------------------------		
.SetOPdata:
		lda0	.PsValDP
		inca
		sta0	.PsValDP		
		lda	#0h
		sta	PP		
		lda0	.NumCnt
		suba	PointZ
		cmpe	#0eh
		brnc	.NormalSus
		lda	#0h
		sta 	PP
		lda	#0h
		adda	PointZ		
		suba	.NumCnt
		adda	#0eh
		sta0	PointZ		;PointZ	= 0ff-allnum-PointZ-14
		br	.EndSaveToZ		
.NormalSus:	
		lda	#0h
		sta 	PP		
		lda	#0eh
		suba	.NumCnt
		adda	PointZ
		sta0	PointZ						
		
.EndSaveToZ:	
		lda	#0h
		sta0	OperandZ+5		;get 10 bytes
		sta0	OperandZ+6		;
		sta0	OperandZ+7
		call	CheckOutData			
		ret
.PointError:
		lda	#02h
		sta0	ErrorFlag
		br	.EndSaveToZ		
;-------------------------------------------
.ClrSK:
		
		lda	#02h
		sta	PP
		lda	#0f0h
		sta	DP
.ClrSKC:
		lda	DP
		cmpe	#0ffh
		brz	.ClrP3SK
		lda	#0h
		sta	i
		incdp
		br	.ClrSKC
.ClrP3SK:
		lda	#03h
		sta	PP
		lda	#0h
		sta	DP
.ClrP3SKC:
		lda	DP
		cmpe	#4fh
		brz	.EndClrSKC
		lda	#0h
		sta	i
		incdp
		br	.ClrP3SKC		
.EndClrSKC:	
	
		ret
;===========================================
.MoveP3DP:
		lda	#03h
		sta	PP
		lda	#0h		
		sta0	.Buf2
		sta0	.Buf1
.StartMove:		
		lda0	.Buf2
		sta	DP
		lda	i
		sta0	.DataBuf
		cmpe	#0h
		brz	.EndMoveP3DP		
		cmpe	#0ffh
		brz	.IncDP
.IncDP3:	
		lda	#0h
		sta	i
		lda0	.Buf1
		sta	DP
		lda	i
		cmpe	#0h
		brz	.AddrNull
		lda0	.Buf1
		inca
		sta0	.Buf1
		br	.IncDP3
.AddrNull:		
		lda0	.DataBuf
		sta	i			
		lda0	.Buf2
		inca
		sta0	.Buf2
		lda0	.Buf1
		inca
		sta0	.Buf1
		br	.StartMove
	
.IncDP:
		lda	#0h
		sta	i
		lda0	.Buf2
		inca
		sta0	.Buf2
		br	.StartMove
		
.EndMoveP3DP:
		ret
;===========================================		
.ReSetP3ST:
		
		lda	#50h
		sta0	.P3DP	
		lda	#0h	
		sta0	.Buf2
		lda	#0f0h
		sta0	.P2DP
.StartChang:			
		lda	#03h
		sta	PP
		lda0	.Buf2
		sta	DP
		lda	i
		sta	DP		
		cmpe	#0h
		brz	.EndReSetP3STK
		cmpe	#0f0h
		brnc	.Nextcmpe
		lda	#02h
		sta	PP
		lda	i
		sta	DP								
		call	.GetP3ToZ
		lda	#02h
		sta	PP
		lda0	.P2DP
		sta	DP
		lda0	.P3DP
		sta	i
		incdp
		lda	DP
		sta0	.P2DP		
		call	.StoResult
		lda	#03h
		sta	PP
		lda0	.Buf2
		sta	DP
		lda0	.P2DP
		deca
		sta	i
.Nextcmpe:		
		lda0	.Buf2

⌨️ 快捷键说明

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