《DSP技术与应用线性汇编语言简介.ppt》由会员分享,可在线阅读,更多相关《DSP技术与应用线性汇编语言简介.ppt(21页珍藏版)》请在金锄头文库上搜索。
1、DSP技术与应用线性汇编语言简介线性汇编语言简介汇编代码结构线性汇编语言简介汇编代码结构Label: parallel bars condition instruction unit operands;comments(1)Label标号 标号用来定义一行代码或一个变量,它代表一条指令或数据的存储地址,标号后面的冒号是可选的。a标号的第1个字符必须是字母或下划线”_”跟一个字母;b标号的第1个字符必须在文件的第1列;c标号最多可包含32个字母字符;d并行指令不能使用标号。(2)Parallel bars 并行符号 |汇编代码结构Label: parallel bars condition in
2、struction unit operands;comments(3)condition条件A 如果指令没有指出条件,指令总被执行;B 如果给定条件,当条件为真,指令执行;C 如果给定条件,当条件为假,指令不执行。如A1 A1!=0 A1=0 !A1 A1=0 A1!=0汇编代码结构Label: parallel bars condition instruction unit operands;comments4 instruction指令 汇编代码指令包括伪指令和命令助记符 A 伪指令用来在汇编语言中控制汇编过程或定义数据结构。所有伪指令都以圆点打头。 如: .sect “name” .do
3、uble value .float value .byte valueB 命令助记符代表有效微处理器命令,它执行程序操作。汇编代码结构Label: parallel bars condition instruction unit operands;comments5Uint 功能单元C6000有8个功能单元,每个功能单元有两种类型。功能单元以“.”开始,后面跟一个功能单元分类符。 .S1 .S2 .L1 .L2 .M1 .M2 .D1 .D2 另有交叉通道 如.L1X汇编代码结构Label: parallel bars condition instruction unit operands;c
4、omments6 operands操作数操作数由常数、符号以及常数与符号构成的表达式组成。 操作数之间必须用逗号隔开。7 comments注释 ;注释可以再任何一列开始 * 注释必须在第一列开始线性汇编语言简介线性汇编语句的基本结构线性汇编中的伪指令线性汇编资源安排C代码转换为线性汇编线性汇编语句的基本结构基本格式与汇编语言相同,必须是ASCII码文件,扩展名必须是”.sa”,用作汇编优化器的输入文件Label: | register mnemonic unit specifier operand list ;commend线性汇编中的伪指令1、调用一个函数.call ret_reg=func
5、_name(arg1,arg2)(仅在过程procedure)内有效2、定义一个可被汇编优化器优化,而且可被C/C+当做函数调用的线性汇编代码段的伪指令。 label .cproc vari1,vari2, 起始 .endproc 结束3、定义一个可被汇编优化器优化的线性汇编代码段的伪指令。 label .proc vari1,vari2, 起始 .endproc 结束线性汇编中的伪指令4、表明存储器地址相关与不相关的伪指令 .mdepsymbol1,symbol2 1,2相关 .no_mdep 其后定义的函数段内存储器地址不相关5、定义变量,或者说描述存入寄存器的数值变量的伪指令:.reg
6、variable1,variable2, 6、过程的返回值 .return argument7、指出循环迭代次数的伪指令 label .trip minimum value线性汇编资源安排读取指令(LDH)必须使用.D单元乘法指令(MPY)必须使用.M单元加法指令(ADD)必须使用.L单元减法指令(SUB)必须使用.S单元跳转指令(B)必须使用.S单元C代码转换为线性汇编short DP(short *m, short *n, short count) short i ; short product ; short sum = 0 ; for(i=0;i 1 ; for(i=0;icount;
7、i+) pro_l = _mpy( data_ai, data_xi) ; pro_h = _mpyh( data_ai, data_xi) ; sum_l += pro_l ; sum_h += pro_h ; sum = sum_l + sum_h ; return( sum) ; .def _DP _DP .cproc cptr0,cptr1,vptr .reg addr_a,addr_x .reg product0,product1,sum0,sum1 .reg m,n MV cptr0,addr_a MV cptr1,addr_x ZERO sum0 ZERO sum1 SHR vptr,1,vptr loop: LDW *addr_a+,m LDW *addr_x+,n MPY m,n,product0 MPYH m,n,product1 ADD sum0,product0,sum0 ADD sum1,product1,sum1 SUB vptr,1,vptr vptr B loop ADD sum0,sum1,sum0 .return sum0 .endproc