DSP指令
- 格式:ppt
- 大小:309.00 KB
- 文档页数:56
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
dsp内指令执行的流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!dsp内指令执行的流程DSP内指令执行的流程通常包括以下几个阶段:一、取指阶段1.1、从指令缓存中取出指令1.2、解码指令,识别操作码和操作数二、执行阶段2.1、根据操作码进行相应的运算操作2.2、访问寄存器文件,读取或写入操作数三、访存阶段3.1、如果指令需要访问存储器,则发送地址到数据存储器3.2、从数据存储器读取数据或向其写入数据四、写回阶段4.1、将运算结果写回寄存器文件4.2、更新程序计数器,指向下一条指令五、中断处理阶段5.1、检查是否有中断请求5.2、如果发生中断,则执行相应的中断服务程序总结:DSP的指令执行流程是一个典型的流水线过程,通过多个阶段的协同工作,实现对指令的高效执行。
实验二、CCS操作Cmd文件(实验二、三、四)MEMORY{PAGE 0:VECS: org=0x0080, len=0x80PROM: org=0x1000, len=0x1000 /* 4k words */PAGE 1:STACK: org=0x100, len=0x400 /* 1k words */DARAM: org=0x2000, len=0x1000 /* 4k words */}SECTIONS{ .text :> PROM PAGE 0vectors :> VECS PAGE 0.bss :> DARAM PAGE 1.data :> DARAM PAGE 1}S54文件;An example to show how to write an assembly language source file; y=a1*x1+a2*x2;******************************************************************************STACK_ADDR .set 0x0500 ;设置堆栈底端地址;在变量段分配数据,为未初始化的变量保留空间.bss a,2.bss x,2.bss y,1;在数据段分配数据,存入初始化数据.datatable:.word 10,5 ;初始化a1=10,a2=5.word 8,6 ;初始化x1=8,x2=6.mmregs ;开启系统默认的寄存器.global main ;定义全局符号;------------------------------------------------------------------------------.text ;开始编写程序main:stm #STACK_ADDR, SP ;设置堆栈stm #0x00a8, PMSTstm #0x0000, SWWSR;================================================stm #a, AR2 ;设置AR1 指向 astm #table, AR3 ;设置AR3指向tablerpt #1mvdd *AR3+, *AR2+ ;循环一次,将0x000A和0x0005存放在地址0x2000 stm #x, AR2 ;设置AR2指向xrpt #1mvdd *AR3+, *AR2+ ;将地址0x2005低16位的0x0008和0x0006存放到地址为0x2002的存储器空间call SUM ;执行sum模块的功能;死循环,使PC在当程序结束时锁定在一个已知的区域dead_loop:nopnopnopb dead_loop;================================================; y=a1*x1+a2*x2SUM:stm #a, AR3 ;设置AR3指向astm #x, AR4 ;设置AR4指向xrptz A, #1 ;清零寄存器A,并设置将下条乘加指令循环一次mac *AR3+, *AR4+, A ;完成a1*x1+a2*x2,最终的结果存放在A中stl A, *(y) ;将寄存器A的底16位存放在地址0x2004ret;------------------------------------------------------------------------------.sect "vectors" ;定义初始化了的带名称的段int_RESET:b main ;当有复位中断时,跳转至mainnopnop.space 124*16 ;若没有其他的中断,保留空间初始化时将A与X互换位置实验三:使用者如果希望修改其功能,可以直接编写gel文件,保存并重新装载。
指令语法说明dma数据存储器地址的7位最低有效位,它与数据页面指针(DP)构成一个完整的16位数据存储器地址。
pma 16位程序存储器地址。
shift左移0~15位(缺省为0)。
ARn n为数值0~7,ARn指定下次的辅助寄存器。
ind选择以下7种符号之一。
*,*+,*-,*0+,*0-,*BR0+,*BR0-。
# 立即寻址方式中常用的前缀。
数值前面带“#”,表示该数值为一个立即数。
例如:ADD #3h,表示累加器的内容和3h相加。
数值前面不带“#”,表示该数值为间接寻址中在数据指针DP所选定的据存储器页面内的偏移量。
例如:ADD 3h,表示累加器的内容与数据指针DP所选定的当前页面内的3h单元的内容相加。
k8位短立即数。
lk16位长立即数。
在指令格式中用k和lk来区分8位和16位的立即数(在实际指令书写中长立即数前面不带“l”)。
例如:ADD #222h,1;将长立即数222h左移1位与累加器内容相加,222h前就不带“l”。
[, x]操作数x是可选项。
[x1[, x2]] 操作数x1和x2是可选项,如果若不写x1,也就不能写x2。
例如指令ADD ind[, shift[, ARn]]中必须提供ind,而shift和ARn可以缺省,* 但若没有shift,就不能写ARn。
如ADD *+ 还可以包括可选项shift,如ADD *+, 5。
** 如果希望包含ARn,即使不移位,也必须写上shift,如ADD *+,0,AR2操作数0表示不移位,但必须写。
ADD *+,AR2是错误指令。
DSP汇编指令引言DSP是指数字信号处理器,是一种专门用于数字信号处理的微处理器。
DSP汇编指令是在DSP芯片上执行操作的命令。
这篇文档将常见的DSP汇编指令及其使用方法。
通用指令MOVMOV是Move的缩写,指将数据从一个寄存器移动到另一个寄存器或内存地址中。
它有很多不同的格式,例如:MOV R1, #0 ; 将0存储在R1寄存器中MOV R2, R1 ; 将R1寄存器中的值复制到R2寄存器中MOV @R3, R2 ; 将R2寄存器中的值存储在R3指向的内存地址中ADD和SUBADD和SUB分别表示加法和减法运算。
它们也有不同的格式,例如:ADD R1, R2 ; 将R2寄存器中的值加到R1寄存器中ADD R1, #2 ; 将2加到R1寄存器中SUB R1, R2 ; 将R2寄存器中的值从R1寄存器中减去AND和ORAND和OR分别表示按位与和按位或运算。
它们也有不同的格式,例如:AND R1, R2 ; 将R1寄存器和R2寄存器中的值按位与后存储在R1寄存器中OR R1, R2 ; 将R1寄存器和R2寄存器中的值按位或后存储在R1寄存器中CMPCMP是Compare的缩写,用于比较两个值。
它会将两个操作数相减,并设置相关的标志位。
它的格式如下:CMP R1, R2 ; 比较R1和R2寄存器中的值跳转指令JMPJMP是Jump的缩写,用于无条件跳转到目标地址。
它的格式如下:JMP label ; 跳转到标签为label的位置JNZ和JZJNZ和JZ分别表示如果结果不为零则跳转和如果结果为零则跳转。
它们的格式如下:JNZ label ; 如果前一条CMP指令比较结果不为零,则跳转到标签为label的位置JZ label ; 如果前一条CMP指令比较结果为零,则跳转到标签为label的位置JGE和JLEJGE和JLE分别表示如果大于或等于则跳转和如果小于或等于则跳转。
它们的格式如下:JGE label ; 如果前一条CMP指令比较结果大于或等于,则跳转到标签为label的位置JLE label ; 如果前一条CMP指令比较结果小于或等于,则跳转到标签为label的位置循环指令DJNZDJNZ是Decrement and Jump if Not Zero的缩写,表示如果操作数不为零则减1并跳转到目标地址。