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

📄 calctools.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                        lda     .M_exp_Y
                        sta     PointZ
                        call    CheckOutData
                        lda     #OperandZ
                        sta     Addr1
                        call    CheckData
                        lda     DpCount
                        deca
                        sta     Temp1
                        brnc    .38$
                        lda     PointZ
                        suba    Temp1
                        cmpe    #99
                        brnc    .38$
                        brz     .38$
                        lda     PointZ
                        suba    Temp1
                        cmpe    #(256-99)
                        brc     .38$
.ErrFlag:                        
                        lda     #02
                        sta     ErrorFlag
.38$:
                        ret  
;---------------------------------------------------------
;			ENG
;---------------------------------------------------------
.ENG::			
			call	.Z_trans_X
			lda	#0h
			sta	PP
			sta0	SignY
			sta0    PointY
			call	.ClrY
			lda	#10h
			sta0	OperandY+5
			call	Division			
			ret
;---------------------------------------------------------
.OPZ2RND::
			lda	#0h
			sta	PP	
			lda0	PointZ
			sta0	.Buf2		
			call	.GetDpCount
			lda0	DpCount
			sta0	.Buf1
			lda	#01h
			sta	PP				
			lda	pzdispbf
			sta0	OperandZ
			lda	pzdispbf+1
			sta0	OperandZ+1	
			lda	pzdispbf+2
			sta0	OperandZ+2
			lda	pzdispbf+3
			sta0	OperandZ+3			
			lda	pzdispbf+4
			sta0	OperandZ+4
			lda	pzdispbf+5
			sta0	OperandZ+5			
			lda	pzdispbf+6
			sta0	OperandZ+6
			lda	#0h
			sta	PP			
			call	.GetDpCount
			lda0	.Buf1
			suba	DpCount 		
			sta0	.Buf1
			lda0	.Buf2
			suba	.Buf1
			sta0	PointZ










.if 0			 			 		
			lda	#0h
			sta	PP			
			call	.GetDpCount
			lda0	DpCount
			sta0	.Buf2						
			lda	#01h
			sta	PP
			lda	DispFlag
			anda	#0fh
			sta0	.Buf1
			lda	DispFlag
			anda	#0f0h
			cmpe	#40h		;Fix
			brnz	1$
			call	.ClrX
			lda	#01h
			sta0	OperandZ+6
			call	.Z_trans_Y
			call	Subtration
			lda0	SignZ
			cmpe	#01h
			brz	1$			
			lda0	.Buf1
			inca
			sta0	.Buf1			
1$:			
			lda	#0h
			sta	PP
			call	.I_trans_Z
			call	.ShiftZdata
							
			ret
.ShiftZdata:
			lda0	.Buf2
			cmpe	.Buf1
			brz	.Endshiftz
			call	ShiftToR
			lda0	PointZ
			deca
			sta0	PointZ
			lda0	.Buf2
			deca
			sta0	.Buf2
			br	.ShiftZdata
.Endshiftz:
			lda0	OperandZ+7
			anda	#0f0h
			cmpe	#50h
			brnc	2$
			lda	#0h
			sta0	OperandZ+7
			call	.ClrX
			lda	#01h
			sta0	OperandX+6
			lda0	PointZ
			sta0	PointX
			lda0	SignZ
			sta0	SignX
			call	.Z_trans_Y
			call	Addition
2$:
.endif
			ret						 
;-------------------------------------------			
.CopyData::			
			 
			lda	#0ah		;09 2002 3 5
			sta0	.Counter
.DataCopy:					
                        lda0	.Counter
                        cmpe	#0h
                        brz	.EndCopy
                        lda0 	.PXPP
                        sta	PP
                        lda0 	.PXDP
                        sta	DP
                        lda	i
                        sta0	.Data
                        lda0	.PXDP
                        inca
                        sta0	.PXDP
                        lda0	.PYPP
                        sta	PP
                        lda0	.PYDP
                        sta	DP
                        lda0	.Data
                        sta	i
                        lda0	.PYDP
                        inca
                        sta0	.PYDP  
                        lda0	.Counter                  
                        deca
                        sta0	.Counter
                        br	.DataCopy
.EndCopy:
			
			lda	#0h			
			sta	PP
			ret    

;-------------------------------------------
.ClearData::
			lda0 	.PXPP
			sta	PP
			lda0	.PXDP
			sta	DP
			lda	#0ah		;ah
			sta0	.Counter
.DataClr:			
			lda0	.Counter
			cmpe	#0h
			brz	.EndClr			
			lda	#0h
			sta	i
			incdp
			lda0	.Counter
			deca
			sta0	.Counter
			br	.DataClr
.EndClr:										
			ret
;-------------------------------------------
.Input2Formula::
			lda	#02h
			sta0	.PXPP
			lda	#01h
			sta0	.PYPP 			
			lda	#0h
			sta0	.PXDP
			lda	#0b0h
			sta0	.PYDP 
			call	.Copyformula
			ret
;-------------------------------------------
.Formula2Input::
			lda	#01h
			sta0	.PXPP
			lda	#02h
			sta0	.PYPP 			
			lda	#0b0h
			sta0	.PXDP
			lda	#0h
			sta0	.PYDP 
			call	.Copyformula
			ret			
			
;-------------------------------------------			
.Copyformula::			
			
			lda	#79 
			sta0	.Counter
.formulaCopy:					
                        lda0	.Counter
                        cmpe	#0h
                        brz	.EndCopyformula
                        lda0 	.PXPP
                        sta	PP
                        lda0 	.PXDP
                        sta	DP
                        lda	i
                        sta0	.Data
                        lda0	.PXDP
                        inca
                        sta0	.PXDP
                        lda0	.PYPP
                        sta	PP
                        lda0	.PYDP
                        sta	DP
                        lda0	.Data
                        sta	i
                        lda0	.PYDP
                        inca
                        sta0	.PYDP  
                        lda0	.Counter                  
                        deca
                        sta0	.Counter
                        br	.DataCopy
.EndCopyformula:
			
			lda	#0h			
			sta	PP
			ret  
;/*-----(clear operand X)-----------------*/		
.ClrFa::
			lda 	#>SignFa
			sta0	.PXPP
			lda 	#<SignFa
			sta0	.PXDP
			call	.ClearData					
			ret				  			
;/*-----(clear operand X)-----------------*/		
.ClrX::
			lda 	#>SignX
			sta0	.PXPP
			lda 	#<SignX
			sta0	.PXDP
			call	.ClearData					
			ret	
				
;/*-----(clear operand Y)-----------------*/		
.ClrY::
			lda 	#>SignY
			sta0	.PXPP
			lda	#<SignY
			sta0	.PXDP
			call	.ClearData
			ret						
;/*-----(clear operand Z)-----------------*/
.ClrZ:: 
			lda 	#>SignZ
			sta0	.PXPP
			lda	#<SignZ
			sta0	.PXDP
			call	.ClearData
			ret
;/*-----(PUT 100 TO OperandY)-------------*/		
.Put_100_to_OperandY:
			call	.ClrY	
			lda	#01h
			sta0	OperandY+5
			ret
;/*-----(PUT 10 TO OperandX log 10)--------*/
		
.Put_10_to_OperandX:
			call	.ClrX
			lda	#10h
			sta0	OperandX+6
			ret	
;/*-----(PUT 1 TO OperandX 1/X)-------------*/
		
.Put_1_to_OperandX::
			call	.ClrX
			lda	#01h
			sta0	OperandX+6			
			ret	
;-------(X_Squ	)----------------------------	
.X_Squ::
			lda 	#<SignX
			sta0	.PXDP
			lda	#<SignY
			sta0	.PYDP
			lda 	#>SignX
			sta0	.PXPP
			lda	#>SignY
			sta0	.PYPP
			call	.CopyData					
			ret
                     
;----------------------------------------------
.ClearInt::	
			lda	#>PointY
			sta	PP	
			lda	#0eh
			sta	PointY
			lda0	PointZ
			cmpe	#0fh
			brc	.NoPoint
			lda	#OperandZ
			sta	DP
.DelInt:		
			lda	PointY		
			cmpe	PointZ
			brz	.EndGetPoint
			lda	PointY	
			deca
			sta	PointY
			lda	i
			anda	#0fh
			sta	i
			lda	PointY		
			cmpe	PointZ	
			brz	.EndGetPoint
			lda	PointY	
			deca
			sta	PointY
			lda	i 
			anda	#0f0h
			sta	i
			incdp	
			br	.DelInt		
.NoPoint:	
			 
			call	.ClrZ
			ret
.EndGetPoint:
			ret		
;------------------------------------------		
		
.DelPoint::	
			lda	#>PointY
			sta	PP
			lda0	PointZ
			cmpe	#156
			brc	.NoInt
			cmpe	#0fh
			brnc	.Under14	
			call	.ClrZ
			br	.NoInt
.Under14:			
			lda	#0fh
			sta	PointY
			lda	#OperandZ
			deca
			sta	DP	
.ClearPoint:			
			lda	PointY
			cmpe	PointZ
			brc	.IsInteven
			lda	i
			anda	#0fh
			sta	i
			lda	PointY
			cmpe	#0ffh
			brz	.NoInt	
.IsInteven:		
			lda	PointY
			deca
			sta	PointY		
			lda	PointY
			cmpe	PointZ
			brc	.IsIntodd
			lda	PointY
			cmpe	#0ffh
			brz	.NoInt	
			lda	i
			anda	#0f0h
			sta	i
.IsIntodd:		
			lda	PointY
			deca
			sta	PointY
			cmpe	#0ffh
			brz	.NoInt
			incdp
			br	.ClearPoint
.NoInt:		
			lda	#0h
			sta0	OperandZ+7
			call	CheckOutData
		
			ret
;-------------------------------------------
.Random::
			lda0	.RandCnt
			cmpe	#0ffh
			brnz	.AddCnt	
			lda	#0h
			sta0	.RandCnt
.AddCnt:	
			lda0	.RandCnt
			adda	#80h
			sta0	.RandCnt
.ProduceRandom::
			
			call	.ClrX
			lda	#01h
			sta	PP	
			lda	#0h
			sta	.M_hexbuf
			lda0	.RandCnt
			sta	.M_hexbuf+1
			call	.Hex2Bcd
			lda	.M_bcdbuf 
			sta0	OperandX+.CntByte-3		
			lda	.M_bcdbuf+1
			sta0	OperandX+.CntByte-2
			lda	#0h
			sta0	PointX
			sta0	SignX
			sta0	PointY
			sta0	SignY			
			call	.ClrY	
			lda 	#07H
			sta0	OperandY+.CntByte-3	
			lda	#89H
			sta0	OperandY+.CntByte-2
			lda	#0h
			sta	PP			
			call    Division
			lda	#03h
			sta	PointZ			
			call	.ClearInt		
			ret
;------------------------------------------
.CheckQuadrant::
		lda0	SignX
		cmpe	#0h
		brz	.EndQuadrant
		lda0	SignY
		cmpe	#0h
		brz	.QuadrantII
		call	.ClrY
		lda	#01h
		sta0	OperandY+5
		lda	#80h
		sta0	OperandY+6
		call	.Z_trans_X		 
		call	Subtration
		ret
.QuadrantII:
		call	.ClrX
		lda	#01h
		sta0	OperandX+5
		lda	#80h
		sta0	OperandX+6
		call	.Z_trans_Y		 
		call	Addition			
		ret		
.EndQuadrant:
		 
		ret 
;------------------------------------------		
.GetDpCount::			 
		lda	#OperandZ
		br	.addr
.GetDpCountX::		
		lda	#OperandX
		br	.addr
.GetDpCountY::		
		lda	#OperandY
		 	
.addr:		
		sta	Addr1
		call	CheckData						
		ret					
;-------------------------------------------
.LimitCarry::
.Carry::
		 
 		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#08h
		brnz	.EndLimit10
		call	.Y_trans_Xn		;T 	
		call	CheckOutData
		call	.GetDpCount
		lda0	DpCount
		sta0	.Temp
.ShiftR1:		
		lda0	.Temp
		cmpe	#0bh
		brnc	.EndLimitCarry
		brz	.CkCarry
		call	ShiftToR
		lda0	PointZ
		deca
		sta0	PointZ												
		lda0	.Temp
		deca
		sta0	.Temp
		br	.ShiftR1
.CkCarry:
		lda0	OperandZ+6
		anda	#0fh
		cmpe	#05h
		brnc	.AdjusTotem
		lda0	OperandZ+6
		anda	#0f0h
		sta0	OperandZ+6
		call	.Z_trans_X		
		call	.ClrY
		lda	PointX
		sta	PointY
		lda	SignX
		sta	SignY
		lda	#10h
		sta0	OperandY+6
		call	Addition
.AdjusTotem:				
		call	ShiftToR
		lda0	PointZ
		deca
		sta0	PointZ	
.EndLimitCarry:
 		lda	#0h
 		sta0	OperandZ+7
		call	.Xn_trans_Y 
		 
		ret
							
;-------------------------------------------
.GetDataLimit10::
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#08h
		brnz	.EndLimit10
		call	.X_trans_Z			
		call	.LimitCarry
		call	CheckOutData
		call	.Z_trans_B      
		call	.Y_trans_Z		 
		call	.LimitCarry
		call	CheckOutData
		lda	#0h
		sta	OperandZ+7
		call	.Z_trans_Y
		call	.B_trans_Z
		lda	#0h
		sta	OperandZ+7
		call	.Z_trans_X
.EndLimit10: 	
			
		ret
;-------------------------------------------     					
.GetTabVal::		
		 		 		 
		lda	TableC						
		adda	.M_Data_Offset
		sta	TableC		
		brnc	.Tpl_NoT_Carry
		lda	TableC+1	
		inca
		sta	TableC+1						
.Tpl_NoT_Carry:													
		
		lda	#0h
		sta	TPP
		lda	TableC+1	
		sta	TPH
		lda	TableC
		sta	TPL	
				
		ldv	
		sta 	SignZ
		ldv	
		sta 	PointZ	
		lda	#>SignZ
		sta	PP	
		lda	#<OperandZ
		sta	DP 	
.InpNum:					
		ldv		
		cmpe	#0ffh
		brz	.End_InpNum
		sta	i		
		incdp		
		br	.InpNum
		
.End_InpNum:	
		lda	#0h
		sta	OperandZ+7
		call	CheckOutData	 
		ret									
;------------(X_COPY_Y,Z,Buf,b,s)-----------
.X_trans_Y::
			lda 	#<SignX
			sta0	.PXDP
			lda 	#<SignY
			sta0	.PYDP
			lda 	#>SignX
			sta0	.PXPP
			lda 	#>SignY
			sta0	.PYPP
			call	.CopyData					
			ret
.X_trans_Z::
			lda 	#<SignX
			sta0	.PXDP
			lda 	#<SignZ
			sta0	.PYDP
			lda 	#>SignX
			sta0	.PXPP
			lda 	#>SignZ
			sta0	.PYPP
			call	.CopyData					
			ret
.X_trans_Buf::
			lda 	#<SignX
			sta0	.PXDP			
			lda	#<Sign_buf
			sta0	.PYDP			
			lda 	#>SignX
			sta0	.PXPP			
			lda	#>Sign_buf
			sta0	.PYPP
			call	.CopyData						
			ret
.X_trans_B::
			lda 	#<SignX
			sta0	.PXDP			
			lda 	#<Sign_b
			sta0	.PYDP
			lda 	#>SignX
			sta0	.PXPP			

⌨️ 快捷键说明

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