📄 c54-9.asm
字号:
;
;;;;;;;;;;;;;;;;;;Function;;;;;;;;;;;;;;;;;;
;
.mmregs
.global _c54_sshvl
_c54_sshvl:
.if __far_mode
FRAME 2;
MVMM SP,AR0; //参数2地址放入AR0
FRAME -2
.else
FRAME 1;
MVMM SP,AR0; //参数2地址放入AR0
FRAME -1
.endif
FRAME -2
MVMM SP,AR2
FRAME -2
MVMM SP,AR3
DLD *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
DLD *AR0,B; // if 0 =< B <31,则A左移B中的位后饱和处理
STLM B,T
NOP
NORM A; //A = A << TS
NOP
SAT A
B result
big31:
SFTA A,15,A
SFTA A,8,A
SFTA A,8,A
SAT A; //A左移31位后进行饱和处理
B result
big33:
STM #0x8000,AH
STM #0x0000,AL
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
SUB #0x10,0,B; //B = |B| -16
BC littl32,BGT; //if 16<|B| <=31 goto littl32
DLD *AR0,B
NOP
STLM B,T
NOP
NORM A
B result
littl31:
SFTA A,-15,A
SFTA A,-16,A; //if B < -31 则A右移31位
B result
littl32:
LD #0xf0,B
STLM B,T
NOP
NORM A; //PREVIOUS SHIFT right 16bit
NOP
DLD *AR0,B
ADD #0x10,B
STLM B,T; //T = B
NOP
NORM 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 + -