📄 wsin.asm
字号:
;=================================
WSIN
LDP #SIGNFLAG
SACH SIGNFLAG
ABS
SACB
LACC #1,15 ;ACC=0X8000
SFL
SFL ;accb=4l*0x8000l;
EXAR
WSIN_1
SBB ;while(acc>accb) acc-=accb; //>2*pi
BCND WSIN_1,C
ADDB
EXAR
SFR
EXAR ;accb=2l*0x8000l;
SBB
BCND WSIN_2,C
;========;if(acc>(accb>>1)) {signflag=!signflag; acc=acc-(accb>>1); }//>pi
ADDB
B WSIN_3
WSIN_2
;PUSH
SACL ACC_PUSH
LACC SIGNFLAG
CMPL
SACL SIGNFLAG
;POP
LACC ACC_PUSH
WSIN_3
EXAR
SFR
EXAR ;accb=0x8000l;
SBB
BCND WSIN_4,C
;========;if(acc>0x8000u) {acc=(accb>>1)-acc; }//>pi/2
ADDB
B WSIN_5
WSIN_4
ADDB
SBB
SBB
NEG
WSIN_5
BCND WSIN_END2,EQ
SBB ;accb=0x8000l;
BCND WSIN_END1,EQ
NEG
;else ta=wcos_1(0x8000u-acc);
CALL WCOS1
;PUSH
SACL ACC_PUSH
LACC SIGNFLAG
BCND WSIN_6,LT
;POP
LACC ACC_PUSH
RET
WSIN_6
;POP
LACC ACC_PUSH
NEG
RET
WSIN_END1
LACC SIGNFLAG
BCND WSIN_END1_1,LT
LACC #7FFFH
RET
WSIN_END1_1
LACC #8000H
RET
WSIN_END2
LACL #0
RET
;============================================
; if(a<0) { signflag=!signflag; ta=-a; }
; acc=ta*0x8000l; accb=4l*0x8000l;
; while(acc>accb) acc-=accb; //>2*pi
; if(acc>(accb>>1)) {signflag=!signflag; acc=acc-(accb>>1); }//>pi
; if(acc>0x8000u) {acc=(accb>>1)-acc; }//>pi/2
; if(acc==0x8000u) {if(signflag)ta=-0x8000l;
; else ta=0x7fff;}
; else if(acc==0) ta=0;
; else ta=wcos_1(0x8000u-acc);
; if(signflag) ta=-ta;
; return ta;
;=================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -