当前位置:文档之家› 汇编语言指令系统

汇编语言指令系统

第3章指令系统TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。

按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。

下面分别对各类指令进行介绍。

3.2.1 算术运算指令算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。

1.加法指令加法指令共有13条,如表3.5所示。

表3.5 加法指令整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。

例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。

2.减法指令减法指令共有13条,见表3.6所示。

表3.6 减法指令3.乘法指令乘法指令共有10条,见表3.7。

表3.7 乘法指令4.乘加和乘减指令乘加和乘减指令共有22条,见表3.8所示。

表3.8 乘加和乘减指令5.双操作数指令双操作数指令共有6条,见表3.9所示。

表3.9 双操作数指令6.特殊应用指令特殊应用指令共有15条,见表3.10所示。

表3.10 特殊应用指令3.2.2 逻辑运算指令逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。

1.与指令与指令共5条,见表3.11。

表3.11 与指令2.或指令或指令共5条,见表3.12。

表3.12 或指令3.异或指令异或指令共5条,见表3.13。

表3.13 异或指令4.移位指令移位指令共6条,见表3.14。

表3.14 移位指令5.测试指令测试指令共5条,见表见表3.15。

表3.15测试指令3.2.3 程序控制指令程序控制指令包括分支指令(B,BC),调用指令(CALL),中断指令(INTR,TRAP),返回指令(RET),重复指令(RPT),堆栈操作指令(FRAME,POP),其它程序控制指令(IDLE,NOP)。

分别例于下列表中。

1.分支指令分支指令共6条,见表3.16。

表3.16 分支指令‡条件为真,§条件为假,*延迟指令2.调用指令调用指令共5条,见表3.17。

表3.17调用指令3.中断指令中断指令有2条,见下表。

表3.18中断指令4.返回指令返回指令共有6条,见下表。

表3.19 返回指令5.重复指令重复指令共5条,见下表。

表3.20 重复指令6.堆栈操作指令堆栈操作指令共5条,见下表。

表3.21堆栈操作指令7.其它程序控制指令其它程序控制指令共7条,见下表。

表3.22 其它程序控制指令3.2.4 加载和存储指令加载和存储指令包括一般的加载和存储指令(LD,ST),条件存储指令(CMPS,SACCD),并行的读取和乘法指令(LD‖MAC),并行的读取和存储指令(LD‖ST),并行的存储和乘法指令(ST‖MAC),并行的读取和加减指令(LD‖ADD,LD‖SUB)以及其他读取类型和存储类指令(MVDD,PORTW,READA)。

1.加载指令加载指令共21条,见下表。

2.存储指令存储指令共14条,见下表。

113.条件存储指令条件存储指令有4条,见下表。

表3.25 条件存储指令4.并行加载和存储指令并行加载和存储指令有2条,见下表。

12表3.26 并行加载和存储指令5.并行加载和乘法指令并行加载和乘法指令有4条,见下表。

表3.27 并行加载和乘法指令6.并行存储和加减指令并行存储和加载指令有2条,见下表。

表3.28 并行存储和加减指令7.并行存储和乘法指令并行存储和乘法指令有5条,见下表。

表3.29并行存储和乘法指令13续表8.其它存储和加载指令有12条其它存储和加载指令,见下表。

表3.30 其它存储和加载指令3.2.5 重复执行单条指令重复执行单条指令是将下一条指令重复执行(RC)+1次,最多为65 536次,使用重复执行指令功能时,绝对的程序和数据地址是自动增加的。

当重复指令被解码时,所有中断(包括NMI,不包括RS)均被屏蔽,直到重复指令执行完毕。

但是在响应重复执行循环中响应HOLD信号,不管状态寄存器ST1中的HM为何值。

重复指令可以使被重复的指令由多周期指令变成单周期指令,表3.30列出了这些指令。

使用长偏移地址或绝对地址的单数据操作数指令不能用于重复指令,如使用*ARn(lk)、*+A R n(lk)、*+A R n(lk)%和*(lk)寻址的指令。

不能使用RPT或RPTZ指令循环执行的指令有36条,见表3.31。

14表3.31 重复执行时由多周期指令变成单周期指令的指令表3.32不能使用RPT或RPTZ指令重复指令的指令1516续表3.3 指令介绍及举例本节详细介绍了TMS320C54x 系列指令集,该指令集支持大量的信号处理操作及通用操作,如多重处理和高速控制等。

TMS320C54x 提供两种指令,一是汇编指令,另一种是代数指令。

汇编指令类似指令助记符,代数指令接近汇编指令,但更便于理解。

TMS320C54x 开发平台都支持两种指令编程和调试,也支持汇编指令和代数指令互相转换。

下面所有举例都列出了两种表达方式,前面是汇编指令表达方式,后面为代数指令表达方式。

1. ABDST语法: 汇编指令方式 代数指令方式ABDST Xmem, Ymem abdst (Xmem,Ymem )操作码:执行:(B ((Xmem )-(Ymem ))<<16 →A受OVM ,FRCT 和SXM 影响;影响C ,OVA ,OVB 。

说明:计算两向量Xmem, Ymem 之差的绝对值。

累加器A (32~16)的绝对值加到累加器B 中。

Xmem 减Ymem 之差左移16位送到累加器A 中。

若分数方式位为1(FRCT=1),则绝对值乘2。

指令字长:1个字。

周期数:1个周期。

【例】ABDST *AR3+,*AR4+ (abdst (*AR3+,*AR4+))ABAR3 AR4 FRCT 数据存储器0100h 0200h 2.ABS语法: 汇编指令方式 代数指令方式ABS src[,dst] dst=|src |17操作码:15 14 13 12 11 10 987654321执行:| (src) | → dst (or src if dst is not specified)受OVM 位影响方式如下:若OVM =1,80 0000 0000h 的绝对值为00 7FFF FFFFh ; 若OVM =0,80 0000 0000h 的绝对值为80 0000 0000h 。

影响C, OVdst说明:计算src 的绝对值,然后装入dst 中。

指令字长:1个字。

周期数:1个周期。

【例1】 ABS A,B (B=∣A |)A –53 A –53B –1000B﹢53【例2】 ABS A (A=|A |)AOVM 【例3】 ABS A (A=|A |)3. ADD语法:汇编指令方式 代数指令方式(1)ADD Smem, src src=src+Smem 或src+=Smem(2)ADD Smem,TS,src src=src+Smem <<TS 或src+=Smem <<TS(3)ADD Smem,16,src[,dst] dst=src+Smem <<16或dst+= Smem <<16(4)ADD Smem[,SHIFT],src[,dst] dst=src+Smem[<<SHIFT] 或dst+=Smem[<<SHIFT](5)AAD Xmem,SHFT,src src=src+Xmem <<SHFT 或src+= Xmem <<SHFT(6)ADD Xmem,Ymem,dst dst=(Xmem+Ymem )<<16 (7)ADD #lk[,SHFT],src[,dst] dst=src+# lk[<<[SHFT] 或dst+=# lk[<<SHFT](8)ADD #lk,16,src[,dst] dst=src+# lk <<16或dst+=# lk <<16(9)ADD src[,SHIFT],[,dst] dst=dst+src[<<SHIF] 或dst+= src[<<SHIFT](10)ADD src,ASM[,dst] dst=dst+src<<ASM或dst+= src<<ASM –32 768≤lk≤32 767, –16≤SHIFT≤15,0≤SHFT≤15操作码:(1)(2)(3)(4)15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0(5)(6)(7)(8)(9)(10)执行:(1)(Smem)+(src)→src(2)(Smem)<<(TS)+(src)→src(3)(Smem)<<16+(src)→dst(4)(Smem)[<<SHIFT]+(src)→dst(5)(Xmem)<<SHFT+(src) →src1819(6)((Xmem )+(Ymem ))<<16 →dst (7)lk <<SHFT+(src )→dst (8)lk <<16+(src )→dst (9)(src or [dst])+(src )<<SHIFT→dst (10)(src or [dst])+(src )<<ASM→dst 受SXM 和OVM 位影响。

影响C 。

说明:该指令将一个16位数加到选定的累加器中或一个采用双数据存储器操作数寻址的16位操作数Xmem 中。

被加的数值可为下列各操作数之一:● 单数据存储器操作数(Smem ); ● 双数据存储器操作数(Ymem ); ● 16位立即数(#lk ); ● src 中移位后的值。

如果定义了dst ,结果就存在dst 中;否则,存在src 中。

大部分第二操作数要移位。

当进行左移时,低位舔0,高位如下:如果SXM=1,则进行符号扩展;如果SXM=0,则清0。

对于右移,高位如下:如果SXM=1,则进行符号扩展;如果SXM=0,则清0。

指令字长:指令1、2、3、5、6、9和10:一个字。

指令4、7和8:2个字。

当Smem 使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。

周期数:指令1、2、3、5、6、9和10:一个周期。

指令4、7和8:2个周期。

当Smem 使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。

【例1】 ADD AR3+,14,A ( A=A + *AR3 + << 14 )A AC C AR3 AR3 SXM SXM 0100h 0100h【例2】 ADD A, –8, B (B=B+A <<–8)A B C 注:#4568=#11D8h4. ADDC语法:汇编指令方式 代数指令方式ADDC Smem, src src = src + Smem + CARRY 或 src+ = Smem + CARRY 操作码:20执行:(Smem )+(src)+(C)→src受OVM ,C 的影响。

相关主题