CALL DivModUI32 ;调用除法子程序
here: B here
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Description: 16 bit by 16 bit Unsigned Integer Divide And Modulus
; 16位除16位的无符号整数除法
.mmregs
STACK: .usect “STACK”,100h
.bss d_Num,1 ;为分子分配单元
.bss d_Den,1 ;为分母分配单元
.bss d_Quot,1 ;为商分配单元
.bss d_Rem,1
.def DivModUI16 ;定义16位除法子程序
.def start
.data
table1: .word 1000
table2: .word 5
.text
DivModUI16: RSBX SXM ; sign extention mode off
LD @d_Num,A ;将分子移到累加器A
RPT #(16–1) ;重复执行下面指令16次
SUBC @d_Den,A ;16次的减法循环,完成除法
STL A,@d_Quot ;将A的结果保存为商
STH A,@d_Rem
RET
start: STM d_NumL,AR2 ;将分子低16位所在单元的首地址传给AR2
STM d_Den,AR3 ;将分子低16位所在单元的首地址传给AR3
MVPD table1,*AR2 ;将table1开始的值传给AR2
MVPD table2,*AR3 ;将table2开始的值传给AR3
CALL DivModUI16 ;调用除法子程序
here: B here
程序分析:DSP做除法运算时,通过减法指令与重复循环指令实现无符号除法运算。需要注意的是,当被除数的绝对值除数的绝对值时,商为整数。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Description: 32 bit by 16 bit signed Integer Divide And Modulus
; 32位除16位有符号除法
.mmregs
STACK: .usect “STACK”,100h
.bss d_NumL,1 ;为分子低16位分配单元
.bss d_NumH,1 ;为分子高16位分配单元
.bss d_Den,1 ;为分母分配单元