dsp复习详解

更新时间:2023-10-18 15:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

三、TMS320C54X的指令系统

TMS320C5000指令系统 TMS320C54x的指令集 TMS320C54x的指令集有近两百条指令,按功能分为如下几类: ?算术运算指令?逻辑运算指令?程序控制指令?装入和存储指令 一、算术运算指令

算术运算指令可分为如下几类: ?加法指令?减法指令?乘法指令?乘加指令?乘减指令?双数/双精度指令?特殊操作指令 定点DSP中数据表示方法

当它表示一个整数时,其最低位(D0)表示1,D1位表示2的1次方,次高位(D14)表示2的14方。

如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1表示负数。例如,7FFFH表示最大的正数32767(十进制),而0FFFFH表示最大的负数-1(负数用2的补码方式显示)。 实现16位定点加法

‘C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于长立即数的加法。 1、 加法指令

使用ADD完成加法

LD temp1, A ;将变量temp1装入寄存器A ADD temp2, A ;将变量temp2与寄存器A相加 ;结果放入A中 STL A, temp3 ;将结果(低16位)存入变量 ;temp3中。

注意:这里完成计算temp3=temp1+temp2,我们没有特意考虑temp1和temp2是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。

利用ADDS实现32位数据装入:

LD #0,DP ; 设置数据页指针 LD 60H,16,A ; 将60H的内容装到A的高16位 ADDS 61H, A ; 将61H的内容加到A的低16位 DLD 60H,B ; 直接装入32位到B寄存器

2、 减法指令

TMS320C54x汇编指令集:符号与缩写:

ALU AR ARx BITC CC Cond [d],[D] DAB DAR dmad Dmem dst dst_ EAB EAR extpmad hi(A) K k3 k5 Dmem dst dst_ EAB EAR extpmad hi(A) K k3 k5 算术逻辑单元 辅助寄存器,通用 某一指定的辅助寄存器(0 ? x ? 7) 被测试位(0 ? BITC ? 15) 2位的条件码(0 ? CC ? 3) 条件执行指令中的操作数 延迟选项 D地址总线 DAB的地址寄存器 16位数据存储器立即地址 数据存储器操作数 目的累加器(A或B) 相对目的累加器的另一个累加器 E地址总线 EAB的地址寄存器 23位程序存储器的立即地址 累加器A中的高位部分(位32~16) 少于9位的短立即数 3位立即数(0 ? k3 ? 7) 5位立即数(-16 ? k5 ? 15) 数据存储器操作数 目的累加器(A或B) 相对目的累加器的另一个累加器 E地址总线 EAB的地址寄存器 23位程序存储器的立即地址 累加器A中的高位部分(位32~16) 少于9位的短立即数 3位立即数(0 ? k3 ? 7) 5位立即数(-16 ? k5 ? 15) Dmem dst dst_ EAB EAR extpmad hi(A) K k3 k5 Dmem dst dst_ EAB EAR extpmad hi(A) K k3 k5

数据存储器操作数 目的累加器(A或B) 相对目的累加器的另一个累加器 E地址总线 EAB的地址寄存器 23位程序存储器的立即地址 累加器A中的高位部分(位32~16) 少于9位的短立即数 3位立即数(0 ? k3 ? 7) 5位立即数(-16 ? k5 ? 15) 数据存储器操作数 目的累加器(A或B) 相对目的累加器的另一个累加器 E地址总线 EAB的地址寄存器 23位程序存储器的立即地址 累加器A中的高位部分(位32~16) 少于9位的短立即数 3位立即数(0 ? k3 ? 7) 5位立即数(-16 ? k5 ? 15) 实现16位定点减法:

‘C54X中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于无符号数的减法运算,SUBB用于带借位的减法运算(如32位扩展精度的减法),而SUBC为带条件的移位减,DSP中的除法就是用该指令来实现的。SUB指令与ADD指令一样,有许多的寻址方式

减法指令使用举例 SUB *AR1+, 14, A

? SUB A, -8, B

? SUBB 5, A

? SUBB *AR1+, B

利用SUBC实现除法

在‘C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。 利用SUBC完成Temp1/Temp2

LD temp1,B ;将被除数temp1装入B寄存器的低16位 RPT #15 ;重复SUBC指令16次 SUBC temp2,B ;使用SUBC指令完成除法 STL B,temp3 ;将商(B寄存器的低16位)存入变量temp3 STH B,temp4 ;将余数(B寄存器的高16位)存入变量temp4

注:实际上是完成整数除法

本文来源:https://www.bwwdw.com/article/7u5f.html

Top