第三章 基本指令实验
§3.1 [实验3.1] 循环操作
一、实验目的
1. 掌握循环操作指令的运用;
2. 掌握用汇编语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2. DSP实验箱的TMS320C5416主控板;
3. DSP硬件仿真器。
三、实验原理
TMS320C54x具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。本实验要求编写一程序完成 的计算。这个求和运算可以通过一个循环操作指令BANZ来完成。BANZ的功能是当辅助寄存器的值不为0时转移到指定标号执行。
例如:
STM #4, AR2
loop: ADD *AR3+, A
BANZ loop, *AR2– ;当AR2不为零时转移到loop行执行。
假设AR3中存有x1到x5五个变量的地址,则上述简单的代码就完成了这五个数的求和。
四、实验步骤
1. 学习有关指令的使用方法;
2. 在CCS环境中打开本实验的工程(Ex3_1.pjt),阅读源程序;
3. 编译并重建 .out 输出文件(Rebuild All…),然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中;
4. 在“end:B end”代码行设置断点(当光标置于改行时,单击工具条上的Toggle Breakpoint图标,此时该行代码左端会出现一个小红点或双击此行),单击运行;
5. 选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。应能看到五个加数的值及其求和值。
注意查看0X0060--0X0065单元中计算值显示的十六进制结果。
6. 停止程序的运行(单击);
7. 尝试改变对变量的初始赋值,或者增加或减少变量数目,重复上述3~6步过程,验证程序运行结果。
五、思考题
1. 总结迭代次数与循环计数器初值的关系(在本实验的代码中,用AR2作为循环计数器,设其初值为4,共执行了5次加法。);
2. 学习其它转移指令。
§3.2 [实验3.2] 双操作数乘法
一、实验目的
1. 掌握TMS320C54x中的双操作数指令;
2. 掌握用汇编语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2. DSP实验箱的TMS320C5416主控板;
3. DSP硬件仿真器。
三、实验原理
TMS320C54x片内的多总线结构,允许在一个机器周期内通过两个16位数据总线(C总线和D总线)寻址两个数据和系数。双操作数指令是用间接寻址方式获得操作数的,并且
只能用AR2到AR5的辅助寄存器。双操作数指令占用较少的程序空间,而获得更快的运行速度。
现举一例说明双操作数指令的用法。试求y=mx+b,则用单操作数指令的代码应该如下:
LD @m, T
MPY @x, A ; 单操作数乘法指令
ADD @b, A
STL A, @y
若用双操作数乘法指令则改为:
STM @m, AR2
STM @x, AR3
MPY *AR2, *AR3, A ; 双操作数乘法指令
ADD @b, A
STL A, @y
表面上从代码的行数来看,用双操作数乘法指令似乎没有什么显著优势,但是双操作数指令可以节省机器周期,这在某些迭代运算过程中是十分有用的;迭代次数越多,节省的机器时间越多。
本实验要计算的乘法累加就是双操作数指令的一种应用场合。
四、实验步骤
1. 学习有关双操作数乘法指令的使用方法;
2. 在CCS环境中打开本实验的工程(Ex3_2.pjt),阅读源程序;
3. 编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中;
4. 在“end:B end”代码行设置断点 (或双击此行便可完成断点设制),单击运行;
5. 选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值a,x和z的变化。
注意查看0X0060--0X0075单元中计算值显示的十六进制结果。
6. 停止程序的运行(单击);
7. 改变对变量ai和xi的初始赋值,重复上述过程,验证程序运行结果。
五、思考题
1. 试用单操作数指令完成上述计算;
2. 学习其它双操作数指令。
§3.3 [实验3.3] 并行运算
一、实验目的
1. 掌握TMS320C54x中的并行运算指令;
2. 掌握用汇编语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2. DSP实验箱的TMS320C5416主控板;
3. DSP硬件仿真器。
三、实验原理
TMS320C54x片内有1条程序总线,3条数据总线和4条地址总线。这3条数据总线(CB、DB和EB)将内部各单元连接在一起。其中,CB和DB总线传送从数据存储器读出的操作数,EB总线传送写到存储器中的数据。并行运算就是同时利用D总线和E总线。其中,D总线用来执行加载或算术运算,E总线用来存放先前的结果。
并行指令有并行加载和乘法指令,并行加载和存储指令,并行存储和乘法指令,以及并行存储和加/减法指令4种。所有并行指令都是单字单周期指令。并行运算时存储的是前面的运算结果,存储之后再进行加载或算术运算。这些指令都工作在累加器的高位,且大多数并行运算指令都受ASM(累加器移位方式位)影响。
现举一个并行指令为例:
ST src, Ymem ; Ymem = src << (ASM-16)
|| LD Xmem, dst ; dst = Xmem <<16
这个并行加载和存储指令实现了存储ACC和加载累加器并行执行。其它的并行指令请读者查阅相关资料。
本实验中要求用并行运算指令编写程序完成 z = x + y和 f = e + d的计算。
四、实验步骤
1. 学习有关并行指令的使用方法;
2. 在CCS环境中打开本实验的工程(Ex3_3.pjt),阅读源代码Ex3_3.asm;
3. 编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中;
4. 单击运行;
5. 选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。应能看到z=x+y和f=d+e的结果。
注意查看0X0060--0X0065单元中计算值显示的十六进制结果。
6. 停止程序的运行(单击);
7. 尝试改变对变量x, y, d和e的初始赋值,重复上述过程,验证程序运行结果。
五、思考题
1. 学习其它并行指令,理解其工作原理。
§3.4 [实验3.4] 小数运算
一、实验目的
1. 掌握TMS320C54x中小数的表示和处理方法;
2. 掌握用汇编语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2. DSP实验箱的TMS320C5416主控板;
3. DSP硬件仿真器。
三、实验原理
两个16位整数相乘,乘积总是“向左增长”,这意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将32位乘积保存到数据存储器,就要开销2个机器周期以及2个字的程序和RAM单元;并且,由于乘法器都是16位相乘,因此很难在后续的递推运算中,将32位乘积作为乘法器的输入。然而,小数相乘,乘积总是“向右增长”,这就使得超出定点器件数据范围的是我们不太感兴趣的部分。在小数乘法下,既可以存储32位乘积,也可以存储高16位乘积,这就允许用较少的资源保存结果,也便于用于递推运算中。这就是为什么定点DSP芯片都采用小数乘法的原因。
小数的表示方法:
TMS320C54x采用2的补码表示小数,其最高位为符号位,数值范围为 (–1~1)。一个十进制小数(绝对值)乘以32768后,再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的2的补码表示,例如:0.5乘以32768得16384,再转换成十六进制就得到4000H,这就是0.5的补码表示形式。在汇编语言程序中,由于不能直接写入十进制小数,因此如果要定义一个小数0.707,则应该写成word 32768*707/1000,而不能写成32768*0.707。
在进行小数乘法时,应事先设置状态寄存器ST1中的FRCT位(小数方式位)为“1”,这样,在乘法器将结果传送至累加器时就能自动地左移1位,从而自动消除两个带符号数相乘时产生的冗余符号位。使用的语句是
SSBX FRCT
在本实验中,要求编写程序完成 的计算,其中的数据均为小数: a1=0.1 a2=0.2 a3=–0.3 a4=0.2
x1=0.8 x2=0.6 x3=–0.4 x4=–0.2
注意源代码中小数的表示。
四、实验步骤
1. 在CCS环境中打开本实验的工程(Ex3_4.pjt),阅读源代码Ex3_4.asm;
2. 编译并重建 .out 输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中;
3. 单击运行;
4. 选择“View”->“memory”,起始地址设为“0x0060”,观察内存数值的变化。
注意查看0X0060--0X0068单元中计算值显示的十六进制结果。其中计算结果为y=0.24=1EB7H;
5. 停止程序的运行(单击);
6. 尝试改变变量的赋值,重复上述过程,验证程序运行结果。
五、思考题
a) 以 为例分析两个带符号数相乘时的冗余符号位是如何产生的,理解为什么要设定FRCT(小数)位。
(注解: 冗余符号位是两个代符号数相乘时存储器自动留出符号位的空间因此而产生;设置FRCT是为了减去多出来的一个符号位.)
§3.5 [实验3.5] 长字运算
一、实验目的
1. 掌握TMS320C54x中的长字指令;
2. 掌握用汇编语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2. DSP实验箱的TMS320C5416主控板;
3. DSP硬件仿真器。
三、实验原理
TMS320C54x可以利用32位的长操作数进行长字运算。长字指令如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论