论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
(4)编译器为所有的外部对象指定一个链接时的名字。当写汇编语言代码时,必须用与这个名字相同的名字。对于只在汇编语言模块中用到的变量的标识符,不能从下划线开始。任何一个在汇编语言中声明的对象都要使其在C/C++中是可访问的,那么在汇编语言中必须用.def 或.global将其声明为外部变量。同样在汇编语言中要引用C/C++函数或对象时,必须用.ref 或.global将C/C++对象声明,这将产生一个在汇编语言函数中没有定义的由链接器辨识的外部引用。
还有一些细节也需要注意,如中断子程序必须把该子程序将要用到的所有寄存器进行入栈处理;除了全局变量的初始化外,汇编语言的模块不得因为任何目的而使用.cinit段;汇编代码的结束需用指令B.s2 B3将程序执行从被调用函数返回到C语言调用函数中。
2 并行汇编代码的编写
C6000的汇编代码格式如下:
标号: 并行标记 熖跫寄存器犞噶钪记符 功能单元 操作数 ;注释。如:
LDW .D2 潱拢矗B2
|| 煟粒堡牐樱龋 .S2X A4,B4 ;用到了交叉数据通道
TMS320C62X片内有8个并行的处理单元,分为相同的两组。其体系结构采用超长指令字(VLIW)结构,一个指令包里的8条并行指令可同时分配到8个处理单元并行运行。这种一个指令包里有8条指令并行执行也给并行汇编代码的编写带来很多要考虑的问题熅咛迦缦拢骸
(1)TMS320C62X指令的执行可以用延迟间隙来说明。延迟间隙在数量上等于从指令的源操作数被读取到执行的结果可以被访问所用的指令周期。如对于乘法指令(MPY),源操作数从第i个周期被读取,则其计算结果在第(i+2)个周期才可用。
(2)使用相同功能单元的两条指令不能被安排为并行指令。
(3)使用同一条交叉通路的两条指令不能被安排在同一个执行指令包中,这是因为从寄存器组A~B或者从B~A都只有一条交叉通路。
煟矗牻数据读入到(或存储自)相同寄存器组的两条读(写)指令不能被安排在同一个执行包中。
煟担犆恳桓鲋葱邪里只能允许每一寄存器组处理一个长定点类型数据。
煟叮犜谝桓鲋噶钪芷谀诙酝一寄存器读取多于四次是不允许的,但条件寄存器不在此限制之列。在一个指令周期内,不能同时存在两条写入同一寄存器的指令,只有在写操作不是在同一个指令周期发生时,才可以将具有同一目的地址的两条指令安排并行。
3 基于TMS320C62X的运动补偿的混合编程设计实例
运动补偿是MPEG-4标准中的一种重要算法。运动补偿是指根据运动矢量在参考帧中找出参考块。如果运动矢量的X分量和Y分量都是整象素长度,则直接在参考帧中找出参考块。如果为半象素长度,则需要通过内插运算计算出参考块,计算出的参考块需要加上解码得出的误差块才能得到当前参考块。本文给出了运动矢量的X分量和Y分量都是整象素长度时的运动补偿方法。根据运动矢量