精华内容
下载资源
问答
  • dsp线性汇编的一个课件

    千次阅读 2013-03-07 10:19:48
    线性汇编语言简介 线性汇编语言简介 • 汇编代码结构 • 线性汇编语言简介 汇编代码结构 Label: parallel bars [condition] instruction unit operands;comments (1)Label标号 标号用来定义一行代码...

    转载的,不知道出处

    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] instruction
    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;comments
    4 instruction指令
    汇编代码指令包括伪指令和命令助记符
    A 伪指令用来在汇编语言中控制汇编过程或定义数据结构。
    所有伪指令都以圆点打头。
    如:
    .sect “name”
    .double value
    .float value
    .byte value
    B 命令助记符代表有效微处理器命令,它执行程序操作。


    汇编代码结构
    Label: parallel bars [condition] instruction
    unit operands;comments
    5 Uint 功能单元
    C6000有8个功能单元,每个功能单元有
    两种类型。功能单元以“.”开始,后面跟一
    个功能单元分类符。
    .S1 .S2 .L1 .L2 .M1 .M2 .D1 .D2
    另有交叉通道 如.L1X


    汇编代码结构
    Label: parallel bars [condition] instruction
    unit operands;comments
    6 operands操作数
    操作数由常数、符号以及常数与符号构成
    的表达式组成。
    操作数之间必须用逗号隔开。
    7 comments注释
    ;注释可以再任何一列开始
    * 注释必须在第一列开始


    线性汇编语言简介
    线性汇编语句的基本结构
    线性汇编中的伪指令
    线性汇编资源安排
    C代码转换为线性汇编


    线性汇编语句的基本结构
    • 基本格式与汇编语言相同,必须是ASCII码
    文件,扩展名必须是”.sa”,用作汇编优化
    器的输入文件
    • Label[[:]] [||] [[register]] mnemonic [unit
    specifier] [operand list] [;commend]


    线性汇编中的伪指令
    1、调用一个函数
    .call [ret_reg=]func_name(arg1,arg2)(仅在过程procedure)
    内有效
    2、定义一个可被汇编优化器优化,而且可被C/C++当做函数调
    用的线性汇编代码段的伪指令。
    label .cproc [vari1[,vari2,…]] 起始
    .endproc 结束
    3、定义一个可被汇编优化器优化的线性汇编代码段的伪指令。
    label .proc [vari1[,vari2,…]] 起始
    .endproc 结束


    线性汇编中的伪指令
    4、表明存储器地址相关与不相关的伪指令
    .mdep[symbol1],[symbol2] 1,2相关
    .no_mdep 其后定义的函数段内存储器
    地址不相关
    5、定义变量,或者说描述存入寄存器的数值变量的伪指令:
    .reg variable1[,variable2,…]
    6、过程的返回值
    .return [argument]
    7、指出循环迭代次数的伪指令
    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<count;i++)
    • {
    • product = m[i] * n[i] ;
    • sum += product ;
    • }
    • return(sum) ;
    • }


    C代码转换为线性汇编
    • 第一步:定义函数名称、实现参数传递
    short DP(short *m, short *n, short count)
    .def _DP
    _DP .cproc cptr0,cptr1,vptr
    1).def为definition的缩写
    2).cproc表示本函数是C可调用函数,其后为
    所传递的参数


    C代码转换为线性汇编
    • 第二步:暂时存放临时数据的寄存器定
    名,由.reg ( register)完成
    .reg addr_a,addr_x
    .reg m,n
    .reg product,sum

    C代码转换为线性汇编
    • 第三步,数据初始化
    MV cptr0,addr_a
    MV cptr1,addr_x
    ZERO sum
    前两句将数组a[ ]和x[ ]的首地址存入名为addr_a
    和addr_x的寄存器变量,以便其后实现对数组
    的访问;最后一句是累加寄存器清零。


    C代码转换为线性汇编
    • 第四步处理程序的循环体部分
    定义一个标号loop:作为循环返回的标志;然后
    按照原C程序语句顺序改写成汇编语句(不必指
    定指令执行的功能单元):
    product = m[i] * n[i] ;
    改写
    LDH *addr_a++,m
    LDH *addr_x++,n
    MPY m,n,product
    sum += product ;
    改写为
    ADD sum,product,sum


    C代码转换为线性汇编
    • 将循环变量vptr(即count)减一;利用C6x指
    令的条件执行功能通过对vptr是否为零的判
    断条件执行跳转指令:
    if ( vptr!=0) then B loop
    • 最后,.return实现数据的返回。
    • 一切工作完成后,使用.endproc作为函数结
    束的标志。


    C代码转换为线性汇编
    • .def _DP
    • _DP .cproc cptr0,cptr1,vptr
    • . 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
    • [vptr] B loop
    • .return sum
    • . endproc


    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<count;i++)
    • {
    • pro_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) ;
    • }



    • .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


    展开全文
  • 求助: 在DSP 线性汇编中可否调用C函数,如何调用?例子:原始C函数(经过简化)如下:short compute(const short *x, int n){int i; sum = 0;for (i=0;isum = sum + x[i]*x[i];}return sum/n; }除法函数如下;short...
     
    求助: 在DSP 线性汇编中可否调用C函数,如何调用?
    例子:
    原始C函数(经过简化)如下:

    short compute(const short *x, int n)
    {
    int i;
    sum = 0;
    for (i=0;i<n;i++) {
    sum = sum + x[i]*x[i];
    }
    return sum/n;
    }

    除法函数如下;
    short  divi_compute(int a, short b){
        return  (short) a/b;
      }
      
      
    欲将其转化为汇编函数,由于汇编中没有专门的除法指令,故想在汇编函数中调用C函数,不知道可否行通,谢谢大家指点:

    汇编函数如下:

        .sect     ".text:_compute"
        .global    _compute
    _compute      .cproc  EXC, N
              .no_mdep
              .reg  A_0, A_1, A_2, A_3, A_4, A_5, SUM, CNT_N
              
              SHR    N, 2, CNT_N
              SUB    CNT_N, 1, CNT_N
    LOOP_compute:    .trip  CNT_N
              LDDW  *EXC++,  A_1:A_0
              MPY    A_0, A_0, A_2
            ||  MPYH  A_0, A_0, A_3
            ||  MPY    A_1, A_1, A_4
            ||  MPYH  A_1, A_1, A_5
              ADD    A_2, A_3, A_0
            ||  ADD    A_4, A_5, A_1
              ADD    A_0, A_1, A_0
              ADD    SUM, A_0, SUM
          [CNT_N]  BDEC  LOOP_compute,  CNT_N  
          
            ;  注:不知道如何实现 sum/n 这个功能,望大家指点
              .return
              .endproc

    展开全文
  • 7)如何在Linux环境下编DSP的汇编或线性汇编程序?在Codec Engine安装路径下/packages/config.bld文件里var C64P = xdc.useModule(‘ti.targets.C64P’); 之后添加: C64P.extensions[“.sa”] = { suf: “.sa”...
      
    

    7)如何在Linux环境下编DSP的汇编或线性汇编程序?在Codec Engine安装路径下/packages/config.bld文件里var C64P = xdc.useModule(‘ti.targets.C64P’);
    之后添加:
    C64P.extensions[“.sa”] = {
    suf: “.sa”, typ: “asm:-fl”
    }

    C64P.extensions[“.asm”] = {
    suf: “.asm”, typ: “asm:-fa”

    展开全文
  • S3-C++、C、线性汇编及汇编语言开发概述与混合编程 C++_1 S3-C++、C、线性汇编及汇编语言开发概述与混合编程 汇编与线性汇编_1 S3-C++、C、线性汇编及汇编语言开发概述与混合编程 混合编程_1
  • dsp优化-线性汇编中调用全局变量

    千次阅读 2013-12-18 11:22:52
    ;int g_arr[10] = {0,1,2,3,4,5,6,7,8,9}; ;int g_b = 10; .global add .ref g_arr .global g_b add: .cproc cnt .reg sum,tmp,arr,b

     

    查了一天的网站和书,都说直接用.global或者.ref申明一下全局变量就可以了,可是我的一直出错。
    自己摸索了一天,调试了一天才调试成功,为了各位和我一样的小菜鸟们节省时间,贴出个简单的例子。
    顺便吐槽某些大牛。。。。

    ;int g_arr[10] = {0,1,2,3,4,5,6,7,8,9};
    ;int g_b = 10;
                    .global add
                    .ref g_arr
                    .global g_b
    add:            .cproc  cnt
                    .reg sum,tmp,arr,b


                    ZERO sum
                    MVKL g_arr,arr
                    MVKH g_arr,arr
                    MVKL g_b,b
                    MVKH g_b,b
                    LDW  *+b[0],b


    add_1oop:       LDW *arr++,tmp
                    ADD sum,tmp,sum
                    SUB cnt,1,cnt


             [cnt]  B add_1oop


                    ADD sum,b,sum
                    .return sum
                    .endproc
    g_arr和g_b是定义的全局变量。其中.ref可以更换为.global

    add函数原型为

    int  add(int k);上面的程序在ccs5.3中调试通过

    展开全文
  • CCS 中C语言程序调用线性汇编

    热门讨论 2011-10-27 00:10:26
    DSP进行优化的时候,难免会用到线性汇编,今天找了一上午关于在C中调用线性汇编的程序,发现网上资料很少,这里自己做一个记录。
  • C6000的线性汇编

    千次阅读 2008-07-20 15:34:00
    优化过程:•优化根据程序剖分结果,把占用运行时间较多的模块进行优化,优化到代码能够有效的满 足需要•三阶段:–分析和设计C代码–利用硬件平台信息优化C代码–汇编优化线性汇编与汇编不同:不需要考虑汇编的...
  • 内部包含几个基于CCS3.1的C6000求点积的工程,包含了C语言求法,汇编语言求法,线性汇编求法,并且对每个算法的效率进行了比较,对于初学者有很大的帮助!
  • )如何在Linux环境下编DSP的汇编或线性汇编程序?在Codec Engine安装路径下/packages/config.bld文件里var C64P = xdc.useModule(‘ti.targets.C64P’); 之后添加: C64P.extensions[“.sa”] = { suf: “.sa”,...
  • 本文主要介绍TI C6000系列DSP线性汇编格式,用法以及SIMD、循环、软件流水线、指令打包和寄存器、功能单元分配平衡等优化策略。 优化过程: ?优化根据程序剖分结果,把占用运行时间较多的模块进行优化,优化到...
  • 优化是一个值得讨论的话题,要最大程度利用缓存,并且合理使用线性汇编,若你有信心比编译器优化的 好,也可以尝试汇编。  有些人可能一直搞不清楚,自己的算法究竟要优化到何种程度才算完结。要用什么样的方式去...
  • 一本详细介绍TI MS320C6000系列汇编工具的书,对于C6000 DSP开发人员很好用
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 C语言和汇编语言的混合编程 C语言与汇编语言的接口 语言和汇编语言的混合编程 语言与汇编语言的接口 修改编译器的输出 可以控制C编译器使编译器产生具有交叉...
  • 汇编

    2006-04-08 13:40:00
    很久不用汇编了,很多都忘光了,现在做dsp,要用汇编或者线性汇编来优化,所以只有慢慢的拣前来,8086只能复习最基本的东西了,着重要关注的dsp的汇编。基本格式STACK SEGMENTSTACK ENDSDATA SEGMEN
  • TMS320C6000DSP优化教程

    2011-08-03 09:39:10
    C6000 系列DSP算法优化教程 包括C/C++语言的优化,CCS的使用,线性汇编
  • 工作阶段:    工作流程一般分为三个阶段。 阶段一:直接按照需要用C语言实现功能。在实际的DSP应用中,许多...将上一阶段C程序中优化效率较低的部分提出来,用线性汇编语言编写,利用汇编优化器进行优化。汇编
  • 李现路:DSP6000中C/C++语言和汇编语言的混合编程的方法 Post By:2009-11-24 0:11:48 李现路:DSP6000中C/C++语言和汇编语言的混合编程的方法 一、混合编程的方法主要有以下几种:(1)独立编写C语言程序和汇编程序...
  • 1 DSP系统的软件优化流程 DSP系统的软件优化流程如图1所示。整个工作流程分为3个阶段: ...第3阶段,将C语言代码中耗时最长的部分抽取出来,用线性汇编语言重写,用汇编优化器进行优化。使用profile确定这段代码是否需
  • DSP代码优化

    2019-07-20 15:35:49
    最近研究DSP代码优化,真是一头雾水。以前没接触过汇编,DSP代码优化需要会写线性汇编,努力看书中。 转载于:https://www.cnblogs.com/smartliu/archive/2010/04/01/1702333.html...
  • 通过 profile clock工具找出效率很低的部分,使用线形汇编继续优化。线性汇编语言是 C6000系列 DSP独有的一种编程语言,介于高级语言和低级语言之间。
  • C6000 DSP体系结构

    2009-03-14 20:25:10
    0_DSP概述.ppt 1_1 C6000的体系结构和汇编语言(1).ppt ... 7_2 C6000软件优化 线性汇编.ppt 7_3 C6000软件优化 理解反馈.ppt 7_4 C6000软件优化 例子.ppt C6000 CPU 体系结构&汇编语言小测验_错误答案解析.ppt
  • 基于DSP的软件流水优化研究,李平良,戴志涛,本文通过研究软件流水相关技术,结合TI DSP C6000系列DSP的硬件特性,探讨了DSP软件流水的相关优化方法。通过性能比较,说明这些方法具
  • 本文详缁分绍了G.723.1标准的DSP代码优化工作,重点描述了代码优化的方法和本课题的创新...基于线性汇编的优化以及Cache的有效利用使本课题的工作取得了显著成果,在没有降低音质的情况下,实现了DSP的语音实时编解码。
  • DSP学习笔记

    千次阅读 2013-05-28 14:15:52
    一、 注意ccs输出窗口,出了常用的build输出编译结果,还有其他一些很有用的,如stdout,相当于控制台 二、 汇编语言程序在执行时直接从用户指定入口开始,...三、 线性汇编学习:http://wenku.baidu.com/view/415324
  • DSP自学笔记

    千次阅读 多人点赞 2019-06-23 15:32:37
    DSP的笔记
  • TMS320C62X是美国德州仪器公司(TI)的新一代高性能定点数字信号处理器(DSP)芯片。基于DSP的软件设计问题,...为了使程序代码的执行具有尽可能高的执行效率,本文将着重点放在并行汇编代码的编程,而不是线性汇编代码的编程
  • 基于DSP优化中采用针对TI C674x系列的优化方法,如编译器优化、浮点转定点、查表法、DMA(直接内存存取)的使用以及线性汇编等。最终针对1080P的YUV格式的交通视频可以达到实时去雾处理,并且有较好的去雾效果。
  • 1.DSP初始化; 2.同步串口0(McBSP0)初始化为I2S模式; 3.同步串口1(McBSP1)初始化为SPI模式; 4.中断控制寄存器初始化; 5.McBSP0发送中断服务程序; 6.McBSP0接收中断服务程序; 7.中断向量表; 8.NANDFLASH...
  • VC-1视频编码技术研究及在DSP上的实现 计算机学科 学位论文 介绍了VC-1视频编码框架和主要功能模块及关键技术,其中对帧内编码、 帧间编码、变换与量化、上边吗、环路滤波和...代码结构改进、C语言和线性汇编级优化。
  • dsp优化

    2016-05-04 15:43:45
    在实际的DSP应用中,许多算法都是非常复杂,直接用汇编代码编写,虽然优化效率很高,可是实现的难度却很大,所以一般都采用先用C语言来实现,然后编译运行,利用C64X开发环境的profile?clock工具测试程序运行时间,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,143
精华内容 457
热门标签
关键字:

dsp线性汇编