当前位置:首页 > DSP实验报告2(精)
实验报告2 —— DSP汇编语言编程基础
一. 实验目的 1、了解DSP 的寻址方式;
2、了解DSP 的汇编语言与C 语言混合编程。 二、 实验器材
1、安装有CCS 的PC 机一台; 三、 实验内容
1、建立一个工程;
2、用汇编语言编程实现一个可被C 程序调用的例程。 四、 实验步骤
1、汇编语言和C 语言混合编程:
① 运行CCS , 建立一个工程, 取名exp2a , 并保存到c:\\ti\\myprojects\\xxx\\Experiment2 \\目录下。
② 编辑如下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 */ }
③ 编辑如下汇编文件, 取名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 _sum
mov *AR0+,AC0 ; AC0 = x[1]
add *AR0+,AC0 ; AC0 = x[1]+x[2] mov AC0,T0 ret ; Return T0 .end
④ 编辑如下链接命令文件, 取名link.cmd 并保存到c:\\ti\\myprojects\\xxx\\Experiment2 \\exp2a\\目录。
-c
-stack 0x800 -sysstack 0x200 -m link.map MEMORY {
DARAM: origin = 0x200, len = 0xfe00 SARAM: origin = 0x10000, len = 0x30000 VECT: origin = 0x100, len = 0x100
SDRAM: origin = 0x80000, len = 0x380000 Flash: origin = 0x400000, len = 0x3e0000 CPLD: origin = 0x800000, len = 0x20000 }
SECTIONS {
.vectors: {} > VECT .cinit: {} > SARAM .text: {} > SARAM .stack: {} > SARAM .sysstack {} > SARAM .sysmem: {} > SARAM .cio: {} > SARAM .data: {} > SARAM .bss: {} > SARAM .const: {} > SARAM .gblinit: {} > SARAM frt: {} > SARAM .pinit: {} > SARAM .sysinit: {} > SARAM .far: {} > SARAM .switch: {} > SARAM .MEM$obj: {} > SARAM .sysheap: {} > SARAM }
⑤ 选择Project-Options-Linker-Library 标签,添加实时支持库rts55.lib。 经文件查找,得到多条rts55.lib路径,选其一。 \
⑥ 编译并链接工程,下载exp2a.out,并选择Go-Main 命令。
在File菜单里选择Load Program,在Debug文件夹中选择exp2a.out文件,打开。CCS把程序加载到目标系统DSP上,并打开Disassemble窗口,该窗口显示反汇编指令。 选择Debug Go-Main,程序将从Main函数开始执行。
⑦ 观察并记录CPU 寄存器窗口中AC0、AR0、T0 的值,观察memory 中s和x 的内容,并记录s 的值。
AC0=0000008624;AR0=0085DA;T0=0000
⑧ 重新单步执行C 代码和汇编代码,观察C 编译器产生的汇编代码exp2a.asm,注意汇编程序的返回值是如何被传递到C 调用程序的。
2、寻址方式实验。
① 编辑如下C 文件, 取名为exp2b.c , 并保存到c:\\ti\\myprojects\\xxx\\Experiment2\\目录。
/* --------------------------------------- exp2b.c
Interfacing C with Assembly Langugage and using Different Addressing Modes ------------------------------------------*/ extern void exp2b_1(void); extern void exp2b_2(void);
extern int exp2b_3(int *, int *); extern int exp2b_4(int *, int *); int Ai[8]; int Xi[8];
int result1,result2; void main() {
exp2b_1(); exp2b_2();
result1 = exp2b_3(Ai, Xi); result2 = exp2b_4(Ai, Xi); }
② 编辑如下汇编程序exp2b_1.asm,采用绝对寻址对数组Ai 进行初始化,Ai[8]={1,2,3,4,5,6,7,8}。并保存到c:\\ti\\myprojects\\xxx\\Experiment2\\目录。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * exp2b_1: Absolute Addressing Mode
* * * * * * * * * * * * * * * * * * * * * * * * * * * .def _exp2b_1 .ref _Ai .text
_exp2b_1
; (1) Absolute addressing
mov #1,*(_Ai) ; Absolute addressing mode
mov #2,*(_Ai+1) ; Initialize Ai[8]={1,2,3,4,5,6,7,8} mov #3,*(_Ai+2) mov #4,*(_Ai+3) mov #5,*(_Ai+4) mov #6,*(_Ai+5) mov #7,*(_Ai+6) mov #8,*(_Ai+7) ret .end
③ 编辑如下汇编程序exp2b_2.asm,采用间接寻址对数组X 进行初始化,Ai[8]={9,3,2,0,1,9,7,1}。并保存到c:\\ti\\myprojects\\xxx\\Experiment2\\目录。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * exp2b_2: Direct Addressing Mode
* * * * * * * * * * * * * * * * * * * * * * * * * * *
共分享92篇相关文档