如何在DSP上實(shí)現二進(jìn)制數折半查找算法
mar *,AR0
mar *BR0+ ,AR3 ;總數目的一半
lar AR3, #NTABLE;AR3指向數更的開(kāi)始
lacl #11 ;重復2的N次方,數列數據的個(gè)數為2的N次方
samm BRCR ;重復次數存放在BRCR中
ldp #LOOK
lace LOOK ;要查找數據存放在A(yíng)CC中
sub * ;與AR3所指的存儲單元的數據相減
bcnd nothere , LT ;ACC值小于0,要查找的數據不在本數列中
rptd nothere-1
bend found,EQ ;打到數據
xc 1, GT ;若ACC中的數據較大
mar *0+, AR0 ;
xc 1, LT ;若ACC中的數據較小
mar *0-, AR0 ;
mar *BR0+, AR3 ;查找空間減半
lacc LOOK
sub *
??;***********************
??;未找到,將ACC置0后返回
??;***********************
nothere retd
zac
nop
??;***********************
??;找到數據,將數據地址存放在A(yíng)CC中返回
??;***********************
found ldp #0
apl #0fffeh,PMST ;復位PMST位
retd
lamm AR3 ;存數據地址
nop 3 輔助說(shuō)明
程序中較為詳細的介紹了每個(gè)步驟所需完成的功能,下面就一些關(guān)鍵的地方進(jìn)行一些說(shuō)明。
?。?)程序如果找到查找的數據則返回數據所在的地址,未找到則送0至ACC寄存器。
?。?)程序中的mar BR0+,AR3是將當前AR(輔助寄存器)指定的數據存儲器的內容按逆向進(jìn)位方式加AR0的內容。由于 在該指令前有一條mar*,AR0指令,這條指令指定了下一條指令的輔助寄存器。因此在執行MAR BR0+,AR3時(shí),實(shí)際上是輔助寄存器AR0與自身逆向相位相加:
其結果是數據為原來(lái)的一半。實(shí)際上這條指令確定了折半查找算法中的“中間位置”。
?。?)samm BRCR指令程序執行是是與rptp nothere-1指令配合使用的。Samm指令的功能是將循環(huán)次數的值(這里是11)存放在BRCR中。BRCR(Block Repeat Counter Register)是個(gè)16位的寄存器,用于存放程序塊重復操作的次數。Rptp指令是重復操作指令,它的功能是重復執行下一條指令到該指令指定的地址之內的程序代碼,重復執行的次數由brcr決定。在上面的程序中,RPTR指令指定的地址是nothere-1,也就是說(shuō):重復執行的程序代碼從bcnd found直到nthere的前一指令Sub*。

評論