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

📄 trigonom.asm

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

        call    CompareData

        lda     Temp1
        adda    #0
        brz     Input90
        deca
        brnz    6$

        lda     #OperandY
        sta     Addr1

        call    ClearData

        call    Get180

        call    Subtration

        lda     #0
        sta     SignX
        sta     SignY
        sta     SignZ
        sta     SignFlag
        sta     Temp1
;>90
        lda     #02h
        sta     SignAns

        lda     #OperandZ
        sta     Addr1

        lda     #OperandX
        sta     Addr2

        call    CopyData

        lda     PointZ
        sta     PointX

        br      EndChkQuad
6$:
;<90
        lda     #01h
        sta     SignAns

EndChkQuad:             ;;;chk 30
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointY

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #30h
        sta     i

        call    Chk1

        lda     #OperandX
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        lda     #Length
        sta     DpCount

        call    CompareData

        lda     Temp1
        adda    #0
        brz     Input30
        deca
        brnz    0$
                        ;;;chk 45
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointY

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #45h
        sta     i

        call    Chk1

        lda     #OperandX
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        lda     #Length
        sta     DpCount

        call    CompareData

        lda     Temp1
        adda    #0
        brz     Input45
        deca
        brnz    0$

        lda     #01h
        sta     TanTemp


                        ;;;chk 60

        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #0
        sta     PointY

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #60h
        sta     i

        call    Chk1

        lda     #OperandX
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        lda     #Length
        sta     DpCount

        call    CompareData

        lda     Temp1
        adda    #0
        brz     Input60

0$:
EndCheck1:
        lda     #0
        sta     Temp1
        ret

Input90:
        lda     #01h
        sta     Temp1
        ret
Input180:
        lda     #02h
        sta     Temp1
        ret
Input270:
        lda     #04h
        sta     Temp1
        ret

Input360:
        lda     #08h
        sta     Temp1
        ret
Input30:
        lda     #10h
        sta     Temp1
        ret
Input45:
        lda     #20h
        sta     Temp1
        ret
Input60:
        lda     #40h
        sta     Temp1
        ret
InputErr::
        lda     #01h
        sta     ErrorFlag
        ret
ProgErr:
        br      ProgErr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Chk1::
        lda     PointX
        cmpe    PointY
        brz     2$

        lda     OperandY
        anda    #0f0h
        brnz    5$

        lda     #OperandY
        sta     Addr1

        call    ShiftToL

        lda     PointY
        inca
        sta     PointY

        br      Chk1
5$:
        lda     #OperandX
        sta     Addr1

        call    ShiftToR

        lda     PointX
        deca
        sta     PointX

        br      Chk1
2$:
        ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Get360:
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #60h
        sta     i

        decdp

        lda     #03h
        sta     i

        lda     #0
        sta     PointY

        ret
Get270:
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #70h
        sta     i

        decdp

        lda     #02h
        sta     i

        lda     #0
        sta     PointY

        ret

Get180:
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #80h
        sta     i

        decdp

        lda     #01h
        sta     i

        lda     #0
        sta     PointY

        ret

Get90:
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     #OperandY
        adda    #Length
        deca
        sta     r_dp

        lda     #90h
        sta     i

        decdp

        lda     #00h
        sta     i
        sta     PointY

        ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GetXX::
        lda     #OperandX
        sta     Addr1

        lda     #OperandY
        sta     Addr2

        call    CopyData

        lda     PointX
        sta     PointY

        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ

        call    Multiplation

        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GetXXX:
                        ;;;clear Z data
        lda     #OperandZ
        sta     Addr1

        lda     #Length_Z
        sta     DpCount

        call    ClearData2

        lda     #0
        sta     PointZ
        sta     SignZ
                        ;;;X^2*X^n
        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

        call    Multiplation

        ret


;=======================================

Xdata:
Pdata::
	DB	02h,17h,45h,32h,92h,51h,99h,43h,30h	;;;(Pi/180)
SinData:
	DB	0dh,76h,47h,16h,37h,31h,81h,98h,16h	;;;(1/15!)
	DB	0ah,16h,05h,90h,43h,83h,68h,21h,61h
	DB	08h,25h,05h,21h,08h,38h,54h,41h,71h
	DB	06h,27h,55h,73h,19h,22h,39h,85h,89h
	DB	04h,19h,84h,12h,69h,84h,12h,69h,84h
	DB	03h,83h,33h,33h,33h,33h,33h,33h,33h	;;(1/5!)
	DB	01h,16h,66h,66h,66h,66h,66h,66h,66h	;;(1/3!)
CosData:

	DB	0bh,11h,47h,07h,45h,59h,77h,29h,72h
	DB	09h,20h,87h,67h,56h,98h,78h,68h,09h
	DB	07h,27h,55h,73h,19h,22h,39h,85h,89h
	DB	05h,24h,80h,15h,87h,30h,15h,87h,30h
	DB	03h,13h,88h,88h,88h,88h,88h,88h,88h
	DB	02h,41h,66h,66h,66h,66h,66h,66h,66h
	DB	01h,50h,00h,00h,00h,00h,00h,00h,00h


TanXAddY:
        DB      00h,00h,00h,00h,00h,00h,00h,00h,00h         ;;y0
        DB      01h,10h,03h,34h,67h,20h,85h,45h,05h	;;;,0ch         ;;Y1
        DB      01h,20h,27h,10h,03h,55h,08h,67h,24h	;;0ch         ;;Y2
        DB      01h,30h,93h,36h,24h,96h,09h,62h,32h	;;0ch         ;;Y3
        DB      01h,42h,27h,93h,21h,87h,38h,16h,17h	;;0ch         ;;Y4
        DB      01h,54h,63h,02h,48h,98h,43h,79h,05h	;;0ch         ;;Y5
        DB      01h,68h,41h,36h,80h,83h,41h,69h,23h	;;0ch         ;;Y6
        DB      01h,84h,22h,88h,38h,04h,63h,07h,94h	;;0ch         ;;Y7
        DB      00h,10h,29h,63h,85h,57h,05h,03h,64h	;;0bh         ;;Y8
        DB      00h,12h,60h,15h,82h,17h,55h,03h,39h	;;0bh         ;;Y9
;;;X+Y
        DB      00h,15h,57h,40h,77h,24h,65h,49h,02h	;;0bh         ;;1x+Y0
        DB      00h,16h,57h,74h,23h,96h,74h,03h,52h	;;0bh         ;;X+Y1
        DB      00h,17h,60h,11h,77h,60h,16h,35h,74h	;;0bh         ;;X+Y2
        DB      00h,18h,66h,74h,39h,74h,26h,45h,25h	;;0bh         ;;X+Y3
        DB      00h,19h,80h,20h,09h,43h,39h,30h,63h	;;0bh         ;;X+Y4
        DB      00h,21h,03h,71h,02h,14h,49h,86h,92h	;;0bh         ;;X+Y5
        DB      00h,22h,41h,54h,45h,32h,99h,65h,94h	;;0bh         ;;X+Y6
        DB      00h,23h,99h,69h,61h,05h,11h,79h,81h	;;0bh         ;;X+Y7
        DB      00h,25h,87h,04h,62h,81h,70h,52h,66h	;;0bh         ;;X+Y8
        DB      00h,28h,17h,56h,59h,42h,20h,52h,41h	;;0bh         ;;X+Y9

TanXMulY:
        DB      00h,00h,00h,00h,00h,00h,00h,00h,00h
        DB      01h,84h,37h,38h,00h,66h,43h,40h,27h	;;0ch
        DB      01h,68h,42h,97h,82h,48h,33h,72h,39h	;;0ch
        DB      01h,51h,82h,37h,33h,53h,42h,19h,57h	;;0ch
        DB      01h,34h,15h,38h,57h,52h,05h,47h,71h	;;0ch
        DB      01h,14h,91h,84h,28h,23h,19h,07h,43h	;;0ch
        DB      01h,06h,54h,79h,95h,00h,32h,10h,19h	;;0ch
        DB      01h,31h,17h,86h,43h,01h,20h,26h,71h	;;0ch
        DB      01h,60h,35h,67h,04h,23h,52h,76h,41h	;;0ch
        DB      01h,96h,25h,80h,14h,23h,00h,25h,09h	;;0ch
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EX_UP_CHK:
	DB      0feh,23h,02h,58h,50h,93h,00h,00h,00h	
EX_DOWN_CHK:
	DB      0feh,22h,79h,60h,00h,00h,00h,00h,00h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Ex::
;;;check input data
        call    ClearBuffer

        lda     #BufferXn
        sta     Addr1
        call    ClearData

        lda     #BufferTan
        sta     Addr1
        call    ClearData

        lda     #0
        sta     PointXn
        sta     PointT
        sta     SignXn
        sta     SignT
	;;;;------------------------------tom add 2002.03.22  svae input data to BufferXn
        lda     #OperandX
        sta     Addr1
	
        lda	#BufferXn
        sta	Addr2
        
        call	CopyData 
        
        lda	PointX
        sta	PointXn
        lda	SignX
        sta	SignXn
        
	;;;;------------------------------end 2002.03.22
        lda     #OperandX
        sta     Addr1
        		
        call    CheckData
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;edit tom 2002.04.01
        lda     DpCount
        sta     SignTemp
        adda    #0
        brz     Input0
        ;suba    PointX
        ;brnc    1$	
        ;cmpe    #04h
        ;brc	InputErr
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;old data
                
	
        lda     #OperandY
        sta     Addr1

        call    ClearData

        lda     SignX
        adda    #0
        brnz     2$

         lda     #^EX_UP_CHK         ;;;Get UP CHECK data
        sta     TableC+2

        lda     #@EX_UP_CHK
        sta     TableC+1

        lda     #<EX_UP_CHK
        sta     TableC

        lda     #0
        sta     Temp2

        call    GetData

        lda     #0
        sta     Temp2	
        sta	SignY

        br      3$
2$:
        lda     #^EX_DOWN_CHK         ;;;Get DOWN CHECK data
        sta     TableC+2

        lda     #@EX_DOWN_CHK
        sta     TableC+1

        lda     #<EX_DOWN_CHK
        sta     TableC

        lda     #0
        sta     Temp2

        call    GetData
        
        lda	#0
        sta	SignY
        sta     SignX           ;golden 2002/3/28
3$:
	;;;;---------------------------------edit by tom  2002.03.22
   	
        call	 Subtration
        
        lda	   SignZ
        adda   #0
        brnz	   100$
        
        lda	  SignXn
        adda  #0
        brz	  InputErr
        
        br	  ExInput0
100$:   
             
        ;;-------------------------------move inputer data to operandX
        lda	#BufferXn
        sta	Addr1
        
        lda	#OperandX
        sta	Addr2  
        
        call	CopyData
        
        lda	PointXn
        sta	PointX
        
        lda	SignXn
        sta	SignX
        

;;        call    Chk1

;        lda     #OperandX
;        sta     Addr1

;        lda     #OperandY
;        sta     Addr2

;        lda     #Length
;        sta     DpCount

;        call    CompareData

;        lda     SignX
;        adda    #0
;        brz     4$

;        lda     Temp1
;        cmpe    #01h
;        brz     ExInput0
;        br      1$

;4$:
;        lda     Temp1
;        cmpe    #01h
;        brz     InputErr
	;;;;---------------------------------end edit 2002.03.22

1$:
        call    ClearBuffer
	;;;;---------------------------------edit by tom 2002.03.22
;        lda     #BufferXn
;        sta     Addr1

;        call    ClearData
;        lda     #0
;        sta     PointXn
;        sta     SignXn
        
                                ;;save X to BufferXn
;        lda     #OperandX
;        sta     Addr1

;        lda     #BufferXn
;        sta     Addr2

;        call    CopyData

;        lda     PointX
;        sta     PointXn

;        lda     SignX
;        sta     SignXn
	;;;;---------------------------------end edit 2002.03.22
        lda     #0
        sta     SignX

        lda     #10h
        sta     BufferZ

        lda     #Length_Z
        deca
        sta     PointBz
ExLoop:
        lda     SignTemp
        adda    #0
        brz     EndEx

        lda     #BufferXn
        adda    #Length
        deca
        sta     r_dp

        lda     i

⌨️ 快捷键说明

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