dsp汇编指令系统介绍(精)
- 格式:doc
- 大小:57.50 KB
- 文档页数:22
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
第六章 DSP的寻址方式和汇编指令当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。
在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。
6.1汇编语言指令集概述在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。
在进行汇编讲解之前先来了解一下开发的核心——CPU。
在TMS320C2000系列中,CPU 内核为:C20x/C24x/C240x:C2xLP:C27x/C28x:C27x、C28x这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。
可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。
C28x芯片具有3种操作模式:1.C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
2.C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。
在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。
3.C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
寻址短立即数时,加操作不受SXM的影响,且不能重复执行。
ADDADDC 1直接/间接该指令抑制符号扩展该指令抑制符号扩展;无论SXM为何值,数据均作无符号16位数看待。
当SXM=0和直接/间接移位次数等于0时,ADDS与ADD指令结果相同。
被寻址的数据寄存器单元的内容左移并加直接/间接到ACC,移位次数由TREG的低4位确定,SXM位的值控制移位时是否作符号扩展。
使用直接/间接寻址,ACC的低位字与数据直接/间接存储器单元的值作与运算,结果存在ACC的低字,ACC的高位字清0。
使用立即数寻址,长立即数可以左移,移位时,32位中长立即数未被长立即操作数填充的位均被清零。
长立即数累加器中的内容用其逻辑反取代指定的数据存储器单元的内容或16位常数直接/间接左移并加载到ACC,低位填0,若SXM= 1,高位用符号位扩展;若SXM=0,则填直接/间接0。
长立即数指定的数据存储器单元的内容或用0扩展直接/间接的8位常数左移并加载到ACC的低16位, ACC的高位填0。
数据作为16位无符号数短立即数处理,无论SXM为何值,本指令都不进行符号扩展。
将数据存储器单元的内容左移后加载到直接/间接ACC。
左移位数由TREG的低4位确定。
SXM的值决定ACC高位是否符号扩展。
将ACC的内容换成其相反数。
当对0000h作NEG操作时,OV置1。
若OVM=1,ACC=7FFFh,若OVM=0,则ACC=8000 0000h,只要ACC不等于0则C=0,当ACC=0,则C=1。
NORM指令将ACC中的有符号数进行规格化。
对定点数进行规格化即将其分成指数和尾数,为此对位31和位30作异或运算间接即可确定位30是数值还是符号。
对当前AR的缺省修改方式是加1。
该指令对正、负二进制补码均适用。
由于该指令在流水53ADDS(ACC)+(数据存储器地址)→ACC (ACC)+(数据存储器地址)左移(TREG(3:0))位→ACC(15:0)1ADDT 1ANDCMPLLACCLACL1(ACC(15:0))AND (数据存储器地址)→ACC(15:0)0→ACC(31:16)shift(ACC(31:16))AND lk ×2→ACC216(ACC(31:16))AND lk ×2→ACC(ACC)的逻辑反→ACC 1shift(数据存储器地址)×2→1ACC16(数据存储器地址)×2→ACC 1shift位→ACC lk×22(数据存储器地址)→ACC(15:0)10→ACC(31:16)k→ACC(7:0)10→ACC(31:16)(数据存储器地址)左移TREG(3:0)位→ACC(15:0)1LACTNEG (ACC)×(-1)→ACC 1NORM若(ACC)=0,则TC→1;否则若(ACC(31))XOR(ACC(30))=0,则TC→0,(ACC)×2 →ACC按指定的方式修改AR否则TC→11OR(ACC(15:0))OR (数据存储器地址)→ACC(15:0)(ACC(31:16))→ACC(31:16)(ACC)OR lk×2shift16→ACC(ACC)OR lk×2→ACC (ACC(31))→C(ACC(30:0))→ACC(31:1)C→ACC(0)C→ACC(31)(ACC(31:1))→A CC((30:0))(ACC(0))→C ((ACC)×2)的高16位→数据存储器地址((ACC)×2)的低16位→数据存储器地址(ACC(31))→C(ACC(30:0))→ACC(31:1)0→ACC(0)若SXM=0,则0→ACC(31)若SXM=1,则ACC(31)→ACC(31)(ACC(31:1))→ACC(30:0)(ACC(0))→Cshiftshift线的第4阶段才完成对AR的操作,而其它指令在流水线的第2阶段完成对AR 的操作,因此紧跟在NORM指令后的两条指令不能对AR值或者ARP值进行修改。
否则NORM指令将不能操作正确的数据存储器单元。
ACC的内容和被寻址的数据地址单元的值或左移后的立即数作或操作,SXM位对OR1直接/间接指令没有影响。
数据操作数没有被占用的位总是填0。
因此在直接或间接寻址或不2长立即数移位的长立即数的情况下ACC的高位是不变的。
当操作数是立即数且移位次数不等2长立即数于0时,操作数左移低位补0。
将ACC内容左移一位,进位位被移入最低位,最高位被移入进位位。
将ACC内容右移一位,进位位被移入最高位,最低位被移入进位位。
ROL1ROR1SACHSACH将整个ACC的32位数左移0-7位,将1直接/间接移位后数值的高16SACH将整个ACC的32位数左移0-7位,将1直接/间接移位后数值的低16 1 1SFL指令使ACC的内容左移一位,ACC的最低位填0,最高位移入进位位C。
SFR指令将ACC的内容右移一位。
若SXM=1,则产生算数右移,ACC的符号位不变,位31复制到位30,位0移入进位位。
若SXM=0,则产生逻辑右移,ACC的所有内容右移一位,位0移入进位位,位31填0 在直接间接和长立即数寻址方式里被寻址的数据存储单元的内容或16位常数左移,然后累加器减去移位后的值。
移位时低位填0。
高位扩展与否由SXM当使用短立即数时累加器减去8位正常数。
此时不可以指定移位值,减法不受SXM的影响,并且是不可重复的。
通常情况下,若减法结果有借位则进位位清0;若减法结果没有借位,则进位位置1。
但若移位次数为16,则当减法结果有借位时进位位清0,减法不产生借位时,进位位不变。
ACC的值减去被寻址的数据寄存单元的内容及进位位的逻辑反值,抑制符号扩展。
若相减结果产生借位进位位清0;若没有借位则进位位置1。
ACC实现条件减,可用于除法:把16位的54SACLSFLSFR(ACC)-(数据存储器地址)×2→ACC(ACC)-(数据存储器地址)×SUB2→ACC (ACC)-k→ACC (ACC)-lk×2shift16shift→ACC1 1 1 2直接/间接直接/间接短立即数长立即数SUBB SUBC(ACC)-(数据寄存器地址)-(C的逻辑反)→ACC 11直接/间接直接/间接若(ACC)>=0 且(数据存储器地址)>=0(ACC)-(数据寄存器地址)×2→ALU输出。
若ALU输出>=0,则(ALU输出)×2+1→ACC否则(ACC)×2→ACC15SUBS1ACCACC)-((数据寄存器地址)×SUBT2 →ACC 若SXM=1,则(数据存储单元)用符号扩展若SXM=0,则(数据存储单元)不用符号扩展ACC(15:0))XOR(数据寄存器地址)→ACC(15:0)(ACC(31:1))→ACC(31:16)或(ACC(31:0))XOR lk×2shift(TREG(3:0))1正被除数放在ACC的低16位,ACC的高位清0;16位的正除数放在数据存储单元中。
执行SUBC指令16次。
;最后一次SUBC指令完成后ACC的低16位是除数的商,ACC的高16为是余数。
若ACC和存储单元的内容为负,则不能用SUBC实现除法。
若16位被除数的有效数字少于16位可将它放在ACC中并左移,左移的位数为前面非有效的0的个数,SUBC指令执行的次数为16减去移位次数。
执行该指令不会因正溢或负溢而饱和。
ACC减去数据存储单元的内容,抑制符号扩展。
不管SXM为何值,数据存储单元的直接/间接内容都作为无符号处理。
ACC还是作为有符号数。
若相减结果有借位清0,若没有借位C置1。
ACC减去左移后的数据存储单元的内容,移位次数由TREG的低4位确定。
SXM控制是否对直接/间接数据存储单元的内容作符号扩展。
XOR→ACC(31:0)16ZALR或(ACC(31:0))XOR lk×2→ACC(31:0)(数据存储器地址)→ACC(31:16)8000h→ACC(15:0)直接和间接寻址时ACC的低16位和被寻址的数据存储单元的内容作异或运算,结果存在ACC的低16位,ACC的高16位不变。
使用长立即数寻址时,长立即数左移,数1直接/间接据操作数没有占用的位填0,然后和ACC 中的32位数作异或运算。
2长立即数1数据存储单元的内容送到ACC的高16位,直接/间接ACC的低15位清0,第15位置1。
55表3 辅助寄存器指令 ADRK指令功能(当前AR)+k→当前AR 若(当前AR)≠ 0,则操作数→PC 否则(PC)+2→PC 按指令要求的方式修改(当前AR)和(ARP)(当前AR)与(AR0)比较,并把结果放在状态寄存器ST1的TC位(数据存储器地址)→ARxk→ARx lk→ARx 按指令指定的方式修改(当前AR)和(ARP)(ARx)→数据寄存器地址(当前AR)-K→当前AR周寻址方式指令说明 8位立即数按右对齐方式与当前辅助寄存器1值相加。