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

📄 trigonom.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;don't chang

Length          EQU     07h
Length_Z        EQU     Length+Length
TableLength	EQU	09
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


        .area   S_C_T(data,abs)
        .org	0x4f

SignAns::               .ds     1
SignT::         	.ds     1

PointT::                .ds     1
BufferTan::   		.ds     Length+1

SignXn::                .ds     1

PointXn::               .ds     1

BufferXn::      	.ds     Length+1


        .area   Tan_code(code)

;**************************************
Sin::

        lda     SignX
        sta     SignTemp
;;Added by Golden        
        lda     #0
        sta0    SignX  

        call    ClearBuffer
	
	lda	#0
	sta	OperandX+Length

        lda     #BufferXn
        sta     Addr1

        call    ClearData

        lda     #BufferTan
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointXn
        sta     PointT
        sta     SignXn
        sta     SignT
        sta     TanTemp

        call    CheckQuadrandtal

        lda     Temp1
        adda    #0
        brz     1$
        rorc
        brc     Sin90
        rorc
        brc     Sin180
        rorc
        brc     Sin270
        rorc
        brc     Sin360
        rorc
        brc     Sin30
1$:                     ;;;cau seta
        lda     #0h
        sta     Xn

        lda     #^Pdata
        sta     TableC+2

        lda     #@Pdata
        sta     TableC+1

        lda     #<Pdata
        sta     TableC

        lda     #0
        sta     Temp2
                        ;;;get pi
        call    GetData

        lda     #0
        sta     Temp2
                        ;;;get X
        call    Multiplation
                        ;;;move X to operandX
        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX
                        ;;;save X to bufferZ
        lda     #BufferZ
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointBz
                        ;;;;get X^2
        call    GetXX
                        ;;;;save  X^2 to bufferXn
        lda     #OperandZ
        sta     Addr1

        lda     #BufferXn
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointXn
        
        lda	#0
        sta	Xn
        
SinLoop:
                                ;;;get (X^2/17!)
                                ;;;get 1/17!
        lda     #^SinData
        sta     TableC+2

        lda     #@SinData
        sta     TableC+1

        lda     #<SinData
        sta     TableC

        lda     Xn
        sta     Temp2
        inca
        sta     Xn

        call    GetData
                                ;;;move X^2 to operandX
        lda     #BufferXn
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointX
0$:                             ;;;get (X^2/17!)
        call    Multiplation

        lda     #^SinData
        sta     TableC+2
                                ;;;get 1/Xn!
        lda     #@SinData
        sta     TableC+1

        lda     #<SinData
        sta     TableC

        lda     Xn
        sta     Temp2
        inca
        sta     Xn
        cmpe    #08h
        brc     3$

        call    GetData
                                ;;;move to operandX
        lda     #OperandY
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointY
        sta     PointX

        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        call    Subtration
2$:
                                ;;;move ans to operandX
        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX
                                ;;;move X^2 to operandY
        lda     #BufferXn
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointY

        br      0$

3$:
                                ;;;move OperandZ to OperandY
        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY
                                ;;;move X to OperandX
        lda     #BufferZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointBz
        sta     PointX

        call    Multiplation

        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        lda     #BufferZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointBz
        sta     PointX

        call    Subtration

EndSin:

        lda     SignAns
        cmpe    #03h
        brc     1$

        lda     SignTemp
        sta     SignZ

        ret
1$:
        lda     #01h
        xora    SignTemp
        sta     SignZ
        ret


;*************************************
;
;*************************************
Cos::
;;caul X data

;;get pi/180 data

        lda     #0
        sta     SignX

        call    ClearBuffer

	lda	#0
	sta	OperandX+Length


        lda     #BufferXn
        sta     Addr1

        call    ClearData

        lda     #BufferTan
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointXn
        sta     PointT
        sta     SignXn
        sta     SignT
        sta     SignTemp
        sta     TanTemp

        call    CheckQuadrandtal

        lda     Temp1
        adda    #0
        brz     1$
        rorc
        brc     Cos90
        rorc
        brc     Cos180
        rorc
        brc     Cos270
        rorc
        brc     Cos360
        rorc
        adda    #0
        rorc
        adda    #0
        rorc
        brc     Cos60
1$:
        lda     #0h
        sta     Xn
                                ;;set   BufferZ1
        lda     #10h
        sta     BufferZ

        lda     #Length_Z
        deca
        sta     PointBz

        lda     #^Pdata
        sta     TableC+2

        lda     #@Pdata
        sta     TableC+1

        lda     #<Pdata
        sta     TableC

        lda     #0
        sta     Temp2

        call    GetData

        lda     #0
        sta     Temp2

        call    Multiplation

        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX

                        ;;;get X^2
        call    GetXX
                        ;;;save X^2 to BufferXn
        lda     #OperandZ
        sta     Addr1

        lda     #BufferXn
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointXn

        lda     #0
        sta     SignXn
CosLoop:                        ;;;move X^2 to operandX

        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX

        lda     #^CosData
        sta     TableC+2

        lda     #@CosData
        sta     TableC+1

        lda     #<CosData
        sta     TableC

        lda     Xn
        sta     Temp2
        inca
        sta     Xn

        call    GetData
0$:                             ;;;getX^2*(1/n!)
        call    Multiplation
                                ;;;get next (1/n!)
        lda     #^CosData
        sta     TableC+2

        lda     #@CosData
        sta     TableC+1

        lda     #<CosData
        sta     TableC

        lda     Xn
        sta     Temp2
        inca
        sta     Xn
        cmpe    #08h
        brc     3$

        call    GetData
                                ;;;move data to operandX
        lda     #OperandY
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointY
        sta     PointX

        lda     #0
        sta     SignX
                                ;;;;move ans to operandY
        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        lda     SignZ
        sta     SignY

        lda     #0
        sta     SignZ

        call    Subtration
2$:
                        ;;;move ans to operandX
        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX

        lda     SignZ
        sta     SignX
                        ;;;move X^2 to operandY
        lda     #BufferXn
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointXn
        sta     PointY

        br      0$
3$:
        lda     #OperandZ
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointY

        lda     SignZ
        sta     SignY

        lda     #OperandX
        sta     Addr1

        call    ClearData

        lda     Addr1
        adda    #Length
        deca
        sta     r_dp

        lda     #01h
        sta     i

        lda     #0
        sta     PointX
        sta     SignX

        call    Subtration

EndCos:
        lda     SignAns
        anda    #06h
        brnz    1$
.if 0        
        cmpe    #02h
        brz     1$
        cmpe    #04h
        brz     1$
.endif        
        lda     #0
        sta     SignZ
        ret
1$:
        lda     #01h
        sta     SignZ
        ret


;=====================================
Cos90:
Cos270:
Sin180:
Sin360:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ
        sta     SignZ
	lda     SignZ
	xora    SignTemp
	sta     SignZ
        ret
Cos180:
Sin270:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ

        lda     #OperandZ
        adda    #Length
        deca
        sta     r_dp

        lda     #01h
        sta     i
        sta     SignZ
        lda     SignZ
	xora    SignTemp
	sta     SignZ
        ret

Cos360:
Sin90:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ
        sta     SignZ

        lda     #OperandZ
        adda    #Length
        deca
        sta     r_dp

        lda     #01h
        sta     i
 	lda     SignZ
	xora    SignTemp
	sta     SignZ
        ret
Cos60:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #01h
        sta     PointZ

        lda     #OperandZ
        adda    #Length
        deca
        sta     r_dp

        lda     #05h
        sta     i

        br      EndCos
Sin30:
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

⌨️ 快捷键说明

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