DSP技术与应用_线性汇编语言简介



《DSP技术与应用_线性汇编语言简介》由会员分享,可在线阅读,更多相关《DSP技术与应用_线性汇编语言简介(21页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,DSP,技术与应用,——,线性汇编语言简介,1,,线性汇编语言简介,汇编代码结构,,线性汇编语言简介,2,,汇编代码结构,Label: parallel bars [condition] instruction unit operands;comments,,(1)Label,标号,,标号用来定义一行代码或一个变量,它代表一条指令或数据的存储地址,标号后面的冒号是可选的。,,a,标号的第,1,个字符必须是字母或下划线”,_”,跟一个字母,;,,b,标号的第,1,个字符必须在文件的第,1,列;
2、,,c,标号最多可包含,32,个字母字符;,,d,并行指令不能使用标号。,,(2)Parallel bars,并行符号,||,,3,,汇编代码结构,Label: parallel bars [condition] instruction unit operands;comments,,(3)[condition],条件,,A,如果指令没有指出条件,指令总被执行;,,B,如果给定条件,当条件为真,指令执行;,,C,如果给定条件,当条件为假,指令不执行。,,如,[A1] A1!=0 A1=0,,[!A1] A1=0 A1!=0,,
3、4,,汇编代码结构,Label: parallel bars [condition] instruction unit operands;comments,,4 instruction,指令,,汇编代码指令包括伪指令和命令助记符,,,A,伪指令用来在汇编语言中控制汇编过程或定义数据结构。所有伪指令都以圆点打头。,,如:,,,.sect “name”,,.double value,,.float value,,.byte value,,B,命令助记符代表有效微处理器命令,它执行程序操作。,,5,,汇编代码结构,Label: parallel bars [condition] instructio
4、n unit operands;comments,,Uint,功能单元,,,C6000,有,8,个功能单元,每个功能单元有两种类型。功能单元以“,.”,开始,后面跟一个功能单元分类符。,,,.S1 .S2 .L1 .L2 .M1 .M2 .D1 .D2,,,另有交叉通道 如,.L1X,6,,汇编代码结构,Label: parallel bars [condition] instruction unit operands;comments,,6 operands,操作数,,操作数由常数、符号以及常数与符号构成的表达式组成。,,操作数之间必须用逗号隔开。,,7 comments,注释,,;注释
5、可以再任何一列开始,,* 注释必须在第一列开始,7,,线性汇编语言简介,线性汇编语句的基本结构,,线性汇编中的伪指令,,线性汇编资源安排,,C,代码转换为线性汇编,,8,,线性汇编语句的基本结构,基本格式与汇编语言相同,必须是,ASCII,码文件,扩展名必须是”,.sa”,,用作汇编优化器的输入文件,,Label[[:]] [||] [[register]] mnemonic [unit specifier] [operand list] [;commend],9,,线性汇编中的伪指令,1,、调用一个函数,,,.call,[ret_reg=]func_name(arg1,arg2)(,仅在过
6、程,procedure),内有效,,2,、定义一个可被汇编优化器优化,而且可被,C/C++,当做函数调用的线性汇编代码段的伪指令。,,,label,.cproc,[vari1[,vari2,…]],起始,,,.endproc,,结束,,3,、定义一个可被汇编优化器优化的线性汇编代码段的伪指令。,,,label,.proc,[vari1[,vari2,…]],起始,,,.endproc,,结束,10,,线性汇编中的伪指令,4,、表明存储器地址相关与不相关的伪指令,,,.mdep,[symbol1],[symbol2] 1,2,相关,,,.no_mdep,其后定义的函数段内存储器地址不相关,
7、,5,、定义变量,或者说描述存入寄存器的数值变量的伪指令:,,,.reg,variable1[,variable2,…],,6,、过程的返回值,,,.return,[argument],,7,、指出循环迭代次数的伪指令,,,label .trip,minimum value,,11,,线性汇编资源安排,读取指令,(LDH),必须使用,.D,单元,,乘法指令,(MPY),必须使用,.M,单元,,加法指令,(ADD),必须使用,.L,单元,,减法指令,(SUB),必须使用,.S,单元,,跳转指令,(B),必须使用,.S,单元,,12,,C,代码转换为线性汇编,short DP(short *m,
8、 short *n, short count),,{,,short i ;,,short product ;,,short sum = 0 ;,,for(i=0;i 9、.def,为,definition,的缩写,,2).cproc,表示本函数是,C,可调用函数,其后为所传递的参数,14,,C,代码转换为线性汇编,第二步:暂时存放临时数据的寄存器定名,由,.reg ( register),完成,,,.reg addr_a,addr_x,,.reg m,n,,.reg product,sum,15,,C,代码转换为线性汇编,第三步,数据初始化,,,,MV cptr0,addr_a,,MV cptr1,addr_x,,ZERO sum,,,, 10、前两句将数组,a[ ],和,x[ ],的首地址存入名为,addr_a,和,addr_x,的寄存器变量,以便其后实现对数组的访问;最后一句是累加寄存器清零。,16,,C,代码转换为线性汇编,第四步处理程序的循环体部分,,定义一个标号,loop:,作为循环返回的标志;然后按照原,C,程序语句顺序改写成汇编语句,(,不必指定指令执行的功能单元,),:,,,product = m[i] * n[i] ;,,,改写,,,LDH *addr_a++,m,,LDH *addr_x++,n,,MPY m,n,product,,,sum += product 11、;,,改写为,,,ADD sum,product,sum,17,,C,代码转换为线性汇编,将循环变量,vptr(,即,count),减一;利用,C6x,指令的条件执行功能通过对,vptr,是否为零的判断条件执行跳转指令:,,,if (,vptr!=0,) then,B loop,,最后,,.return,实现数据的返回。,,一切工作完成后,使用,.endproc,作为函数结束的标志。,18,,C,代码转换为线性汇编,,.def _DP,,_DP .cproc cptr0,cptr1,vptr 12、,,.reg addr_a,addr_x,,.reg m,n,,.reg product,sum,,MV cptr0,addr_a,,MV cptr1,addr_x,,,ZERO sum,,loop:,,LDH *addr_a++,m,,LDH *addr_x++,n,,MPY m,n,product,,ADD sum,product,sum,,SUB vptr,1,vptr,,[vp 13、tr] B loop,,.return sum,,.endproc,19,,C,代码转换为线性汇编,short DP(short *m, short *n, short count),,{,,short i ;,,int pro_h, pro_l ;,,int sum_h = 0 ;,,int sum_l = 0 ;,,int sum = 0 ;,,int *data_a = ( int *) m ;,,int *data_x = ( int *) n ;,,count = count >> 1 ;,,for(i=0;i 14、o_l = _mpy( data_a[i], data_x[i]) ;,,pro_h = _mpyh( data_a[i], data_x[i]) ;,,sum_l += pro_l ;,,sum_h += pro_h ;,,},,sum = sum_l + sum_h ;,,return( sum) ;,,},20,,,.def _DP,,_DP .cproc cptr0,cptr1,vptr,,.reg addr_a,addr_x,,.reg product0,pr 15、oduct1,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,,21,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。