📄 div_s.asm
字号:
***************************************************************************
** Description: div_s() in basicop2.c
**
** Inputs:
**
** AR1: Word16 var1
** AR2: Word16 var2
**
** Outputs:
**
** Return value:
**
** AL: Word16 var_out
**
** Attribute: Cycles: 125 Pm: 17
**
** Modified Registers: ACC, P
**
** Programmer: Liu Yang
**
** Complete time: 2003 3 11
*****************************************************************************
.global _div_s
_div_s:
CMP AR1,#0 ; if (var1 == 0)
SB B1,NEQ
MOV AL,#0 ; var_out = 0
LRETR
B1: MOV AL,@AR1 ; if (var1 == var2)
CMP AL,@AR2
SB B2,NEQ
MOV AL,#0x7FFF ; var_out = MAX_16
LRETR
B2: MOV ACC,@AR1 << #15 ; ACC = 0x8000 * var1
MOVL P,ACC ; Load P register with the numerator 0x8000 * var1
MOVZ AR2,@AR2 ; Move denominator var2 to XAR2
MOVB ACC,#0 ; Clear ACC to perform the division.
NOP
NOP
NOP
RPT #31
||SUBCUL ACC,@XAR2 ; Divide numerator var1 by the denominator var2
; the quotient var_out is in P and the remainder is in ACC
MOVL ACC,@P ; Load the quotient var_out into ACC
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -