TMSCDSP指令详解.pptVIP

  • 56
  • 0
  • 约1.98万字
  • 约 61页
  • 2018-03-27 发布于江苏
  • 举报
TMSCDSP指令详解

* 在求多个同字长数的累加和时,如果存放结果的字长增加N位,可以保证2^N-1次累加运算不溢出。如上例,源操作数字长32位,用40位字长存放累加结果,有8个保护位,可以确保255次32位字的累加运算无溢出。这个估计是比较保守的,只有在所有源操作数符号相同,且绝对值都较大时,才会达到限度。如果2个源操作数有不同符号,或绝对值都较小时,可以保证更多次累加运算不产生溢出。 一般而言,用与源操作数相同字长的数据类型来保存累加和是非常危险的。通常的选择是在计算过程(循环)内用较长的数据类型保存和数,最后根据具体情况选取适当字长。总之,应根据源操作数及运算次数,慎重选择数据类型和运算方法,防止溢出。 * 整数乘法的两个源操作数都是16位字长,目的操作数为32位寄存器。根据源操作数为有/无符号数以及源操作数是寄存器的低/高半字,可以组合出16种不同的乘法指令。除了2个无符号源操作数相乘外,只要有1个源操作数是有符号数,其结果就认定是有符号数。由于目的操作数为32位,乘法指令不存在溢出问题。 * C6000还提供了ABS(取绝对值)、ADDK(与16位有符号常数相加)、SAT(将40位长型有符号数转换为32位有符号数)等算术运算指令 * C6000还提供了ABS(取绝对值)、ADDK(与16位有符号常数相加)、SAT(将40位长型有符号数转换为32位有符号数)等算术运算指令 * * 本例中如果用不带左移的乘法指令MPY,则A3寄存器的内容应是0xFFF9C0A3。采用带左移的乘法指令,结果是0xFFF38146。假定2个源操作数都是Q15格式数,SMPY乘法结果是Q31格式数。取A3的高半字就是结果的Q15格式近似值,截断的结果是0xFFF3,舍入的结果是0xFFF4。 * * 这4种转移指令只是目标地址不同,其执行过程相同。对用标号label表示目标地址的转移指令,在汇编阶段,汇编器(Assembler)将计算从当前指令执行包到标号地址的相对值,并将它填入指令代码。用寄存器表示目标地址的转移指令,其指定的通用寄存器的内容就是目标的绝对地址。第3、第4这2种转移指令与第2种相似,只是它们是从指定的中断寄存器取目标地址,适用于从中断返回的情况。 转移指令有5个指令周期的延迟间隙,即在转移指令进入流水线后,要再等5个周期才发生跳转。所以,转移指令后的5个指令包都进入CPU流水线,并相继执行。在阅读或人工编写汇编指令时,应特别注意。 * * * LMBD指令的汇编格式为: LMBD (.unit) src1, src2, dst 其功能是寻找src2中与src1最低位(LSB)相同的最高位位置,并将其值(从左计起)返回送入dst。 NORM指令用来检测源操作数中有多少个冗余的符号位。 * * 指令执行过程会占用一定的资源,并行执行的指令所需资源不能冲突。如在同一个指令周期,不能有2条指令对同一寄存器执行写操作。指令间资源的冲突,不公要考虑同一个执行包内指令间的冲突,还要考虑前后指令间可能的冲突。这是因为C6000采用流水线结构,某些指令执行需要多个指令周期,前后指令间潜在的冲突有可能发生。这可与流水线的内容联系起来理解。本节内容对C62x完全适用,对C67x、C64x也大都适用。 * * * * * * 指令类型:周期指令 延迟时隙:0 例如:CLR .S1 A1,4,19,A2 指令前 指令后一个周期 A1 07A4 3F2Ah 07A4 3F2Ah A2 XXXX XXXXh 07A0 000Ah 例如:CLR .S2 B1,B3,B2 指令前 指令后一个周期 B1 03B6 E7D5h 03B6 E7D5h B2 XXXX XXXXh 03B0 0001h B3 0000 0052h 0000 0052h (6)CMPEQ 整型相等比较 语法:CMPEQ (.unit) src1,src2,dst .unit = .L1 或 .L2 描述:该指令比较src1与src2。如果src1和src2相等,则在dst写入1,否则写入0。 if (cond) { if (src1 == src2) 1 ?dst else 0 ?dst } else nop 例如:CMPEQ .L1X A1,B1,A2 指令前 指令后一个周期 A1 0000 4B8h(1208) 0000 4B8h A2 XXXX XXXXh 0000 0000h(false) B1 0000 4B7h(1207) 0000 4B

文档评论(0)

1亿VIP精品文档

相关文档