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

📄 ln.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
字号:
;|---------------------------------------|
;|Program name : Ln.asm		 	 |
;|Use bady:  				 |
;|Programer: Alton			 |
;|Simple version			 |
;|---------------------------------------| 
        .area   Ln_code(code)
;-------------------------------------------
;		Ln
;-------------------------------------------
Ln::
		call	.LnInit	
		lda	SignX
		cmpe	#01h
		brz	.ErrorInp
		call	.GetDpCountX
		lda	DpCount
		cmpe	#0h
		brz	.ErrorInp
		call	.X_trans_Buf		;Input X to Buf
		call	.ClrY
		lda	#01h
		sta	OperandY+6
		call	Subtration
		call	.GetDpCount 
		lda	DpCount
		cmpe	#0h
		brz	.Ans1
		call	.Buf_trans_X
		call	.GetDpCountX
		lda	PointX
		Suba	DpCount
		sta	PointTemp	 
		lda	DpCount
		sta	PointX
		sta	Temp2		
		call	.X_trans_Buf
.Comphalf_Sqrt2:		
		lda	#>(half_Sqrt2)
		sta	TableC+1
		lda	#<(half_Sqrt2)
		sta	TableC 	
		call	.GetTabVal
;X <= (1/2Squ)		
		call	.Z_trans_Y	
		call	Subtration
		lda	SignZ
		cmpe	#0h
		brz	.CompSqrt2
.Beyondhalf_Sqrt2:		
		call	.Put_1_to_OperandX	;K=R_buf 
		call	.R_trans_Y		;K=K+1
		call	Addition
		call	.Z_trans_R
		
		call	.Put_2_to_OperandX	;X=2*X		
		call	.Buf_trans_Y
		call	Multiplation 	
		call	.Z_trans_Buf
;X > (1/2Squ)	
	
		lda	#>(half_Sqrt2)	
		sta	TableC+1
		lda	#<(half_Sqrt2)
		sta	TableC 	
		call	.GetTabVal
		call	.Z_trans_Y
		call	.Buf_trans_X
		call	Subtration
		lda	SignZ
		cmpe	#0h
		brnz	.Beyondhalf_Sqrt2
		lda	#01h
		sta 	PP
		lda	#01h
		sta	Sign_r
		lda	#0h
		sta 	PP 
.CompSqrt2:
		lda	#>(Sqrt2)	
		sta	TableC+1
		lda	#<(Sqrt2)
		sta	TableC 	
		call	.GetTabVal
		call	.Z_trans_Y
		call	.Buf_trans_X
		call	Subtration
		lda	SignZ
		cmpe	#0h
		brnz	.EndInputCheck
.Under_Sqrt2:		
		call	.Put_1_to_OperandX	;K=R_buf 
		call	.R_trans_Y		;K=K+1
		call	Addition
		call	.Z_trans_R
		
		call	.Put_2_to_OperandX	;X=X/2
		call	.X_trans_Y
		call	.Buf_trans_X
		call	Division	
		call	.Z_trans_Buf
		
		lda	#>(Sqrt2)	
		sta	TableC+1
		lda	#<(Sqrt2)
		sta	TableC 	
		call	.GetTabVal
		call	.Z_trans_Y
		call	.Buf_trans_X
		call	Subtration
		lda	SignZ
		cmpe	#0h
		brz	.Under_Sqrt2
.EndInputCheck:
						;f=Buf_buf
								
		call	.Put_1_to_OperandX	;f=x-1
		call	.X_trans_Y
		call	.Buf_trans_X
		call	Subtration
		call	.Z_trans_Buf		
						;S=S_Buf
		call	.Put_2_to_OperandX	;S=f/(2+f)
		call	.Buf_trans_Y
		call	Addition
		call	.Z_trans_Y
		call	.Buf_trans_X
		call	Division
		call	.Z_trans_B
		call	.Z_trans_S
						;hfsq=I_Buf	
		call	.Buf_trans_X		;hfsq=0.5*f*f
		call	.XSqu 
		call	.Z_trans_X
		call	.ClrY
		lda	#05h
		sta	OperandY+6
		lda	#01h
		sta	PointY
		call	Multiplation 	 
		call	.Z_trans_I
		
;;Log_L		 
		call	.Log_L		;R=Z_Buf
		
		call	.I_trans_X	;hfsq+R
		call	.Z_trans_Y
		call	Addition
		
		call	.S_trans_X	;s*(hfsq+R)
		call	.Z_trans_Y
		call	Multiplation 
		
		call	.I_trans_X	;hfsq-(s*(hfsq+R))
		call	.Z_trans_Y
		call	Subtration
		
		call	.Buf_trans_Y	;(hfsq-(s*(hfsq+R)))-f
		call	.Z_trans_X
		call	Subtration
		call	.Z_trans_Buf	;result store Buf
		
		lda	#>(Ln2_hi)	;Ln2_hi
		sta	TableC+1
		lda	#<(Ln2_hi)
		sta	TableC 	
		lda	#0h
		sta	.M_Data_Offset
		call	.GetTabVal
		call	.Z_trans_X		
		call	.R_trans_Y	;(Ln2_hi)*k		 
		call	Multiplation 	
		
		call	.Z_trans_X	;((Ln2_hi)*k)-(hfsq-(s*(hfsq+R)))-f)
		call	.Buf_trans_Y
		call	Subtration
		call	.Z_trans_Buf
;-------------------------------------------		
		lda	Temp2		;	
		cmpe	#0h
		brz	.ErrorInp
		lda	PointTemp	 	
		cmpe	#80h
		brnc	.2$
		lda	#0ffh
		suba	PointTemp	 
		inca		 
        	sta     .M_hexbuf+1
		br 	.MulmaxLn
.2$:		
		lda	PointTemp
		sta     .M_hexbuf+1
.MulmaxLn:	
		call	.ClrX	
		lda     #0
      		sta     .M_hexbuf        	
        	call    .Hex2Bcd
        	;lda     .M_bcdbuf
        	;sta0    OperandX+5
        	lda     .M_bcdbuf+1
        	sta0    OperandX+6     	
		
		lda	#>(MaxLn)	 
		sta	TableC+1
		lda	#<(MaxLn)
		sta	TableC 	
		lda	#0h
		sta	.M_Data_Offset
		call	.GetTabVal	
		call	.Z_trans_Y
		call	Multiplation
		call	.Z_trans_X
		call	.Buf_trans_Y
		lda     PointTemp
       		cmpe    #80h
        	brc     AddLn10
        	call    Subtration
        	lda	#01h
        	sta	SignZ
        	br      .EndLn
AddLn10:        
        	call    Addition
.EndLn:
		
		ret	
.ErrorInp:
		lda	#01h
		sta	ErrorFlag
		br	.EndLn		
.Ans1:
		call	.ClrZ		 
		br 	.EndLn	
;-------------------------------------------
.Log_L::
		call	.B_trans_X
		call	.XSqu 
		call	.Z_trans_B				
		lda	#0h
		sta	.M_Data_Offset
		;lda	#^(LTable)
		;sta	TableC+2
		lda	#>(LTable)
		sta	TableC+1
		lda	#<(LTable)
		sta	TableC 				
.GetLog_L:	
				
		call	.GetTabVal
		call	.Z_trans_Y	;R store Ldata
		call	.B_trans_X	;B=s^2 s=(F/(2+F))
		call	Multiplation 	;Z*L7
		call	.Z_trans_X		
		call	.NextL		;L6 		
		call	.NextL		;L5 
		call	.NextL		;L4 		
		call	.NextL		;L3
		call	.NextL		;L2 		
		call	.NextL		;L1 
		ret 
		
.NextL:
		
		lda	#0ah		
		sta	.M_Data_Offset
		call	.GetTabVal
		call	.Z_trans_Y
		call	Addition	
		call	.Z_trans_X
		call	.B_trans_Y	
		call	Multiplation
		call	.Z_trans_X
		ret
;-------------------------------------------		
.LnInit:
		lda	#0h
		sta	.M_temp
		sta	.M_Data_Offset
		call	.ClrZ
		call	.Z_trans_R
		call	.Z_trans_I
		call	.Z_trans_Buf
		call	.Z_trans_B 
		call	.Z_trans_S
		ret									 
;-------------------------------------------
LTable:
	DB      000h,00eh,014h,079h,081h,098h,060h,051h,016h,0ffh	;L7
	DB      000h,00eh,015h,031h,038h,037h,069h,092h,009h,0ffh	;L6
	DB      000h,00eh,018h,018h,035h,072h,016h,016h,018h,0ffh	;L5
	DB      000h,00eh,022h,022h,021h,098h,043h,021h,049h,0ffh	;L4
	DB      000h,00eh,028h,057h,014h,028h,074h,036h,062h,0ffh	;L3
	DB      000h,00eh,039h,099h,099h,099h,099h,094h,009h,0ffh	;L2
        DB      000h,00eh,066h,066h,066h,066h,066h,066h,067h,0ffh	;L1	
Ln2_hi:
        DB      000h,00eh,069h,031h,047h,018h,005h,059h,094h,0ffh		;;0ch
 
Sqrt2:
        DB	000h,00dh,014h,014h,021h,035h,062h,037h,030h,0ffh
half_Sqrt2:
        DB	000h,00eh,070h,071h,006h,078h,011h,086h,054h,0ffh 
MaxLn:
        DB	000h,00dh,023h,002h,058h,050h,092h,099h,040h,0ffh   
        
            	

⌨️ 快捷键说明

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