📄 div_32.asm
字号:
*****************************************************************************
** Description: div_32() in oper_32b.c **
** **
** Inputs : **
** ACC---Word32 L_num : Divisor **
** AR2---Word16 denom_hi : MSB of dividend **
** AR3---Word16 denom_lo : LSB of dividend **
** **
** Outputs: **
** **
** Return value : ACC Word32 **
** **
** CALL: _div_s **
** _mpy_32 **
** **
** Attribute : Cycles:340 Pm:34 **
** Modified Registers:AR1,XAR2,XAR3,XAR4,XAR5,XAR7 **
** @_buffer1--@_buffer1+3 **
** ACC,T,P **
** **
** Programmer : ZHOU Bei (ok! Mar 12th,2003) **
*****************************************************************************
.global _div_32
.ref _div_s
.ref _mpy_32
.ref _buffer1
_div_32:
;L_Extract (L_num, &n_hi, &n_lo);
MOV @_buffer1+3,AH
LSR AL,#1
MOV @_buffer1+2,AL
MOV AR1,#3FFFH
LCR _div_s ;AL=3FFF/AR2
;L_32 = Mpy_32_16 (denom_hi, denom_lo, approx)
PUSH ACC
MOV T,AL
ZAPA
MPYA P,T,AR2
MPYA P,T,AR3
MOVH AR7,P
ADD ACC,AR7<<1
;L_32 = L_sub ((Word32) 0x7fffffffL, L_32)
MOV @_buffer1+1,#7FFFh ; Get MAX_32
MOV @_buffer1,#0FFFFh
SUBL @_buffer1,ACC
;LSB>>1
MOV ACC,@_buffer1
LSR AL,#1
MOV @_buffer1,ACC
;L_32 = Mpy_32_16 (hi, lo, approx)
POP ACC
MOV T,AL
ZAPA
MPYA P,T,@_buffer1+1
MPYA P,T,@_buffer1
MOVH AR7,P
ADD ACC,AR7<<1
;L_Extract (L_32, &hi, &lo)
MOV @_buffer1+1,AH ;Save L_num to @_buffer1+2
LSR AL,#1
MOV @_buffer1,AL
;L_32 = Mpy_32 (n_hi, n_lo, hi, lo)
MOVL XAR7,#_buffer1+3
MOVL XAR6,#_buffer1+2
MOVL XAR2,#_buffer1+1
MOVL XAR3,#_buffer1
LCR _mpy_32
;L_32 = L_shl (L_32, 2)
LSL ACC,#2
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -