读取/存储类指令、算术运算类指令、逻辑与位运算类指令、搬移、跳转(程序转移)及空操作类指令等6种。
由于C6000汇编语言的每一条指令只能在一定的功能单元执行,因此就形成了指令和功能单元之间的映射关系。一般而言,与乘法相关的指令在.M单元执行;需要产生数据存储器地址的指令在.D功能单元;算术逻辑运算大多在.S与.L单元执行。
在书写汇编程序时可以以方括号对条件操作进行描述,方括号内是条件寄存器的名称,对C62xx/C67xx可以使用A1、A2、B0、B1和B2,而对于C64xx还可以增加使用A0寄存器作为条件寄存器。
对C62xx/C67xx,双字节型数据的地址必须从偶数开始,即其地址最低位为0,4字节数据地址最低2位必须为0,分别称为半字、字边界。
Little-Endian指数据的存储方式,即数据的高有效位存放在地址高位字节,低有效位存放在地址低有效位。数据存放的终结方式(EN)由芯片的相应管脚LENDIAN的电平决定,并反映在CSR寄存器的EN位。LENDIAN=1为小终端,LENDIAN=0为大终端。如0x0A48FE01
如果运算结果超出了目的操作数字长所能表示数的范围,造成运算结果的高位丢失,使保存的运算结果不正确,称为溢出。
1、 寻址方式及Load/Store类指令
LDB/LD、LDBU/LDHU、STB/STH/STW,主要负责通用寄存器组与片内数据存储器之间交换数据。
2、 算术运算类指令
ADD/SUB、ADD2/SUB2、ADDU/SSUB、ADDK
3、 乘法运算类指令
SMPY/SMPYLH/SMPYHL
4、 逻辑和位域操作指令
AND/OR/XOR、NEG(求补码)、SHR/SHL(移位)、CMPEQ/CMPGT/CMPLT(比较)、
5、 搬移指令
搬移指令共有三个,MV/MVC/MVK,MV指令用于在通用寄存器之间传递数据,MVC指令用于在通用寄存器和控制寄存器之间传递数据,此条指令只能使用.S2功能单元,MVK指令用于把16位常数送入通用寄存器。在C6000指令集内,只能往寄存器送16位常数,可选择MVKH/MVKL指令向寄存器的高16位送数。
6、 程序转移指令
B .S1 LOOP
【资源对公共指令集底限制】表现在:指令在执行过程中会占用一定底资源,并行执行的指令所需资源不能冲突,在同一周期内不能有2条指令对同一寄存器执行写操作,具体编写汇编程序时要考虑到DSP的8个功能单元、2个读取数据通道(LD1、LD2)、2个通用寄存器组(A、B)、2个数据存储通路(ST1、ST2)、2个寄存器交叉通路(1X、2X)、2个数据寻址通路(DA1、DA2)相互之间的制约关系。
|