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

📄 trigonom.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        anda    #0fh
        sta     Xn

        lda     #BufferXn
        sta     Addr1

        call    ShiftToR

        lda     PointXn
        deca
        sta     PointXn

        lda     SignTemp
        deca
        sta     SignTemp
;       cmpe    #0ah
;       brc     ExLoop
;*
        lda     Xn
        adda    #0
        brz     ExLoop

        lda     #^ExData
        sta     TableC+2

        lda     #@ExData
        sta     TableC+1

        lda     #<ExData
        sta     TableC

        lda     PointXn
        adda    #04h
        sta     Temp1

        lda     Xn
        deca
        sta     Temp2

        call    GetData1

        lda     #0
        sta     Temp2

        lda     #BufferZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointBz
        sta     PointX

        call    Multiplation

        lda     #OperandZ
        sta     Addr1

        lda     #BufferZ
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointBz

        br      ExLoop

EndEx:
        lda     SignXn
        adda    #0
        brz     0$

        lda     #OperandX
        sta     Addr1

        call    ClearData

        lda     #OperandX
        adda    #Length
        deca
        sta     r_dp

        lda     #10h
        sta     i

        lda     #01h
        sta     PointX

        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        call    Division
0$:
        ret
Input0:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     Addr1
        adda    #Length
        deca
        sta     r_dp

        lda     #01h
        sta     i

        lda     #0
        sta     PointZ

        ret

ExInput0:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ
	sta	SignZ		;;;;add by tom 03.12
        ret

;=====================================
Ln::
        lda     SignX
        adda    #0
        brnz    InputErr

        call    ClearBuffer

        lda     #BufferXn
        sta     Addr1

        call    ClearData

        lda     #BufferTan
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointXn
        sta     PointT
        sta     SignXn
        sta     SignT

        lda     #BufferTan
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointT
        sta     SignT
        sta     Xn

        lda     #OperandX
        sta     Addr1

        call    CheckData

        lda     DpCount
        sta     PointTemp
        deca
        brnc    InputErr        ;;input 0
        brnz    1$
	lda0	PointX		;2002 03 19 alton
	cmpe	#0h		;
	brnz	1$ 		;           alton
	;;lda	Temp1		;;;;edit by tom 03.12
        lda     Temp2
        deca
        brz     ExInput0
1$:                             ;;;keep operandX data to bufferXn
        lda     PointX
        suba    PointTemp
        sta     Temp2
        lda     PointTemp
        sta     PointX
        lda     Temp2
        sta     PointTemp
        lda     #OperandX
        sta     Addr1

        lda     #BufferXn
        sta     Addr2

        call    CopyData

        lda     PointX
        sta     PointXn

                                ;;;check x>sqrt2
.if 0                                
        lda     #^Sqrt2         ;;;Get sqrt2
        sta     TableC+2

        lda     #@Sqrt2
        sta     TableC+1

        lda     #<Sqrt2
        sta     TableC

        lda     #0
        sta     Temp2

        call    GetData
.else
        lda     #0dh
        sta0    PointY
        lda     #0
        sta     SignY
        lda     #14h
        sta0    OperandY+0
        lda     #14h
        sta0    OperandY+1
        lda     #21h
        sta0    OperandY+2
        lda     #35h
        sta0    OperandY+3
        lda     #62h
        sta0    OperandY+4
        lda     #37h
        sta0    OperandY+5
        lda     #30h
        sta0    OperandY+6
        lda     #95h
        sta0    OperandY+7
        
.endif        

        lda     #0
        sta     Temp2
                                ;;;keep sqrt2 data to buffer
        lda     #OperandY
        sta     Addr1

        lda     #Buffer
        sta     Addr2

        call    CopyData

        lda     PointY
        sta     PointB

        call    Subtration

        lda     SignZ
        adda    #0
        brnz    3$              ;;;check X<=half_sqrt2
2$:
        lda     Xn
        inca
        sta     Xn
        anda    #0fh
        cmpe    #0ah
        brnc    10$
        lda     Xn
        adda    #06h
        sta     Xn
        ;;;;--------------check high nibble (start edit bytom 2002.03.21)
        cmpe	#0a0h
        brnc	10$
        adda	#60h
        sta	Xn
        lda	SignT
        inca
        sta	SignT
        ;;;;-------------end edit by tom 2002.03.21
10$:
        lda     #BufferXn
        sta     Addr1

        call    Div2

        lda     Temp1
        adda    PointXn
        sta     PointXn

        lda     #BufferXn
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointX

        lda     #Buffer
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointB
        sta     PointY

        lda     #0
        sta     SignX
        sta     SignY
        sta     SignZ

        call    Subtration

        lda     SignZ
        adda    #0
        brz     2$

        lda     #0
        sta     SignXn

        br      5$
3$:                     ;;;check X<=half_sqrt2
                        ;;;get half_sqrt2
.if 0                        
        lda     #^half_Sqrt2
        sta     TableC+2

        lda     #@half_Sqrt2
        sta     TableC+1

        lda     #<half_Sqrt2
        sta     TableC

        lda     #0
        sta     Temp2

        call    GetData
.else
        lda     #0eh
        sta0    PointY
        lda     #0
        sta     SignY
        lda     #70h
        sta0    OperandY+0
        lda     #71h
        sta0    OperandY+1
        lda     #06h
        sta0    OperandY+2
        lda     #78h
        sta0    OperandY+3
        lda     #11h
        sta0    OperandY+4
        lda     #86h
        sta0    OperandY+5
        lda     #54h
        sta0    OperandY+6
        lda     #75h
        sta0    OperandY+7
        
.endif        

        lda     #0
        sta     Temp2
        sta	SignY
        sta	SignZ
                        ;;;keep helf_sqrt2 to buffer
        lda     #OperandY
        sta     Addr1

        lda     #Buffer
        sta     Addr2

        call    CopyData

        lda     PointY
        sta     PointB
                        ;;;move X to operandx
        lda     #BufferXn
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointX
                        ;;;check X<=half_sqrt2
        call    Subtration

        lda     SignZ
        adda    #0
        brz     5$
4$:
        lda     Xn
        inca
        sta     Xn
	;;;;-------------0228
	anda	#0fh
	cmpe	#0ah
	brnc	40$
	lda	Xn
	adda	#06h
	sta	Xn
	;;;;--------------check high nibble (start edit bytom 2002.03.21)
        cmpe	#0a0h
        brnc	40$
        adda	#60h
        sta	Xn
        lda	SignT
        inca
        sta	SignT
        ;;;;-------------end edit by tom 2002.03.21
40$:
	;;;;--------------end 0228 bye tom
        lda     #BufferXn
        sta     Addr1

        call    Mul2

        lda     PointXn
        suba    Temp1
        sta     PointXn
                        ;;;move helf_sqrt2 to operandY
        lda     #Buffer
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointB
        sta     PointY
                        ;;;move X to operandX
        lda     #BufferXn
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointX

        lda     #0
        sta     SignX
        sta     SignY
        sta     SignZ

        call    Subtration

        lda     SignZ
        adda    #0
        brnz    4$

        lda     #01h
        sta     SignXn
5$:                     ;;;moev x to operandX
        lda     #BufferXn
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointX

        lda     #0
        sta     SignX
                        ;;;f=x-1
                        ;;;set operandY=1
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #0
        sta     SignY
        sta     PointY

        lda     Addr1
        adda    #Length
        deca
        sta     r_dp

        lda     #01
        sta     i
                        ;;;cal X-1
        call    Subtration
                        ;;;keep f to buffer
        lda     #OperandZ
        sta     Addr1

        lda     #Buffer
        sta     Addr2

        call    CopyData
                        ;;;move f to operandX
        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointB
        sta     PointX

        lda     SignZ
        sta     SignB
        sta     SignX

        lda     #0
        sta     SignZ
                        ;;;loda dk to BufferXn
        lda     #BufferXn
        sta     Addr1

        call    ClearData

        lda     Addr1
        adda    #Length
        deca
        sta     r_dp

        lda     Xn
        sta     i
	;;;;-------------------------start edit by tom 2002.03.21
	decdp
	
	lda	SignT
	sta	i
	;;;;--------------------------end edit 2002.03.21 tom
	
        lda     #0
        sta     PointXn
	sta	SignT		;;;;2002.03.21
                        ;;; s=f/(2+f)
                        ;;;set operandY=2
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointY
        sta     SignY

        lda     Addr1
        adda    #Length
        deca
        sta     r_dp

        lda     #02h
        sta     i
                        ;;;get (2+f)
        call    Addition
                        ;;;move(2+f)to operandY
        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        lda     SignZ
        sta     SignY
                        ;;;move f to operandX
        lda     #Buffer
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointB
        sta     PointX

        lda     SignB
        sta     SignX

        lda     #0
        sta     SignZ
                        ;;;Get s=f/(2+f)
        call    Division
                        ;;;save s to bufferZ
        lda     #OperandZ
        sta     Addr1

        lda     #BufferZ
        sta     Addr2

        call    CopyData

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointBz
        sta     PointX
        sta     PointY

        lda     SignZ
        sta     SignBz
        sta     SignX
        sta     SignY

        lda     #0
        sta     SignZ
                        ;;;get (s^2*(L1+s^2*(L2+....(L6+s^2*L7)....)))
                        ;;;get s^2
        call    Multiplation

        lda     #6
        sta     TanTemp
                                ;;;get Ldata

        lda     #^LData
        sta     TableC+2

        lda     #@LData
        sta     TableC+1

        lda     #<LData
        sta     TableC

        lda     TanTemp
        sta     Temp2

        call    GetData

        lda     #0
        sta     Temp2
                                ;;;save S^2 to bufferTan
        lda     #OperandZ
        sta     Addr1

      

⌨️ 快捷键说明

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