打印

DSP学习中指令测试

[复制链接]
3871|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sqcumt123|  楼主 | 2012-3-8 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
控制指命令
  1.NOP        空操作,在建立流水线和执行延时的情况下有用。
  2.CLRC        control bit        清控制位
  3.SETC        control bit        置控制位
  control bit可以是:C、CNF、INTM、OVM、SXM、TC、XF。
  4.IDLE        等机
  受INTM位的影响
  PC+1 -> PC
  进入空闲模式,片内内设保持激活状态
  未被屏蔽中断激活   (这里的屏蔽是指中断控制寄存器里的屏蔽位(0004H))
  INTM=0,程序转移到它所影响的中断服务程序
  INTM=1,程序返回IDLE的下一条指令继续执行。如时是不可蔽屏中断MNI或RESET,进中断服务程序。
  5.BIT                位测试
  BIT                dma, bit code    (不是# bit code)
  BIT                ind, bit code[, ARn]
  影响TC,        数据被指定的位复制到TC,测试的位号=15 – bit code,所以要测试第6位的,那么bit code = 9。
  我们可以在头文件中定义:BIT0        .set                15
  BIT1        .set                14                ……
  则在写BIT指令时就符合我们的习惯用法,如:BIT        *, BIT0
  6.BITT        按TREG进行位测试
  BIT                dma
  BIT                ind[, ARn]
  参考BIT指令,相当于的TREG低四位赋值给bit code后执行。
  7.LDP                装载页面指针
  LDP                dma
  LDP                ind[, ARn]
  LDP                #k    (k如果超过9位,编译时会发出警告并丢弃高7位)
  影响DP位,LST        #0也可以修改DP。
  8.LST                        装载状态寄存器
  LST                #m, dma                        m=0加载到ST0,m=1加载到ST1
  LST        #m, ind[, ARn]
  影响ST0、ST1中除INTM外所有的标志位
  指令可用来中断或程序调用后来恢复状态寄存器
  LST #0改变ST0的ARP,ST1的ARB不受影响(原本是ARP改变时,原ARP值存入ARB)
  LST  #m, ind, ARn对ARP、ARB的影响同上,但乎略了ARn的影响。原指令等同于LST  #m, ind (不写ARn可读性更好),即对ARP、ARB的影响来自间接寻址的数据。
  状态寄存器的保留位总是读1,写操作对这些位无影响。
  测试时数据一直不对,原来是间接寻址时,误认为是把当前AR的值装入STm,其实当前AR的值只是一个地址,装入的是AR值所指向的地址单元。修改程序后结果正确。
  9.SST                保存状态寄存器
  SST                #m, dma                        不论DP为何值,直接寻址总是保存在第0页
  SST                #m,ind[, ARn]
  10.SPM                设定乘积输出方式
  SPM                constant(0~3)    (不是# constant)
  constant->PM                参考PM说明
  当constant超出范围时编译时不是警告后取低两位,而是错误提示。
  11.RPT                重复下一条指令
  RPT                dma
  RPT                ind[, ARn]
  RPT                #k
  重复执行下条指令N次,N为RPTC(16位重复计数器)的初始值加1。
  在上下文转换时不能保存PRTC,PRTC被清0。器件复位PRTC清0。
  重复循环可看作是可中断多期指令。
  对于块移动,相乘/累加和规格化等操作,RPT特别有用。
  重复指令本身不能被重复。如:RPT                #1
  RPT                #3
  编译可以通过,但运行时执行第二条RPT后,RPTC != 3,PRTC = 0。
  12.POP                        弹出栈至累加器
  TOP(堆栈顶) -> ACC                (硬件堆栈是FIFO 的8个单元)
  堆栈中的每个值都复制到地址加1的堆栈单元。
  要注意没有检查下溢的方法。
  13.PUSH                累加器低位入栈
  ACC -> TOP
  堆栈中的每个值者复制到地址减一单元,最后一个数据丢失。
  14.POPD                弹出堆栈至数据存储器
  POPD        dma
  POPD        ind[, ARn]
  15.PSHD                数据入栈
  PSHD        dma
  PSHD        ind[, ARn]
  堆栈操作和POP、PUSH一样。
分支跳转指令
  1.B        pma[, ind[, ARn]]                分支跳转
  Pma -> PC
  2.BACC                按ACC跳转
  ACCL -> PC
  3.BANZ        pma[, ind[, ARn]]        AR非零跳转
  当前AR = 0,  PC+2 -> PC
  当前AR != 0,  pma -> PC
  注意:当前AR默认修改为减1;如BANZ  PGM 等同于 BANZ  PGM, *- 。
  故可以用一个AR做循环计数,
  如:PGM:          NOP                (循环次数为当前AR值+1)
  BANZ  PGM
  4.BCND                条件跳转
  BCND        pma,cond1[, cond2][, …]   如果指定条件都满足,则跳转
  Cond        条件
  EQ                ACC=0                并不是所有的条件的组合都有意义
  NEQ        ACC!=0                多条件跳转时要注意冲突
  LT                ACC<0
  LEQ                ACC<=0                冲突会错误提示,如:
  GT                ACC>0                LT和GT
  GEQ        ACC>=0                UNC和所有的条件
  NC                C=0                        EQ和NEQ 和LEQ和GEQ任意两个
  C                C=1                        C和NC、OV和NOV、NTC和TC和BIO任意两个
  NOV        OV=0                (除N外,其它有字母相同的条件就冲突)
  OV                OV=1
  BIO                BIO引脚为低电平
  NTC        TC=0
  TC                TC=1
  UNC        无条件
  5.CC        pma, cond1[, cond2][, …]        条件调用
  它同BCND的区别只在于BCND不保存断点
  6.CALA                根据ACC的程序调用
  PC+1 -> TOS
  ACCL -> PC
  它同BACC的区别只在于BACC不保存断点
  7.CALL        pma[, ind[, ARn]]        无条件跳转
  它同B的区别只在于B不保存断点
  8.RET                返回
  TOS -> PC
  子程序和中断服务程序以RET指令结束
  9.RETC        条件返回
  RETC        cond1[,cond2][, …]
  指定条件都满足,就执行一个标准返回。
  条件同BCND说明。
  10.INTR        软中断
  INTR        k        0~31  ( 非 #k )
  不受INTM和中断屏蔽位影响。
  PC+1 -> TOS
  K*2  -> PC
  INTM=1
  11.NMI                不可屏蔽中断指令
  等于        INTR 18
  12.TRAP        软件陷阱中断
  相当于INTR        17;但不受INTM影响,也不影响INTM(唯一不置INTM的中断)。

相关帖子

沙发
kakio| | 2012-3-8 11:49 | 只看该作者
过来支持下楼主

使用特权

评论回复
板凳
kakio| | 2012-3-8 11:50 | 只看该作者
谢谢分享

使用特权

评论回复
地板
ssdw| | 2012-3-8 12:03 | 只看该作者
楼主写的很全 值得一看

使用特权

评论回复
5
ssdw| | 2012-3-8 12:04 | 只看该作者
支持下楼主

使用特权

评论回复
6
cooran| | 2012-3-9 16:31 | 只看该作者
学习一下

使用特权

评论回复
7
红酒雪梨| | 2012-3-11 09:40 | 只看该作者
谢谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

2107

帖子

1

粉丝