新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 如何在DSP上实现二进制数折半查找算法

如何在DSP上实现二进制数折半查找算法

作者:时间:2014-02-23来源:网络收藏
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数据的总数目

本文引用地址://m.amcfsurvey.com/article/241697.htm

  mar *,AR0

  mar *BR0+ ,AR3 ;总数目的一半

  lar AR3, #NTABLE;AR3指向数更的开始

  lacl #11 ;重复2的N次方,数列数据的个数为2的N次方

  samm BRCR ;重复次数存放在BRCR中

  ldp #LOOK

  lace LOOK ;要查找数据存放在ACC中

  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

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

  ;找到数据,将数据地址存放在ACC中返回

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

  found ldp #0

  apl #0fffeh,PMST ;复位PMST位

  retd

  lamm AR3 ;存数据地址

  nop  3 辅助说明

  程序中较为详细的介绍了每个步骤所需完成的功能,下面就一些关键的地方进行一些说明。

  (1)程序如果找到查找的数据则返回数据所在的地址,未找到则送0至ACC寄存器。

  (2)程序中的mar BR0+,AR3是将当前AR(辅助寄存器)指定的数据存储器的内容按逆向进位方式加AR0的内容。由于      在该指令前有一条mar*,AR0指令,这条指令指定了下一条指令的辅助寄存器。因此在执行MAR BR0+,AR3时,实际上是辅助寄存器AR0与自身逆向相位相加:

  其结果是数据为原来的一半。实际上这条指令确定了算法中的“中间位置”。

  (3)samm BRCR指令程序执行是是与rptp nothere-1指令配合使用的。Samm指令的功能是将循环次数的值(这里是11)存放在BRCR中。BRCR(Block Repeat Counter Register)是个16位的寄存器,用于存放程序块重复操作的次数。Rptp指令是重复操作指令,它的功能是重复执行下一条指令到该指令指定的地址之内的程序代码,重复执行的次数由brcr决定。在上面的程序中,RPTR指令指定的地址是nothere-1,也就是说:重复执行的程序代码从bcnd found直到nthere的前一指令Sub*。



关键词: DSP 二进制数 折半查找

评论


相关推荐

技术专区

关闭