资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,DSP,技术与应用,线性汇编语言简介,1,线性汇编语言简介,汇编代码结构,线性汇编语言简介,2,汇编代码结构,Label: parallel bars condition instruction unit operands;comments,(1)Label,标号,标号用来定义一行代码或一个变量,它代表一条指令或数据的存储地址,标号后面的冒号是可选的。,a,标号的第,1,个字符必须是字母或下划线”,_”,跟一个字母,;,b,标号的第,1,个字符必须在文件的第,1,列;,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,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 instruction 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,注释,;注释可以再任何一列开始,* 注释必须在第一列开始,7,线性汇编语言简介,线性汇编语句的基本结构,线性汇编中的伪指令,线性汇编资源安排,C,代码转换为线性汇编,8,线性汇编语句的基本结构,基本格式与汇编语言相同,必须是,ASCII,码文件,扩展名必须是”,.sa”,,用作汇编优化器的输入文件,Label: | register mnemonic unit specifier operand list ;commend,9,线性汇编中的伪指令,1,、调用一个函数,.call,ret_reg=func_name(arg1,arg2)(,仅在过程,procedure),内有效,2,、定义一个可被汇编优化器优化,而且可被,C/C+,当做函数调用的线性汇编代码段的伪指令。,label,.cproc,vari1,vari2,起始,.endproc,结束,3,、定义一个可被汇编优化器优化的线性汇编代码段的伪指令。,label,.proc,vari1,vari2,起始,.endproc,结束,10,线性汇编中的伪指令,4,、表明存储器地址相关与不相关的伪指令,.mdep,symbol1,symbol2 1,2,相关,.no_mdep,其后定义的函数段内存储器地址不相关,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, short *n, short count),short i ;,short product ;,short sum = 0 ;,for(i=0;i 1 ;,for(i=0;icount;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) ;,20,.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,21,
展开阅读全文