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

📄 oppotriangle_0225.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		call	.Z_trans_Buf
		lda	#03h
		sta	.IdFlag
		br	.EndChoiceX		
.Id4:
		lda	#04h
		sta	.IdFlag
		call	.X_trans_Buf
.EndChoiceX:
		ret			
;-----------------------------------------------------
.DoZ3:
		call	.Buf_trans_X
		call	.X_Squ
		call	Multiplation
		call	.Z_trans_B			;Z-->B
		ret
;-----------------------------------------------------
.DoW3:
		call	.B_trans_X		
		call	.X_Squ
		call	Multiplation
		call	.Z_trans_S			;W-->S
		ret
		
;------------------------------------------------------
.DoS1:
		lda	#At10
		sta	.M_Data_Offset		;At10*W
		call	.InpDataToT		
		call	.S_trans_X			
		call	Multiplation
		
		lda	#At8			;At8+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		lda	#At6			;At6+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		
		lda	#At4			;At4+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		lda	#At2			;At2+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		lda	#At0			;At2+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.B_trans_X
		call	.Z_trans_Y
		call	Multiplation
		call	.Z_trans_B		;S1->B
		ret
;------------------------------------------------------
.DoS2:		
		lda	#At9
		sta	.M_Data_Offset		;At9*W
		call	.InpDataToT		
		call	.S_trans_X			
		call	Multiplation
		
		lda	#At7			;At7+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		lda	#At5			;At5+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		
		lda	#At3			;At3+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation
		
		lda	#At1			;At1+Z
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition
		
		call	.S_trans_X		;Z*W
		call	.Z_trans_Y			
		call	Multiplation							
		ret				
;------------------------------------------------------
.DoW4:
		call	.B_trans_X
		call	.Z_trans_Y
		call	Addition
		call	.Buf_trans_X
		call	.Z_trans_Y
		call	Multiplation						
		call	.Buf_trans_X																					
		call	.Z_trans_Y	
		call	Subtration
		ret
;------------------------------------------------------
.ResultAtan:	
		
		lda	.IdFlag
		cmpe	#0h
		brz	.ResultId0
		cmpe	#1h
		brz	.ResultId1
		cmpe	#2h
		brz	.ResultId2
		cmpe	#3h
		brz	.ResultId3
		br	.EndResultAtan
		
.ResultId0:
		lda	#Id0		
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition	
		br	.EndResultAtan
		
.ResultId1:		
		lda	#Id1		
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition	
		br	.EndResultAtan
.ResultId2:		
		lda	#Id2		
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition	
		br	.EndResultAtan
.ResultId3:
		lda	#Id3		
		sta	.M_Data_Offset		
		call	.InpDataToT
		call	.Z_trans_X
		call	Addition	
		br	.EndResultAtan
	

.EndResultAtan:		
		lda	.SignXBuf
		cmpe	#01h
		brnz	.EndSignAtan
		lda	#01h
		sta	SignZ
.EndSignAtan:		
		ret
;Input:OperandX,OperandY (n,r)
;Output:OperandZ
.NCR::
                        lda      #0
                        sta      PP
   		        lda	 #0h
			sta0	 OperandX+7
			call	 .X_trans_Z
			call	 CheckOutData
			call	 .Z_trans_X						
			lda	 #0h
			sta0	 OperandY+7
			call	 .Y_trans_Z
			call	 CheckOutData
			call	 .Z_trans_Y						
                        lda      SignX
                        ora      #0
                        brnz    ErrorExit 
                        lda     PointX
                        cmpe    #0
                        brz     NCRStart
                        lda     PointX
                        cmpe    #88h
                        brnc    ErrorExit   
                        lda     SignY
                        ora     #0
                        brnz    ErrorExit   
                        lda     PointY
                        cmpe    #0
                        brz     NCRStart
                        lda     PointY
                        cmpe    #88h
                        brnc    ErrorExit   
 
NCRStart:                        
                        call    .X_trans_S        ;n
                        Call    .Y_trans_R        ;r
                        call	LineUp	
		        lda	#OperandX
		        sta	Addr1
		        lda	#OperandY
		        sta	Addr2		
		        lda	#.CmpLen		;06 2002.02.21
		        sta	DpCount
		        call	CompareData
		        lda	Temp1
		        cmpe    #2               ;n<r
		        brz     ErrorExit
		        cmpe    #0
		        brnz    0$
		        call    .Put_1_to_OperandX                              
		        call    .X_trans_Z          ; n==r
		        br      EndCombNr
0$:		        
		        ;call    .S_trans_X
		        ;call    .R_trans_Y       
		        call    Subtration
		        call    .Z_trans_X      ;n-r
		        call    .R_trans_Y      ;r
		        call	LineUp	
		        lda	#OperandX
		        sta	Addr1
		        lda	#OperandY
		        sta	Addr2		
		        lda	#.CmpLen		;06 2002.02.21
		        sta	DpCount
		        call	CompareData
		        lda     Temp1
		        cmpe    #2
		        brnz    CheckCombN         ;n-r>=r
		        call    .Z_trans_R         ;n_r<r
CheckCombN:		        
                        call    .S_trans_X 
                        lda     #COMBN20000
		        sta0    .M_Data_Offset
		        call   .InpDataToOpY							
		        call	LineUp	
		        lda	#OperandX
		        sta	Addr1
		        lda	#OperandY
		        sta	Addr2		
		        lda	#.CmpLen		;06 2002.02.21
		        sta	DpCount
		        call	CompareData
		        lda	Temp1
		        cmpe    #2
		        brz     CheckCombRLimit       ;n<20000
;n>=20000
CheckCombR:		
                        call    .R_trans_X  
		        lda     #COMBR24
		        sta     .M_Data_Offset
		        call    .InpDataToOpY							
		        call	LineUp	
		        lda	#OperandX
		        sta0	Addr1
		        lda	#OperandY
		        sta0	Addr2		
		        lda	#.CmpLen		;06 2002.02.21
		        sta0	DpCount
		        call	CompareData
		        lda0	Temp1
		        cmpe    #2
		        brz     UsingNrLoop              ;r<24
CheckCombRLimit:		        
                        call    .R_trans_X  
		        lda     #COMBR70
		        sta     .M_Data_Offset
		        call    .InpDataToOpY							
		        call	LineUp	
		        lda	#OperandX
		        sta0	Addr1
		        lda	#OperandY
		        sta0	Addr2		
		        lda	#.CmpLen			;06 2002.02.21
		        sta0	DpCount
		        call	CompareData
		        lda0	Temp1
		        cmpe    #2
		        brz     UsingNrLoop              ;r<70 
ErrorExit:
		        lda     #1
		        sta0    ErrorFlag     
		        br      EndCombNr
;(n<20000 or r <24 )
UsingNrLoop:		   
                        lda     #0
                        sta0    OpCnt
                        call     .R_trans_X
                        call     MoveData
                        call     .X_trans_R          
                        lda      #>(Operand_r+6)
                        sta      PP
                        lda      Operand_r+6
                        ora      #0
                        brnz      0$
                        call    .Put_1_to_OperandX                              
                        call    .X_trans_Z
                        br       EndCombNr
0$:                        
                        sta0     OutputTemp
                        lda      #1
                        sta      PP
                        lda0     OutputTemp
                        sta     .M_bcdbuf
                        call    .bcdtohex
                        lda      .M_bcdbuf
                        sta0     OpCntNo
                        lda      #0
                        sta      PP
                        call    .Put_1_to_OperandX                              
1$:                        
                        call    .S_trans_Y
                        call    Multiplation
                        lda0     ErrorFlag
                        ora      #0
                        brnz     EndCombNr
                        call    .Z_trans_Buf     ;buf=n*x
                        call    .S_trans_X        
                        call    Put_1_to_OperandY
                        call    Subtration       ;n-1                        
                        call    .Z_Trans_S       ;n=n-1
                        call    .Buf_trans_X
                        lda0     OpCnt
                        inca
                        sta0     OpCnt
                        cmpe     OpCntNo
                        brnc      1$ 
                        lda0     ErrorFlag
                        ora      #0
                        brnz     EndCombNr
                        call    .R_trans_X
                        lda      #0        
                        sta0     OperandX+7
                        call    .Factorial         ; r!
                        call    .Z_trans_Y         
                        call    .Buf_trans_X
                        call    Division           ;[n..(n-r+1)]/r!
                        br      EndCombNr
EndCombNr:                
                        ret
                        
;Input:OperandX,OperandY 
;Output:OperandZ                        
.NPR:: 
                        call     .Y_trans_T
                        call      .NCR
                        call     .T_trans_X
                        call     .Z_trans_B
                        lda0      ErrorFlag
                        ora       #0
                        brnz      0$
                        lda      #0        
                        sta0     OperandX+7
                        call     .Factorial 
                        lda0      ErrorFlag
                        ora       #0
                        brnz      0$
                        call     .Z_trans_Y
                        call     .B_trans_X
                        call     Multiplation      ;c(n,r)*r!
0$:                        
                        ret                                                
Put_1_to_OperandY::
			call	.ClrY
			lda	#01h
			sta0	OperandY+6			
			ret	                        
                        
;;;
.InpDataToOpY::	
		;lda	OP1
		;anda	#~10h
		;sta	OP1	
		call	.ClrY 
		lda	#0h
		sta	TPP
		lda	#@(FactConst)
		sta	TableC+1		
		lda	#<(FactConst)						
		adda	.M_Data_Offset
		sta	TableC 			
		lda	TableC+1	
		addc    #0
		sta	TableC+1	
		
		lda	#0h
		sta	TPP
		lda	TableC+1	
		sta	TPH
		lda	TableC 
		sta	TPL		
		ldv
		sta	SignY
		ldv
		sta	PointY
		lda	#OperandY
		sta	DP	 	
.InpY0:					
		ldv		
		cmpe	#0ffh
		brz	.End_InpY0
		sta	i		
		incdp		
		br	.InpY0
		
.End_InpY0:
		;lda	OP1 
		;ora	#10h
		;sta	OP1
		ret



;------------------------------------------------------
SinCos:
	DB	000h,00eh,016h,066h,066h,066h,066h,066h,066h,0ffh
	DB	001h,00eh,032h,055h,065h,081h,086h,022h,040h,0ffh
	DB	000h,00eh,020h,012h,012h,053h,021h,034h,086h,0ffh 
	DB	001h,00fh,040h,005h,055h,034h,050h,006h,079h,0ffh
	DB	000h,011h,079h,015h,034h,099h,042h,089h,081h,0ffh
	DB	000h,012h,034h,079h,033h,010h,075h,096h,002h,0ffh 
	DB	001h,00dh,024h,003h,039h,049h,011h,073h,044h,0ffh
	DB	000h,00dh,020h,020h,094h,057h,060h,023h,035h,0ffh
	DB	001h,00eh,068h,082h,083h,097h,016h,005h,045h,0ffh 
	DB	000h,00fh,077h,003h,081h,050h,055h,059h,001h,0ffh
	DB	000h,00eh,070h,071h,006h,078h,011h,086h,054h,0ffh
	DB	000h,00dh,015h,070h,079h,063h,026h,079h,048h,0ffh
	DB	000h,001h,000h,000h,000h,000h,000h,000h,005h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,002h,0ffh
	DB	000h,00bh,000h,009h,099h,099h,099h,099h,099h,0ffh	;;;test data
	DB	000h,000h,000h,000h,000h,000h,000h,000h,001h,0ffh
	DB	000h,00ch,057h,029h,057h,079h,051h,030h,082h,0ffh
	DB	000h,00fh,017h,045h,032h,092h,051h,099h,043h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,000h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,030h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,060h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,090h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,045h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,001h,080h,0ffh
FactConst:
;n        
FactInputNo:
        DB      00h,00h,00h,00h,00h,00h,02h,00h,00h,0ffh          ;20000
;r
FactInputR:
        DB      00h,00h,00h,00h,00h,00h,00h,00h,24h,0ffh          ;24
        DB      00h,00h,00h,00h,00h,00h,00h,00h,70h,0ffh          ;70
	

Atan:		
	DB	000h,00eh,046h,036h,047h,060h,090h,000h,082h,0ffh
	DB	000h,00eh,078h,053h,098h,016h,033h,097h,044h,0ffh
	DB	000h,00eh,098h,027h,093h,072h,032h,047h,032h,0ffh
	DB	000h,00dh,015h,070h,079h,063h,026h,079h,048h,0ffh
;at		
	DB	000h,00eh,033h,033h,033h,033h,033h,033h,032h,0ffh
	DB	001h,00eh,019h,099h,099h,099h,099h,098h,076h,0ffh
	DB	000h,00eh,014h,028h,057h,014h,027h,025h,003h,0ffh
	DB	001h,00eh,011h,011h,011h,010h,040h,054h,062h,0ffh
	DB	000h,00fh,090h,090h,088h,071h,033h,043h,065h,0ffh
	DB	001h,00fh,076h,091h,087h,062h,005h,044h,048h,0ffh
	DB	000h,00fh,066h,061h,007h,031h,037h,038h,075h,0ffh
	DB	001h,00fh,058h,033h,057h,001h,033h,079h,005h,0ffh
	DB	000h,00fh,049h,076h,087h,079h,094h,061h,059h,0ffh
	DB	001h,00fh,036h,053h,015h,072h,074h,042h,016h,0ffh
	DB	000h,00fh,016h,028h,058h,020h,011h,053h,065h,0ffh	
;num
	DB	000h,004h,000h,000h,000h,000h,000h,043h,075h,0ffh		;0.4375
	DB	000h,004h,000h,000h,000h,000h,001h,018h,075h,0ffh		;1.1875
	DB	000h,004h,000h,000h,000h,000h,000h,068h,075h,0ffh		;0.6875	
	DB	000h,004h,000h,000h,000h,000h,002h,043h,075h,0ffh		;2.4375		
	DB	000h,000h,000h,000h,000h,000h,000h,000h,001h,0ffh
	DB	000h,000h,000h,000h,000h,000h,000h,000h,002h,0ffh
	DB	000h,001h,000h,000h,000h,000h,000h,000h,015h,0ffh

⌨️ 快捷键说明

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