当前位置:首页 > DSP实验报告2(精)
.def _exp2b_2 .ref _Xi .text
_exp2b_2
; Direct addressing
btstclr #14,*(ST1),TC1 ; Turn off CPL bits for direct addressing mode bclr C54CM
amov #_Xi,XDP ; Load direct addressing data-page pointer .dp _Xi
mov #9,@_Xi ; Direct addressing mode
mov #3,@_Xi+1 ; Initialize Xi[8]={9,3,2,0,1,9,7,1} mov #2,@_Xi+2 mov #0,@_Xi+3 mov #1,@_Xi+4 mov #9,@_Xi+5 mov #7,@_Xi+6 mov #1,@_Xi+7 xcc continue,TC1
bset CPL ; Turn CPL bit back on continue ret .end
④ 编辑如下汇编程序exp2b_3.asm,采用间接寻址实现Ai 和X 的点乘。并保存到c:\\ti\\myprojects\\xxx\\Experiment2\\目录。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * exp2b_3: Indirect Addressing Mode
* * * * * * * * * * * * * * * * * * * * * * * * * * * .def _exp2b_3 .text
_exp2b_3
; Indirect addressing mpym *AR0+,*AR1+,AC0 add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0
mpym *AR0+,*AR1+,AC1
add AC1,AC0
mpym *AR0+,*AR1+,AC1 add AC1,AC0 mov AC0,T0 ret .end
⑤ 编辑如下汇编程序exp2b_4.asm,采用间接寻址,使用并行指令和重复指令提高代码的效率, 减少代码长度。并保存到c:\\ti\\myprojects\\xxx\\Experiment2\\目录。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * exp2b_4: Paralle Processing
* * * * * * * * * * * * * * * * * * * * * * * * * * * .def _exp2b_4 .text
_exp2b_4
; Indirect addressing with paralle processing mpym *AR0+,*AR1+,AC0 || rpt #6
macm *AR0+,*AR1+,AC0 mov AC0,T0 ret .end
⑥ 在c:\\ti\\myprojects\\xxx\\Experiment2\\目录下建立工程exp2b,将link.cmd、exp2b.c、exp2b_1.asm、exp2b_2.asm、exp2b_3.asm 和exp2b_4.asm 加入工程,编译、连接工程,并下载exp2b.out。
⑦ 在memory watch 窗口观察Ai 和Xi 的初始化值,在CPU 寄存器窗口观察点乘的计算过程。
⑧ 对exp2b_3.asm 和exp2b_4.asm 的性能进行分析。
五、 实验报告
1、简述C 和汇编混合编程中的参数是如何传递的。
① C 和汇编混合编程中有 C程序变量与汇编程序变量的共用问题。为了使程序更易于接口和维护,可以在汇编程序中引用与C程序共享的变量:
.ref_to_dce_num,_to-dte_num,_to_dce_buff,_to_dte_buff 在汇编程序中引用而在C程序可直接定义的变量:
unsigned char to_dte_buff[BUFF_SIZE]; //DSP发向PC机的数据 int to_dte_num; //缓冲区中存放的有效字节数
int to_dte_store; //缓冲区的存放指针
int to_dte_read; //缓冲区的读取指针
这样经过链接就可以完成对应。
② C 和汇编混合编程中有程序入口问题。在C程序中,程序的入口是main()函数。而在汇编程序中其入口由*.cmd文件中的命令决定,如:-e main_start;程序入口地址为 main _start。这样,混合汇编出来的程序得不到正确结果。因为C到ASM的汇编有默认的入口c-int00,从这开始的一段程序为C程序的运行做准备工作。这些工作包括初始化变量、设置栈指针等,相当于系统壳不能跨越。这时可在*.cmd文件中去掉语句:-e main_start。如仍想执行某些汇编程序,可以C函数的形式执行,如:
main_start(); //其中含有其他汇编程序
但前提是在汇编程序中把_main_start作为首地址,程序以rete结尾(作为可调用的函数)的程序段,并在汇编程序中引用_main_start,即.ref _main_start。
2、对本次实验作出小结。
实验2中,建立了两个工程;并用汇编语言编程实现了一个可被C 程序调用的例程。通
过实验,粗略了解了DSP 的寻址方式以及DSP 的汇编语言与C 语言的混合编程。
共分享92篇相关文档