新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 如何在DSP上實現(xiàn)二進制數(shù)折半查找算法

如何在DSP上實現(xiàn)二進制數(shù)折半查找算法

作者: 時間:2014-02-23 來源:網(wǎng)絡 收藏
break: normal; border-width: 0px; padding: 0px; margin: 10px; font-family: Arial, 宋體; font-size: 14px; line-height: 26px; background-color: rgb(255, 255, 255); ">  bin-search lar AR0,#0800h ;AR0數(shù)據(jù)的總數(shù)目

本文引用地址:http://m.butianyuan.cn/article/241697.htm

  mar *,AR0

  mar *BR0+ ,AR3 ;總數(shù)目的一半

  lar AR3, #NTABLE;AR3指向數(shù)更的開始

  lacl #11 ;重復2的N次方,數(shù)列數(shù)據(jù)的個數(shù)為2的N次方

  samm BRCR ;重復次數(shù)存放在BRCR中

  ldp #LOOK

  lace LOOK ;要查找數(shù)據(jù)存放在ACC中

  sub * ;與AR3所指的存儲單元的數(shù)據(jù)相減

  bcnd nothere , LT ;ACC值小于0,要查找的數(shù)據(jù)不在本數(shù)列中

  rptd nothere-1

  bend found,EQ ;打到數(shù)據(jù)

  xc 1, GT ;若ACC中的數(shù)據(jù)較大

  mar *0+, AR0 ;

  xc 1, LT ;若ACC中的數(shù)據(jù)較小

  mar *0-, AR0 ;

  mar *BR0+, AR3 ;查找空間減半

  lacc LOOK

  sub *

 ?。?**********************

 ??;未找到,將ACC置0后返回

  ;***********************

  nothere retd

  zac

  nop

 ?。?**********************

 ??;找到數(shù)據(jù),將數(shù)據(jù)地址存放在ACC中返回

 ?。?**********************

  found ldp #0

  apl #0fffeh,PMST ;復位PMST位

  retd

  lamm AR3 ;存數(shù)據(jù)地址

  nop  3 輔助說明

  程序中較為詳細的介紹了每個步驟所需完成的功能,下面就一些關鍵的地方進行一些說明。

  (1)程序如果找到查找的數(shù)據(jù)則返回數(shù)據(jù)所在的地址,未找到則送0至ACC寄存器。

 ?。?)程序中的mar BR0+,AR3是將當前AR(輔助寄存器)指定的數(shù)據(jù)存儲器的內容按逆向進位方式加AR0的內容。由于      在該指令前有一條mar*,AR0指令,這條指令指定了下一條指令的輔助寄存器。因此在執(zhí)行MAR BR0+,AR3時,實際上是輔助寄存器AR0與自身逆向相位相加:

  其結果是數(shù)據(jù)為原來的一半。實際上這條指令確定了算法中的“中間位置”。

 ?。?)samm BRCR指令程序執(zhí)行是是與rptp nothere-1指令配合使用的。Samm指令的功能是將循環(huán)次數(shù)的值(這里是11)存放在BRCR中。BRCR(Block Repeat Counter Register)是個16位的寄存器,用于存放程序塊重復操作的次數(shù)。Rptp指令是重復操作指令,它的功能是重復執(zhí)行下一條指令到該指令指定的地址之內的程序代碼,重復執(zhí)行的次數(shù)由brcr決定。在上面的程序中,RPTR指令指定的地址是nothere-1,也就是說:重復執(zhí)行的程序代碼從bcnd found直到nthere的前一指令Sub*。



關鍵詞: DSP 二進制數(shù) 折半查找

評論


相關推薦

技術專區(qū)

關閉