⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 divide16.asm

📁 包含几个高效的矢量运算的数学函数
💻 ASM
字号:

;; Vectorized and modified by: Jeff Axelrod
;; Original Version:	Alex Tessarolo

;;===========================================================================
;;
;; Description:	16 Bit By 16 Bit Signed Integer Divide And Modulus.
;;
;;---------------------------------------------------------------------------
;; Input:	div_Num	
;;		div_Den	
;;
;; Modifies:	P
;;		T
;;		SXM
;;		OVM
;;		DP
;;		ACC
;;
;; Output:	div_Quot
;;		div_Rem	
;;
;;---------------------------------------------------------------------------
;;
;; Algorithm:	Quot = Num/Den
;;		Rem  = Num%Den
;;		
;;		Num	= n1|n0		Quot	 = q1|q0
;;		Den	= d1|d0		Rem	 = r1|r0
;;
;;		Signed division	is similar to unsigned division	except
;;		that the sign of the Den and Numerator must be taken into
;;		account. First the sign	is determined then divion is 
;;		performed on the absolute values.
;;
;;				r1|r0|q1|q0 = ACC After	repeating SUBC 16
;;			       ____________   times.
;;			d1|d0 )	00|00|n1|n0 = ACC Before.
;;
;;		NOTES:	Sign extension and overflow mode must be turned	off.
;;
;;===========================================================================

	.include "ccall.asm"
	
	.def	_ti_divide16
_ti_divide16:
	pre_ccall 5,AR_NUM,AR_DEN,AR_QUOT,AR_REM,AR_N
	clrc	SXM			; MUST turn sign extension mode off.
					; Note: Overflow mode is off in C.
	mar *,AR_N
	banz LOOP4
	b DONE

LOOP4:
;	lt	div_Num
	lt *,AR_DEN
;	mpy	div_Den			; P = sign of Num * Den	
	mpy *,AR_NUM
;	lacc	div_Num,16		; Take absolute value of Num.
	lacc *+,16,AR_QUOT
	abs
;	sach	div_Quot		
	sach *,AR_DEN
;	lacc	div_Den,16		; Take absolute value of Den.
	lacc *+,16,AR_REM
	abs
;	sach	div_Rem
	sach *,AR_QUOT
;	lacl	div_Quot		; ACCH = 0   , ACCL = Num
	lacl *,AR_REM
	rpt	#15			
;	subc	div_Rem			; ACCH = Rem , ACCL = Quot
	subc *
;	sach	div_Rem
	sach *+,AR_QUOT
;	sacl	div_Quot		
	sacl *+,AR_N
	pac				; ACC = sign of Num * Den
	bcnd	DivModI16Skip,GEQ			
	mar *,AR_QUOT
	mar *-
;	lacc	div_Quot,16		; If negative, negate Quot.
	lacc *,16
	neg
;	sach	div_Quot
	sach *+,AR_N
DivModI16Skip:
	banz LOOP4,AR_NUM

DONE:
	post_ccall 5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -