C语言与ASM以及线性汇编初步.ppt

上传人:牧羊曲112 文档编号:5426220 上传时间:2023-07-05 格式:PPT 页数:90 大小:2.49MB
返回 下载 相关 举报
C语言与ASM以及线性汇编初步.ppt_第1页
第1页 / 共90页
C语言与ASM以及线性汇编初步.ppt_第2页
第2页 / 共90页
C语言与ASM以及线性汇编初步.ppt_第3页
第3页 / 共90页
C语言与ASM以及线性汇编初步.ppt_第4页
第4页 / 共90页
C语言与ASM以及线性汇编初步.ppt_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《C语言与ASM以及线性汇编初步.ppt》由会员分享,可在线阅读,更多相关《C语言与ASM以及线性汇编初步.ppt(90页珍藏版)》请在三一办公上搜索。

1、C语言与ASM以及线性汇编初步,牛金海等,主要内容,C语言、ASAM和线性汇编三种编程工具的比较指令集概述C语言编程初步和实验-学习开发工具的使用,C代码性能的优化的使用(变量声明两种变量访问方式;C优化器选项;Intrinsics;字访问)ASAM汇编语言初步和实验学习用汇编语言编写简单程序线性汇编编写C可调用的汇编程序,三种开发工具的比较-C、ASM、线性汇编,三种开发工具的比较,TI的DSP软件设计可采用有C/C+语言(.c)、汇编语言(.asm)和线性汇编(C语言和汇编语言的混合编程,.)。用语言开发应用程序优缺点:优点:易于开发和维护,用C语言书写接近自然语言,可读性强、利于理解;可

2、移植性强;不容易发生流水线冲突;有大量现存算法可用;适用于的执行效率相对较低,不能满足实时性的要求。线性汇人机界面的开发。缺点:代码量大;程序效率较低;优化代码存在一定困难。一般用C语言设计应用程序的总体框架、解决人机接口和对速度效率要求不太高的复杂算法。编可把两者优点有效结合起来,设计出性价比最好、开发周期较短、比较复杂的系统,已是在C62XX上最流行的编程方法。,用汇编语言开发应用程序的优缺点:优点:更能发挥系统特点,汇编语言设计出的程序更贴近硬件特性,往往能将硬件效能发挥到极致;代码精练、不易产生冗余、效率高;代码量小。缺点:可读性差,不利于复杂算法的开发和实现;可移植性差;容易产生流水

3、线冲突;复杂性高、开发周期长。,三种开发工具的比较,三种开发工具的比较,C 语言程序在执行时,先要调用 C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序 main()运行,而汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”;由于 CCS 的代码链接器默认支持 C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。,什么是线性汇编?线性汇编类似于汇编代码,不同的是线性汇编代 码中不需要给出汇编代码必须指出的所有信息,线性汇编代码对这些信息可以进行一些选择,或 者由汇编优化器确定。下面是不

4、需要给出的信息:使用的寄存器 指令的并行与否 指令的延时周期 指令使用的功能单元,三种开发工具的比较,何时使用线形汇编?1.当程序中需要操作与硬件密切相关的设备,而用C语言较难实现时;2.当需要绕开C编译器的规定,进行特殊操作时。如:C语言规定程序不能访问代码区,当需要进行类似访问时可用限制较小的汇编语言程序设计;3.当需要提高模块的效率(包括空间上和时间上),而C语言程序无法达到要求时。,三种开发工具的比较,1)点积的C语言代码,三种开发工具的比较,2)ASM语言代码,三种开发工具的比较,3)非并行的ASAM代码 4)并行的ASAM代码,三种开发工具的比较,非并行和并行ASAM代码性能比较5

5、)线性汇编代码,三种开发工具的比较,完整的线性汇编代码,三种开发工具的比较,C代码 代码效率低使用Intrinsics的C代码嵌入汇编 容易破坏C环境汇编代码 编程工作量大,三种开发工具的比较,y=a*b,y=_mpy(a,b),asm(“MPY A0,A1,A2”),MPY A0,A1,A2,;a,b,y,开发工具 效率 编程工作量,三种开发工具的比较,软件工具流程,三种开发工具的比较,硬件工具流程,三种开发工具的比较,仅软件,含DSPPCI卡,ISA卡无DSP,指令集概述,指令集概述,操作码映射(.L/.M),指定条件寄存器,是否等于零的测试,源2使用交叉通路,指令域,目的寄存器为A组或B

6、组,并行执行,操作码映射(.D),指令集概述,基址寻址寄存器,寄存器偏移量/5位无符号常量,寻址模式,LDDW位,选择D1或D2,load/store指令域,操作码映射(NOP),指令集概述,并行操作取指包的基本格式取指包:八条32bit指令;执行包:并行执行的所有指令。执行包中的每一条指令使用的功能单元必须各不相同;每条指令的并行执行位(p位)控制本条指令是否与取指包中的其他指令并行执行:p=1 与下条指令并行;p=0 下条指令在当前指令的下个周期执行。,指令集概述,例子:取指包的部分并行p位模式,指令集概述,条件操作,指令集概述,z=1,进行零测试z=0,进行非零测试creg=0,z=0,

7、意味着指令将无条件地执行。,C62xx指令集(根据操作类型分类),指令集概述,C62xx指令集(根据功能单元分类),指令集概述,C62xx指令集(根据执行周期分类),指令集概述,C语言编程初步,建议的程序开发流程,C语言编程初步,C程序,C程序优化,用线性汇编改写关键代码段,C语言编程初步,C的代码产生工具,编译命令,C语言编程初步,编译器选项CL6x-g file1.c file2.asm file.sa file3-s-as-z C程序直接调用汇编器 标准汇编直接调用汇编器 线性汇编调用汇编优化器 无扩展名默认为C文件,-gks,建工程时可直接调用在CCS中进行编译、汇编和链接工具,也可在

8、CCS外用DOS Shell程序直接调用:C16x options files,常用的编译选项,C语言编程初步,连接器选项,C语言编程初步,CL6x-g-s file.c-z link.cmd-o file.out-l rts6201.lib 运行支持库 连接器命令文件-z调用连接器 输出文件名,链接器可用下面语句调用:,C62xx C 数据类型,C语言编程初步,注意:在32位计算机上C语言的long代表Size是32bits,变量声明 对局部变量的访问 在堆栈内分配存储空间;用堆栈首地址作首基地址,用指针*+B15(disp)来访问;堆栈分配在默认段.stack。,C语言编程初步,变量声明全

9、局变量/静态变量两种访问形式,C语言编程初步,1.默认的访问方式Near变量,int n;main().n+=.,2.Far变量,far int n;main().n+=.,编译后的汇编输出和访问方式,编译后的汇编输出和访问方式,.bss _n,4,4ldw.d1*+DP(_n),A0,_n.usect.far,2,2mvk_n,A1mvkh_n,A1ldw.d1*+A1,A0,在.bss内分配地址一条指令访问,在.far内分配地址三条指令访问,变量声明Near变量的生成和使用,C语言编程初步,C语言,汇编语言,LDW.D2*+B15(12),Reg,相对偏移地址,变量声明Near/Far变量

10、-例子,C语言编程初步,声明,C变量名加下划线,编译输出,变量声明总结 局部变量在堆栈段.stack分配地址,用一条指令访问。采用near形式声明全局变量,变量分配在数据段.bss,用一条指令访问。采用far形式声明全局变量,变量分配在数据段.far或 用户自定义数据段,用三条指令访问,应尽量避免采用,C语言编程初步,C优化器经过C优化器的优化,以及其它C语言优化后,C代码效率可达7080用优化选项启动,C语言编程初步,优化器选项,有软件流水功能,C优化器与优化有关的其它编译选项 建议使用-pm与-o3合用,进行程序级优化-mt程序中没有数据aliasing-x2函数内联 不要使用-ml大模式

11、(使得.bss段内的变量都按far方式访问)-g符号调试-s,-ss,-osC编译器生成的汇编文件内,C语句作为注释出现,C语言编程初步,Aliasing两个指针指向同一个变量,或一个指针修改后指向另外一个变量,C优化器使用步骤-建议 1.不带优化选项进行编译(功能验证)cl6x-g-s file.c-z 2.用优化选项-o2进行编译(-o2是与符号调试兼容的最高优化级别)cl6x-g-o file.c-z 3.用最高级别优化选项进行编译cl6x-o3-pm file.c-z,C语言编程初步,以上每个步骤都需要进行功能验证,注意,C优化器 3.Intrinsics 它是直接与C62xx汇编指令

12、相对应的特殊内联函数,没有函数调用开支。常见的Intrinsics列表如下:,C语言编程初步,对应汇编指令.trip,加法、减法、乘法位域操作、long转换为int,Intrinsics的特点 函数参数使用C变量名(不是寄存器),与C环境兼容;不增加C的编程工作 量;代码效率与汇编相同。,C优化器 4.字访问 字访问优化方法:,C语言编程初步,1)利用32位字访问16位数据(三种方法)联合Union强制类型转换把数据直接定义为32位字2).利用Intrinsics完成数值运算(_mpy,_mpyh,_add2,_sub2,C优化器 4.字访问-联合Union,C语言编程初步,必须按照word数

13、据定界,C优化器 4.字访问-强制类型转换,C语言编程初步,C优化器 4.字访问-把数据直接定义为32位字,C语言编程初步,C优化器 4.字访问-小结,C语言编程初步,用union方式需要对调用函数和被调用函数进行 修改 用强制类型转换,只需要修改被调用函数 直接定义为32字,影响程序可读性,实验,实验内容:两个数组点积运算实验目的:掌握编译过程、C优化器的使用熟悉Simulator开发环境学习程序性能测试方法,实验:两个数组点积运算,代码开发流程,运算的两个基本指令,实验:两个数组点积运算,相加(.L单元),寄存器组A,实验:两个数组点积运算,寄存器取代变量,实验:两个数组点积运算,实验:两

14、个数组点积运算,建立循环1.添加跳转指令和循环标号,建立循环2.设定一个循环计数器,实验:两个数组点积运算,建立循环3.添加递减循环计数指令,实验:两个数组点积运算,建立循环4.给出基于循环计数值的跳转条件所有指令都是根据下面条件寄存器的值为0或非0条件地执行:A1、A2、B0、B1、B2。代码语法 指令执行条件A2 A2 0!A2 A2=0,实验:两个数组点积运算,实验:两个数组点积运算,设将数值读入寄存器,如何读取a和x?1.a、x和Y在存储器中2.建变量指针3.load/store中使用指针,读取/存入(.D单元),实验:两个数组点积运算,读取指针1.地址是常数,因此使用指令MVK:2.

15、MVK指令所移的位数:16 bit3.表示一个完整地址的位数:32 bit4.一个地址读入寄存器必须使用两条指令,例如:,实验:两个数组点积运算,关于指针第1次循环后,A4为:第2次循环如何访问a(1)和x(1),实验:两个数组点积运算,递增指针,实验:两个数组点积运算,另一套功能单元和寄存器,实验:两个数组点积运算,代码复习,只使用A侧,实验:两个数组点积运算,汇编语言初步,汇编语言初步,学习内容汇编代码的结构汇编程序的构成编写简单算法:y=mx+bC:CCStudio_v3.3docsPDFspru187n.pdf 第8.4节,讲了混合编程的调用关系例子,汇编代码的构成,汇编语言初步,la

16、bel:|cond instruction.unit operand;comment,标号:代码或变量地址,条件寄存器,指令:助记符(mnemonic)伪指令(directive),功能单元(可选),操作数:寄存器 常量 指针,注释,x.int 10 MPY.M1 A1,A3,A7|ADD.L1x A2,B2,A5,注意:在输入汇编程序时,除标号以外的程序行都要以一个空格或Tab制表字符开始,常用的伪指令,汇编语言初步,注意,在C语言里long是40位,在汇编语言里long是32位,汇编程序的构成-程序数据结构算法,汇编语言初步,C程序的数据结构和算法实现,数据结构,算法,汇编程序-数据结构,

17、汇编语言初步,用汇编语言声明数据结构,完整的汇编程序构成,汇编语言初步,.sect“myData”m.int5x.int10b.int2y.int0.sect“myCode”startLD.D1*A0,A1.ST.D1 A7,*A6 endB endNOP 5,用汇编语言编写y=mx+b 1.数据取入寄存器:m,x,b存储器寄存器 1a.初始化数据指针 1b.取数据 2.乘法 3.加法 4.存储数据:y寄存器存储器,汇编语言初步,用汇编语言编写y=mx+b 1a.初始化数据指针,汇编语言初步,MVK.S1m,A0MVKH.S1m,A0;&bA4,32位常量,用汇编语言编写y=mx+b指令MVK

18、,汇编语言初步,MVK把一个16位常数放入寄存器,用汇编语言编写y=mx+b 1b 取数据,汇编语言初步,LDH.D1*A0,A1;取mLDH.D1*A2,A3;取xLDH.D1*A4,A5;取bNOP4,用汇编语言编写y=mx+b用LD/ST指令三种Load指令,对应不同长度的数据 LDW取32位字(word)LDH取16位半字(short)LDB取8位字节(byte)对无符号数(字节、16位半字)LDBU LDHU指令延迟:四个延迟间隙三个存储指令 STW STH STB,数据取入寄存器后进行符号扩展,无符号扩展,汇编语言初步,用汇编语言编写y=mx+b指令延迟间隙,延迟间隙:多周期指令所

19、需要插入的NOP指令个数,汇编语言初步,用汇编语言编写y=mx+b 2.乘法,汇编语言初步,MPY.M1 A1,A3,A7NOP,汇编语言初步,用汇编语言编写y=mx+b乘法指令四种乘法指令 MPY(U/US/SU)16LSB16LSB MPYH(U/US/SU)16MSB16MSB MPYH(U/S)L(U/S)16MSB16LSB MPYL(U/S)H(U/S)16LSB16MSB指令延迟槽:1两个乘法单元可以在一个周期内做两次乘法,用汇编语言编写y=mx+b 3.加法,汇编语言初步,ADD.?应该使用哪个功能单元?,ADD.?A5,A7,A7,或,或,用汇编语言编写y=mx+b 4.加法

20、,汇编语言初步,用汇编语言编写y=mx+b完整的y=mx+b汇编程序spru189f.pdf,汇编语言初步,.title lab4.asm/*定义数据结构*/.sect myData”m.short 10 x.short 5b.short 2y.short 0/*算法*/.sect myCode/*指针初始化*/init:mvk.s1 m,A0;A0=A4=&b mvkh.s1 b,A4,mvk.s1 y,A6;A6=endless loop nop 5,线性汇编,线性汇编,在C程序中使用汇编语句 汇编指令和命令可以嵌入在C程序中,并用asm语句声明,该语句可访问硬件,而只用C语言很难直接访问

21、硬件。asm(“assembly code”)编写可被C程序调用的汇编函数 可用extern语句作为函数的外部声明,如:extern int func()1.建立C环境 2.建立汇编环境 3.编写线性汇编函数入口代码算法出口代码,编写可被C调用的线性汇编函数 1.建立C环境 1)在C程序前声明线性汇编函数 2)调用汇编函数,线性汇编,1)声明,2)调用,编写可被C调用的线性汇编函数 2.建立汇编环境 1)汇编函数的入口地址声明为全局变量,汇编函数的入口地址C函数名前加下划线;2)定义函数入口地址。,线性汇编,1)声明,2)定义,编写可被C调用的线性汇编函数 3.编写线性汇编函数,线性汇编,入口代码,出口代码,线性汇编的寄存器保护问题,线性汇编,汇编优化器自动完成,!,实验1实验2,线性汇编,实验目的:学习和掌握利用intrinsics进行字长优化;实验内容改写C语言点积函数,用强制类型转换法实现字优化。,实验目的:掌握线性汇编语言和C语言混合编程的方法;实验内容用线性汇编改写C的点积函数。,End,Thanks,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号