📄 c54-12.asm
字号:
;
;;;;;;;;;;;;;;;;;;Function;;;;;;;;;;;;;;;;;;
;
.mmregs
.global _c54_sshvr
_c54_sshvr:
.if __far_mode
FRAME 3;
MVMM SP,AR0; //参数2地址放入AR0
FRAME -3
.else
FRAME 1;
MVMM SP,AR0; //参数2地址放入AR0
FRAME -1
.endif
FRAME -2
MVMM SP,AR2
FRAME -2
MVMM SP,AR3
LD *AR0,B; //参数2放入B
DST A,*AR3; //参数1放*AR3
BC littl,BLT; //if B<0 到littl
SUB #0x1f,0,B; //B=B-31
BC big31,BGT; //if B >31到big31
LD *AR0,B
SUB #0x10,0,B; //B = B-16
BC big32,BGT; //if 16 < B <=31到big32
LD *AR0,B
NEG B
NOP
STLM B,T
NOP
NORM A
B result
big31:
SFTA A,-16,A
SFTA A,-15,A
B result
big32:
SFTA A,-16,A; //先右移16位
NEG B
NOP
STLM B,T; //T = B
NOP
NORM A
B result
littl:
ABS B
DST B,*AR2
SUB #0x1f,0,B; //B = |B|-31
BC littl31,BGT; //if |B| >31到littl31
DLD *AR2,B
NOP
STLM B,T
NOP
NORM A
BC littl32,AEQ
SAT A
B result
littl31:
SFTA A,15,A
SFTA A,8,A;
SFTA A,8,A; //if B < -31 则A左移31位后饱和处理
BC littl34,ANEQ
littl32:
DLD *AR3,A
BC result,AEQ
BC littl33,ALT
STM #0x7FFF,AH
STM #0xFFFF,AL
B result
littl33:
STM #0x8000,AH
STM #0x0000,AL
B result
littl34:
SAT A
result:
FRAME 4
.if __far_mode
FRETD
NOP
NOP
.else
RETD
NOP
NOP
NOP
.endif
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -