DSP汇编编程入门

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*************************** * 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
mov #1,@_Xi+7
xcc continue,TC1
bset CPL
源自文库
; Turn CPL bit back on
continue
ret
.end
(4) 编辑如下汇编程序 exp2b_3.asm,采用间接寻址实现 Ai 和 X 的点乘。并
保存到 c:\ti\myprojects\xxx\Experiment2\目录。
.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
.cio: {} > SARAM
.data: {} > SARAM
.bss: {} > SARAM
.const: {} > SARAM
.gblinit: {} > SARAM
frt: {} > SARAM
.pinit: {} > SARAM
.sysinit: {} > SARAM
.far: {} > SARAM
*************************** * exp2b_4: Paralle Processing ***************************
.def _exp2b_4 .text _exp2b_4 ; Indirect addressing with paralle processing
link.cmd
并保存到
c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
-c
-stack
0x800
-sysstack 0x200
-m link.map
MEMORY { DARAM: SARAM: VECT: SDRAM: Flash: CPLD:
}
origin = 0x200, origin = 0x10000, origin = 0x100, origin = 0x80000, origin = 0x400000, origin = 0x800000,
(7) 在 memory watch 窗口观察 Ai 和 Xi 的初始化值,在 CPU 寄存器窗口观察 点乘的计算过程。
(8) 对 exp2b_3.asm 和 exp2b_4.asm 的性能进行分析。 五、 实验报告
1、简述 C 和汇编混合编程中的参数是如何传递的。 2、若将 exp2a 中的 s 定义放入 main( )函数中,应到哪个位置观看其内容?
/* 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 */ }
.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
c:\ti\myprojects\xxx\Experiment2\目录下。 (2) 编 辑 如 下 C 文 件 , 取 名 exp2a.c 并 保 存 到
c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
/* Assembly routine */ extern int sum(int *);
和 x 的内容,并记录 s 的值。 (8) 重新单步执行 C 代码和汇编代码,观察 C 编译器产生的汇编代码
exp2a.asm,注意汇编程序的返回值是如何被传递到 C 调用程序的。 2、寻址方式实验。 (1) 编 辑 如 下 C 文 件 , 取 名 为 exp2b.c , 并 保 存 到
c:\ti\myprojects\xxx\Experiment2\目录。
.switch: {} > SARAM
.MEM$obj: {} > SARAM
.sysheap: {} > SARAM
} (5) 选择 Project-Options-Linker-Library 标签,添加实时支持库 rts55.lib。 (6) 编译并链接工程,下载 exp2a.out,并选择 Go-Main 命令。 (7) 观察并记录 CPU 寄存器窗口中 AC0、AR0、T0 的值,观察 memory 中 s
/* --------------------------------------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];
mpym *AR0+,*AR1+,AC1 add AC1,AC0 mpym *AR0+,*AR1+,AC1 add AC1,AC0
mov AC0,T0 ret .end
(5) 编辑如下汇编程序 exp2b_4.asm,采用间接寻址,使用并行指令和重复指 令提高代码的效率,减少代码长度。并保存到 c:\ti\myprojects\xxx\Experiment2\目录。
Ai[8]={1,2,3,4,5,6,7,8}。并保存到 c:\ti\myprojects\xxx\Experiment2\
目录。
*************************** * exp2b_1: Absolute Addressing Mode ***************************
len = 0xfe00 len = 0x30000 len = 0x100 len = 0x380000 len = 0x3e0000 len = 0x20000
SECTIONS {
.vectors: {} > VECT .cinit: {} > SARAM .text: {} > SARAM .stack: {} > SARAM .sysstack {} > SARAM .sysmem: {} > SARAM
实验二 DSP 汇编语言编程基础
一、 实验目的 1、了解 DSP 的寻址方式; 2、了解 DSP 的汇编语言与 C 语言混合编程。 二、 实验器材 1、安装有 CCS 的 PC 机一台; 三、 实验内容 1、建立一个工程; 2、用汇编语言编程实现一个可被 C 程序调用的例程。 四、 实验步骤 1、汇编语言和 C 语言混合编程: (1) 运 行 CCS , 建 立 一 个 工 程 , 取 名 exp2a , 并 保 存 到
mpym *AR0+,*AR1+,AC0 || rpt #6
macm *AR0+,*AR1+,AC0
mov AC0,T0 ret .end
(6) 在 c:\ti\myprojects\xxx\Experiment2\目录下建立工程 exp2b,将 link.cmd、 exp2b.c、exp2b_1.asm、exp2b_2.asm、exp2b_3.asm 和 exp2b_4.asm 加入工 程,编译、连接工程,并下载 exp2b.out。
.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
为什么? 3、 对本次实验作出小结。
int result1,result2; void main() {
exp2b_1(); exp2b_2(); result1 = exp2b_3(Ai, Xi); result2 = exp2b_4(Ai, Xi); }
(2) 编辑如下汇编程序 exp2b_1.asm,采用绝对寻址对数组 Ai 进行初始化,
(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
_sum
mov *AR0+,AC0 ; AC0 = x[1]
add *AR0+,AC0 ; AC0 = x[1]+x[2]
mov AC0,T0
ret
; Return T0
.end
(4) 编 辑 如 下 链 接 命 令 文 件 , 取 名
(3) 编辑如下汇编程序 exp2b_2.asm,采用间接寻址对数组 X 进行初始化,
Ai[8]={9,3,2,0,1,9,7,1}。并保存到 c:\ti\myprojects\xxx\Experiment2\
目录。
*************************** * exp2b_2: Direct Addressing Mode ***************************
相关文档
最新文档