📄 udivide3.asm
字号:
;; Vectorized and modified by: Jeff Axelrod
;; Original Version: Alex Tessarolo
;;---------------------------------------------------------------------------
;;
;; Algorithm: Quot = Num/Den
;; Rem = Num%Den
;;
;; NumH = n3|n2 QuotH = q3|q2
;; NumL = n1|n0 QuotL = q1|q0
;; Den = d1|d0 Rem = r1|r0
;;
;; Phase1: t1|t0|q3|q2 = ACC After repeating SUBC 16
;; ____________ times.
;; d1|d0 ) 00|00|n3|n2 = ACC Before.
;;
;;
;; Phase2: r1|r0|q1|q0 = ACC After repeating SUBC 16
;; ____________ times.
;; d1|d0 ) t1|t0|n1|n0 = ACC Before.
;;
;; NOTES: Sign extension and overflow mode must be turned off.
;;
;;===========================================================================
.include "ccall.asm"
.def _ti_udivide32
_ti_udivide32:
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 ; AR_N = n
mar *-,AR_QUOT ; AR_N--
mar *+,AR_NUM
mar *+
LOOP1:
; lacl div_NumH ; ACCH = 0 , ACCL = NumH
lacl *-,AR_DEN
rpt #14
; subc div_Den ; ACCH = Rem', ACCL = QuotH
subc *
subc *,AR_QUOT
; sacl div_QuotH
sacl *
; xor div_QuotH ; ACCH = Rem', ACCL = 0
xor *-,AR_NUM
; or div_NumL ; ACCH = Rem', ACCL = NumL
or *
adrk #3
mar *,AR_DEN
rpt #14
; subc div_Den ; ACCH = Rem , ACCL = QuotL
subc *
subc *+,AR_REM
; sach div_Rem
sach *+,AR_QUOT
; sacl div_QuotL
sacl *
adrk #3
mar *,AR_N
banz LOOP1,AR_NUM
DONE:
post_ccall 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -