DSP56800指令集与汇编语言

合集下载

轻松学会DSP——DSP汇编指令

轻松学会DSP——DSP汇编指令

位倒序寻址的执行
设FFT长度N=16,x(0)~x(15)位于地址 (01100000)~(01101111),则AR0赋值为8 (00001000),位倒序方式读入数据情况如下(AR2初 始为01100000): RPT #15 PORTW *AR2+0B,PA
功能: 地址=AR2 , AR2=B(AR2+AR0)
循环寻址的有效地址计算
循环缓冲器的有效基地址(EFB)就是用户选定的 辅助寄存器(ARx)的低N位置 0后所得到的值。
循环缓冲器的尾地址(EOB)是通过用BK的低N位 代替ARx的低N位得到。循环缓冲器的INDEX就是 ARx的低N位,step就是加到辅助寄存器,或从辅 助寄存器中减去的值。循环寻址的算法如下:
FFT中混序就是位倒序
FFT运算时输出/输入序列中必有其一要混序。
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
存储单元 地址
FFT变换 结果
位码倒序
位码倒序 寻址结果
0000
X(0)
0000
X(0)
1000
X(1)
0001
X(8)
0001
X(8)
1000
X(1)
1001
X(9)
1001
MVMD pmad, Smem
程序存储器地址(pmad)寻址:
FIRS Xmem, Ymem, pmad MACD Smem, pmad, src
MACP Smem, pmad, src MVPD pmad, Smem
端口地址(PA)寻址
PORTR PA, Smem
PORTW Smem, PA
*(lk)寻址适用于支持单数据存储器操作数的指令

DSP汇编语言编程基础

DSP汇编语言编程基础

实验二 DSP汇编语言编程基础一、 实验目的1、了解DSP的寻址方式;2、了解DSP的汇编语言与C语言混合编程。

二、 实验器材1、安装有CCS的PC机一台;三、 实验内容1、建立一个工程;2、用汇编语言编程实现一个可被C程序调用的例程。

四、 实验步骤1、汇编语言和C语言混合编程:(1) 运行CCS,建立一个工程,取名exp2a,并保存到c:\ti\myprojects\xxx\Experiment2\目录下。

(2) 编辑如下C文件,取名exp2a.c并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

/* Assembly routine */extern int sum(int *);/* define x[] as global array */int x[2]={0x1234,0x4321};/* define result s as global variable */int s;void main(){s = sum (x); /* return sum product */}(3) 编辑如下汇编文件,取名exp2_sum.asm并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** exp2_sum.asm SUM subroutine* called by exp2a.c* Input: Array pointer* Output: Return sum result in T0* * * * * * * * * * * * * * * * * * * * * * * * * * * * *.global _sum_summov *AR0+,AC0 ; AC0 = x[1]add *AR0+,AC0 ; AC0 = x[1]+x[2]mov AC0,T0ret ; Return T0.end(4) 编辑如下链接命令文件,取名link.cmd并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。

dsp汇编指令系统介绍(精)

dsp汇编指令系统介绍(精)

汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表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指令大全(最全)

DSP指令大全(最全)

附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件“真”,§条件“假”,※延迟指令。

四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。

dsp汇编指令系统介绍(精)

dsp汇编指令系统介绍(精)

汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表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 56800单片机内部组成与特点

DSP 56800单片机内部组成与特点

内部程序 Flash/ROM 内部程序 RAM 内部数据 Flash/ROM 内部数据 RAM
外设
JTAG
程序控制器PCU
SR OMR LA LC PC HWS
指令解码 与 中断控制
地址发生器 AGU
M01 N
+/-
SP
MOD ALU
R0 R1
R2

R3
时钟控制 PAB XAB1 XAB2 PDB CGDB PGDB XDB2
在运算或数据处理时,可进行带符号与无符号数的算术运算,支持无 符号整型数据的逻辑运算。其中的乘/加法器MAC支持在一个周期内 并行完成乘和加的运算;极值限制器可监视从36位到32位和从20位到 16位的传送/运算指令的正确执行,不至于因越界而出现错误。共计处 理的数据类型有9种,即8位/16位/32位无符号/带符号数、16位带符 号小数、32位/36位带符号双精度小数。 2. 地址产生器AGU
3. 程序控制器PCU 程序控制器包括1个程序计数器PC,1个状态标志寄存器SR,1个循
环地址寄存器LA,1个循环计数器LC, 1个操作方式寄存器OMR, 1个 硬件堆栈HWS,1个指令解码器与中断控制器。
程序计数器PC用来存放指令地址,状态标志寄存器还可分为MR和 CCR两个部分,共16位。实际使用11位,用以设置状态标志和条件码。 循环地址寄存器LA、循环计数器LC和硬件堆栈HWS主要用于循环指令 的执行。
单片机原理与应用
DSP 56800单片机内部组成与特点
1.1 DSP 56800单片机内部组成与特点 1.2 定时器与中断控制 1.3 串行通信接口 1.4 模数转换器ADC 1.5 相位检测器与脉冲调宽输出PWM
1.1 DSP 56800单片机内部组成与特点

第七章_DSP的汇编伪指令

第七章_DSP的汇编伪指令
• 符号.usect“段名”,字数 • 符号.sect“段名”,字数(建立的块可重定位) • 符号.asect“段名”,地址(建立具有绝对地
址的块) • .usect建立的段是在RAM中为变量保留空间
(类似于.bss段),.sect建立的是包含代码或数 据的段(类似于.text段和.data段)。 • 汇编器确定汇编语言程序的各个部分属于哪 一个特定的段,汇编器有六个命令来完成这种 功能,即:用于创建未初始化段.bss, .usect和 用于创建已初始化.text, .data, .sect,.asect, 如果程序未作说明,则统一汇编到.text段中。
宏语言可以使用户:
定义自己的宏,或重新定义正执行的宏 简化长的或复杂的汇编代码 访问由归档器建立的宏库 在一个宏内定义条件块和可重复的块 在一个宏内操作字符串 控制展开列表
定义宏
在程序中使用宏之前,首先必须定义它。可 以用两种方法来定义:
(1)在源文件开始处定义; (2) .include/.copy文件中定义; (3)在宏库中定义。
汇编伪指令
伪指令(Assembler Directives)
段定义伪指令
❖.bss
在该段中保留若干字
❖.data
汇编入已初始化的数据段
❖.sect “section name” 汇编入已命名的段
❖.text
汇编入可执行的代码段
.bss page,128 在 .bss段中为page定义128个字。
写入一个命令文件link.cmd :
定义宏举例
* add3 p1, p2, p3 (形参) * p3 = p1 + p2 + p3
add3 .macro p1, p2, p3 lacc p1 add p2 add p3 .endm

DSP汇编语言程序设计

DSP汇编语言程序设计
序员用“段”伪指令来组织程序的结构。程序一般由 数据段、堆栈段和代码段组成。
.data用于存放有初值的数据块;.usect用于为堆栈 保留一块存储空间;.text用于设置代码段。另外,.bss 用于为变量保留一块存储空间;.sect常用于定义中断 向量表。
程序的基本结构有四种:顺序结构、分支结构、 循环结构和子程序结构。
或星号(*)。
[标号][:] 空格 [助记符] 空格 [操作数] 空格 [;注释]
要点 建议
可以是助记符指令、汇编指令、宏 指令和宏调用命令。
1.助记符指令,一般用大写; 2.汇编命令和宏命令,以句号“.” 开始,且为通常用小写。
[标号][:] 空格 [助记符] 空格 [操作数] 空格 [;注释]
第4章 DSP汇编语言程序设计
4.1 TMS320C54x汇编语言的基本概念 4.2 TMS320C54x汇编语言程序设计的基本方法 4.3 TMS320C54x汇编语言程序的编辑、汇编与链接过程 4.4 汇编器 4.5 链接器 4.6 汇编程序举例
4.1 TMS320C54x汇编语言的基本概念 1.汇编语言源程序的句法格式
.data后是已初始化数据,有int和word两种数据形 式。由命令文件可以将定义的数据存放于程序或数据 存储器中。
.sect建立包含代码和数据的自定义段,常用于定 义中断向量表。
2.常数初始化伪指令
(1) .bes和 .space。汇编器对这些保留的位填0,将 位数乘以16来实现保留字。当标号与.space连用时,标 号指向保留位的第一个字;当标号与.bes连用时,标号 指向保留位的最后一个字。
实现以下任务: (1) 将数据和代码汇编到特定的段。 (2) 为未初始化的变量保留存储空间。 (3) 控制展开列表的形式。 (4) 存储器初始化。 (5) 汇编条件块。 (6) 定义全局变量。 (7) 指定汇编器可以获得宏的特定库。 (8) 检查符号调试信息。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.7 算数与逻辑运算指令

加法 减法 比较 加1 减1 比较 等等
4.8 DSP56800中的并行处理




内核三个组成: 算数逻辑单元ALU、地址产生器AGU、 程序控制器PC 4.8.1 单并行处理 并行处理的原则:当ALU进行算数或逻辑 运算时,内核的通用数据总线CGDB上可 以进行数据传输,即MOVE执行。 单并行处理:ALU中的运算和CGDB上的 数据传输在1个周期内同时完成。
4.3 数据传输指令

LEA和POP指令 LEA-地址寄存器加/减1 eg: LEA X:(R0)+;将R0+1的值放入R0中
POP-从堆栈中弹出SP指向的当前值到某一 寄存器R中,然后SP的值减1。 eg: POP R


4.4 乘法与乘/加指令



IMPY:整数乘法指令实现16位整数与16位整数 的乘法,结果超出16位的话会出现错误,溢出标 志会置位。 MAC:将两个带符号的16位源寄存器的操作数 S1和S2的积与指定的36位目标累加器D进行加/ 减 MACR:除完成MAC功能,还实现结果四舍五入 MPY:实现16位带符号数相乘,并将32位乘积 存入目标寄存器中。 MPYR:实现16位带符号小数相乘,并将32位乘 积进行舍入处理后再存储在目标寄存器中。
4.3 数据传输指令




MOVE #$0010,A0 MOVE X0,X:R0 MOVE X:(R0+offset),X1 MOVE X:(R0+N),X1 MOVE Y1,X:(R0)+ MOVE Y1,X:(R0)+N LEA X:(R0)+ POP R MOVE (SP)-,R
4.1.2 常用汇编管理指令





6、XDEF和XREF XDEF-在本文件中定义可以被其他文件中的程序 调用的子程序; XREF-说明本子程序的定义在其他文件中。 XDEF ASM_ROUTINE XREF C_FUNCTION,BUSY_FLG ASM_ROUTINE BFSET #$0001,X:BUSY_FLG BCS BUSY JSR C_FUNCTION BFCLR #$0001,X:BUSY_FLG BUSY RTS
4.2 DSP56800的寻址方式



4.2.4 带有偏移量的寄存器间接寻址 MOVE X(R0±offset),X1 4.2.5 带事后加/减1的寄存器间接寻址 MOVE Y1,X(R0)+ 4.2.6 带事后加/减n的寄存器间接寻址 MOVE Y1,X(R0) +N 4.2.7 存储器绝对短寻址与I/O短寻址
表4.6 单并行处理指令
可以做1次并行 数据传输的指令 并行数据传输的指令

目标
MAC/MACRMP X:(R1)+ X0/Y1/Y0 Y/MPYR/ADD/ X:(R0)+ A/B/A1/B1 SUB/CMP/TFR/ X0/Y1/Y0 X:(R1)+ ABS/ASL/ASR/ X:(R0)+N CLR/RND/TST/ A/B/A1/B1 INC/DEC/NEG eg:ADD X0,A Y0,X:(R1)+N 在执行将X0的内容加到A的同时,Y0传送给以R1间址 的数据存储器中,然后R1寄存器中的地址值刷新为R1 加上N寄存器中的值。
混合编程

1、main.c 文件中: int asmadd(int, int);
2、*.asm文件中: global Fasmadd

4.2 DSP56800的寻址方式






4.2.1 立即数寻址与绝对地址寻址 立即数寻址指的是汇编指令中的操作数是一个 数值。如:MOVE #$0001,A 绝对地址寻址指的是一个绝对地址。 4.2.2 寄存器直接寻址(操作数是寄存器) MOVE.W R0,A0 ;将R0寄存器的值传送给A0 4.2.3 寄存器间接寻址(以寄存器R0、R1、R2、 R3中的值为指针的寻址) MOVE.L X:$1000,A0
4.5 除法指令


除法: DIV S,A(或B) A(或B)是被除数,S是除数 eg: BFCLR #$1,SR ;清进位、借位标志 REP 16 ; DIV X0,B ADD X0,B ;
4.6 移位指令


算数左移 算数右移 ASL/ASR 逻辑左移 逻辑右移 LSL/LSR 循环左移 循环右移 ROL/ROR

注:语句标号前面不能有空格,应以字母开头,后面 接英文、数字、美元符$和下横线_。标号不能重复定义。
4.1.2 常用汇编管理指令




汇编管理指令(伪指令) 不与任何处理器指令相对应。 提供给汇编程序的指令,没有对应的机器 码生成。 1、ORG-定位伪指令 格式 : ORG <表达式> ;注释 如: ORG P:$1000
4.3 数据传输指令


以MOVE为主,可以实现立即数向内部寄 存器、数据存储器、输出设备的写入,实 现寄存器之间、寄存器与数据存储器和程 序存储器之间、寄存器与I/O设备之间的数 据传输。 某些数据传输指令可以与算术运算指令、 逻辑运算指令同时读入,并行执行。算数 运算指令还可以并行地执行另外两条指令, 分别通过不同的2条数据总线从存储器中并 行读入数据,实现并行数据传输。
4.1.2 常用汇编管理指令
பைடு நூலகம்


2、EQU-赋值管理指令 格式: 标号 EQU <表达式> ;注释 3、DC-定义常数 格式: (<标号>) DC <表达式> 4、DS-保留存储器字节管理指令 格式: (<标号>) DC <表达式> 5、END-表示汇编程序结束 格式: END (<标号>)
第四章 DSP56800指令集与汇编语言 (2)


4.7 算数与逻辑运算指令 4.8 DSP56800中的并行处理 4.9 位操作与位测试指令 4.10 跳转与返回指令 4.11 其他控制指令 4.12 规格化指令NORM
4.1.1 DSP56800汇编语言格式
汇编语言的格式是: Label Opcode operands ;注释 Label:语句标识,编译后生成程序 地址入口标识。 Opcode-操作码,表示指令类型。 Operands-操作对象。
相关文档
最新文档