附录 TMS320C54X汇编语言指令系统.docx

上传人:b****6 文档编号:5619588 上传时间:2022-12-29 格式:DOCX 页数:176 大小:105.31KB
下载 相关 举报
附录 TMS320C54X汇编语言指令系统.docx_第1页
第1页 / 共176页
附录 TMS320C54X汇编语言指令系统.docx_第2页
第2页 / 共176页
附录 TMS320C54X汇编语言指令系统.docx_第3页
第3页 / 共176页
附录 TMS320C54X汇编语言指令系统.docx_第4页
第4页 / 共176页
附录 TMS320C54X汇编语言指令系统.docx_第5页
第5页 / 共176页
点击查看更多>>
下载资源
资源描述

附录 TMS320C54X汇编语言指令系统.docx

《附录 TMS320C54X汇编语言指令系统.docx》由会员分享,可在线阅读,更多相关《附录 TMS320C54X汇编语言指令系统.docx(176页珍藏版)》请在冰豆网上搜索。

附录 TMS320C54X汇编语言指令系统.docx

附录TMS320C54X汇编语言指令系统

指令系统

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

按指令的功能,可以将C54x指令系统分成4类:

算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。

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

Ⅰ、算术运算指令

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

1.加法指令

加法指令共有13条,如表1.1.1所示。

表1.1.1加法指令

语法

表达式

说明

字长

周期数

ADDSmem,src

src=src+Smem

操作数加至累加器

1

1

ADDSmem,TS,src

src=src+Smem<

操作数移位后加至累加器

1

1

ADDSmem,16,scr[,dst]

src=src+Smem<<16

操作数左移16位后加至累加器

1

1

ADDSmem[,SHIFT],src[,dst]

src=src+Smem<

操作数移位后加至累加器

2

2

ADDXmem,SHFT,src

dst=dst+Xmem<

操作数移位后加至累加器

1

1

ADDXmem,Ymem,dst

dst=Xmem<<16+Ymem<<16

两个操作数分别左移16位后然后相加

1

1

ADD#lk,[SHFT],src[,dst]

dst=src+#lk<

长立即数移位后加至累加器

2

2

ADD#lk,16,src[,dst]

dst=src+#lk<<16

长立即数左移16位后加至累加器

2

2

ADDsrc,[,SHIFT][,dst]

dst=dst+src<

累加器移位后相加

1

1

ADDsrc,ASM[,dst]

dst=dst+src<

操作数带进位加至累加器

1

1

ADDCSmem,src

src=src+Seme+C

带进位加法

1

1

ADDM#lk,Smem

Smem=Smem+#lk

长立即数加至存储器

2

2

ADDSSmem,src

src=src+uns(Smem)

符号位不扩展的加法

1

1

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

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

小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。

2.减法指令

减法指令共有13条,见表1.1.2所示。

表1.1.2减法指令

语法

表达式

说明

字长

周期数

SUBSmem,src

src=src-Smem

从累加器中减去操作数

1

1

SUBSmem,TS,src

src=src-Smem<

从累加器中减去移位后的操作数

1

1

SUBSmem,16,scr[,dst]

dst=dst-Smem<<16

从累加器中减去左移16位后的操作数

1

1

SUBSmem[,SHIFT],src[,dst]

dst=src-Smem<

操作数移位后与累加器相减

2

2

SUBXmem,SHFT,src

src=src-Xmem<

操作数移位后与累加器相减

1

1

SUBXmem,Ymem,dst

dst=Xmem<<16-Ymem<<16

两个操作数分别左移16位后相减

1

1

SUB#lk[,SHFT],src[,dst]

dst=dst-#lk<

长立即数移位后与累加器相减

2

2

SUB#lk,16,src[,dst]

dst=src-#lk<<16

长立即数左移16位后与累加器相减

2

2

SUBsrc,[,SHIFT][,dst]

dst=dst-src<

源累加器移位后与目的累加器相减

SUBsrc,ASM[,dst]

dst=dst-src<

源累加器按ASM移位后与目的累加器相减

1

1

SUBBSmem,src

src=src-Smem-C

从累加器中减去带借位减操作数

1

1

SUBCSmem,src

if(src-Smem<<15)≥0

src=(src-Smem<<15)<<1+1

elsesrc=src<<1

有条件减法

1

1

SUBSSmem,src

src=src-uns(Smem)

符号位不扩展的减法

1

1

3.乘法指令

乘法指令共有10条,见表1.1.3。

表1.1.3乘法指令

语法

表达式

说明

字长

周期数

MPYSmem,dst

dst=T*Smem

T寄存器值与操作数相乘

1

1

MPYRSmem,dst

dst=rnd(T*Smem)

T寄存器值与操作数相乘(带舍入)

1

1

MPYXmem,Ymem,dst

dst=Xmem*Ymem,T=Xmem

两个操作数相乘

1

1

续表

语法

表达式

说明

字长

周期数

MPYSmem,#lk,dst

dst=Smem*#lk,T=Smem

长立即数与操作数相乘

2

2

MPY#1k,dst

dst=T*#lk

长立即数与T寄存器值相乘

2

2

MPYAdst

dst=T*A(32~16)

T寄存器与累加器A高位相乘

1

1

MPYASmem

B=Smem*A(32~16),T=Smem

操作数与累加器A高位相乘

1

1

MPYUSmem,dst

dst=uns(T)*uns(Smem)

无符号数乘法

1

1

SQURSmem,dst

dst=Smem*Smem,T=Smem

操作数的平方

1

1

SQURA,dst

dst=A(32~16)*A(32~16)

累加器A高位的平方

1

1

4.乘加和乘减指令

乘加和乘减指令共有22条,见表1.1.4所示。

表1.1.4乘加和乘减指令

语法

表达式

说明

字长

周期数

MACSmem,src

src=src+T*Smem

操作数与T寄存器值相乘后加至累加器

1

1

MACXmem,Ymem,src[,dst]

dst=src+Xmem*Ymem

T=Xmem

两个操作数相乘后加至累加器

1

1

MAC#lk,src[,dst]

dst=src+T*#lk

长立即数与T寄存器值相乘后加至累加器

2

2

MACSmem,#lk,src[,dst]

dst=src+Smem*#lk

T=Smem

长立即数与操作数相乘后加至累加器

2

2

MACRSmem,src

dst=rnd(src+T*Smem)

操作数与T寄存器值相乘后加至累加器(带舍入)

1

1

MACRXmem,Ymem,src[,dst]

dst=rnd(src+Xmem*Ymem)

T=Xmem

两个操作数相乘后加至累加器(带舍入)

1

1

MACASmem[,B]

B=B+Smem*A(32~16)

T=Xmem

操作数与累加器A高位相乘后加至累加器B

1

1

MACAT,src[,dst]

dst=src+T*A(32~16)

T寄存器值与累加器A高位相乘

1

1

MACARSmem[,B]

B=rnd(B+Smem*A(32~16))

T=Smem

T值与累加器A高位相乘后加至累加B(带舍入)

1

1

MACART,src[,dst]

dst=rnd(src+T*A(32~16))

A高位与T值相乘后与源累加器相加(带舍入)

1

1

MACDSmem,pmad,src

src=src+Smem*pmad

T=Smem,(Smem+1)=Smem

操作数与程序存储器值相乘后累加并延迟

2

3

续表

语法

表达式

说明

字长

周期数

MACPSmem,pmad,src

Src=src+Smem*pmad

T=Smem

操作数与程序存储器值相乘后加至累加器

2

3

MACSUXmem,Ymem,src

src=src+uns(Xmem)*Ymem

T=Xmem

无符号数与有符号数相乘后加至累加器

1

1

MASSmem,src

src=src-T*Smem

从累加器中减去T寄存器值与操作数的乘积

1

1

MASRXmem,Ymem,src[,dst]

dst=rnd(src-Xmem*Ymem)

T=Xmem

从累加器中减去两操作数的乘积(带舍入)

1

1

MASXmem,Ymem,src[,dst]

dst=src-Xmem*Ymem

T=Xmem

从源累加器中减去两操作数的乘积

1

1

MASRSmem,src

src=rnd(src-T*Smem)

从累加器中减去T值与操作数的乘积(带舍入)

1

1

MASASmem[,B]

B=B-Smem*A(32~16)

T=Smem

从累加器B中减去操作数与累加器A高位的乘积

1

1

MASAT,src[,dst]

dst=src-T*A(32~16)

从源累加器中减去T寄存器值与累加器A高位乘积

1

1

MASART,src[,dst]

dst=rnd(src-T*A(32~16))

从源中减去T寄存器值与累加器A高位乘积(带舍入)

1

1

SQURASmem,src

src=src+Smem*Smem

T=Smem

操作数平方并累加

1

1

SQURSSmem,src

src=src-Smem*Smem

T=Smem

从累加器中减去操作数的平方

1

1

5.双操作数指令

双操作数指令共有6条,见表1.1.5所示。

表1.1.5双操作数指令

语法

表达式

说明

字长

周期数

DADDLmem,src[,dst]

ifC16=0,dst=Lmem+src

ifC16=1

dst(39~16)=Lmem(31~16)+src(31~16)

dst(15~0)=Lmem(150)+src(15~0)

双精度/双16位数加至累加器

1

1

DADSTLmem,dst

ifC16=0,dst=Lmem+(T<<16+T)

ifC16=1

dst(39~16)=Lmem(31~16)+T

dst(15~0)=Lmem(15~0)-T

双精度/双16位数与T寄存器值相加/减

1

1

续表

语法

表达式

说明

字长

周期数

DRSUBLmem,src

ifC16=0,src=Lmem-src

ifC16=1

src(39~16)=Lmem(31~16)-src(31~16)

src(15~0)=Lmem(15~0)-src(15~0)

双精度/双6位数中减去累加器值

1

1

DSADTLmem,dst

IC16=0,dst=Lmem-(T<<16+T)

IfC16=1

dst(39~16)=Lmem(31~16)-T

dst(15~0)=Lmem(15~0)+T

长操作数与T寄存器值相加减

1

1

DSUBLmem,src

IfC16=0,src=src-Lmem

ifC16=1

src(39~16)=src(31~16)-Lmem(31~16)

src(15~0)=src(15~0)-Lmem(15~0)

从累加器中减去双精度/双16位数

1

1

DSUBTLmem,dst

IfC16=0,dst=Lmem-(T<<16+T)

ifC16=1

dst(39~16)=Lmem(31~16)-T

dst(15~0)=Lmem(15~0)-T

从长操作数中减去T寄存器值

1

1

6.特殊应用指令

特殊应用指令共有15条,见表1.1.6所示。

表1.1.6特殊应用指令

语法

表达式

说明

字长

周期数

ABDSTXmem,Ymem

B=B+|A(32~16)|,

A=(Xmem–Ymem)<<16

绝对距离

1

1

ABSsrc[,dsst]

dst=|src|

累加器值取绝对值

1

1

CMPLsrc[,dst]

dst=src

累加器取反

1

1

DELAYSmem

(Smem+1)=Smem

存储器单元延迟

1

1

EXPsrc

T=numberofsignbits(src)–8

求累加器中数据的指数

1

1

FIRSXmem,Ymem.pmand

B=B+A*pamd,A=(Xmem+Ymem)<<16

对称FIR滤波

2

3

LMSXmem,Ymem

B=B+Xmem*Ymem,A=(A+Xmem<<16)+215

求最小均方值

1

1

MAXdst

dst=max(A,B)

求累加器(A,B)最大值

1

1

MINdst

dst=min(A,B)

求累加器(A,B)最小值

1

1

NEGsrc[,dst]

dst=-src

累加器取反

1

1

续表

语法

表达式

说明

字长

周期数

NORMsrc[,dst]

dst=src<

归一化

1

1

PLOYSmem

B=Smem<<16,A=rnd(A*T+B)

求多项式的值

1

1

RNDsrc[,dst]

dst=src+215

累加器四舍五入运算

1

1

SATsrc

saturate(src)

累加器饱和运算

1

1

SQDSTXmem,Ymem

B=B+A(32~16)*A(32~16),A=(Xmem-Ymem)<<16

求两点距离的平方

1

1

Ⅱ、逻辑运算指令

逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。

1.与指令

与指令共5条,见表2.2.1。

表2.2.1与指令

语法

表达式

说明

字长

周期数

ANDSmem,src

src=src&Smem

操作数与累加器相与

1

1

AND#lk[,SHFT],src[,dst]

dst=src&#lk<

长立即数移位后与累加器相与

2

2

AND#lk,16,src[,dst]

dst=src&#lk<<16

长立即数左移16位后与累加器相与

2

2

ANDsrc[,SHIFT][,dst]

dst=dst&src<

源累加器移位后与目的累加器相与

1

1

ANDM#lk,Smem

Smem=Smem&#lk

操作数与长立即数相与

2

2

2.或指令

或指令共5条,见表2.2.2。

表2.2.2或指令

语法

表达式

说明

字长

周期数

ORSmem,src

src=src|Smem

操作数与累加器相或

1

1

OR#lk[,SHFT],src[,dst]

dst=src|#lk<

长操作数移位后与累加器相或

2

2

OR#lk16,src[,dst]

dst=src|#lk<<16

长操作数左移16位后与累加器相或

2

2

ORsrc[,SHIFT][,dst]

dst=dst|src<

源累加器移位后和目的累加器相或

1

1

ORM#lk,Smem

Smem=Smem|#lk

操作数和长立即数相或

2

2

3.异或指令

异或指令共5条,见表2.2.3。

表2.2.3异或指令

语法

表达式

说明

字长

周期数

XORSmem,src

src=src∧Smem

操作数和累加器相异或

1

1

XOR#lk[,SHFT],src[,dst]

dst=src∧#lk<

长立即数移位后和累加器相异或

2

2

XOR#lk,16,src[,dst]

dst=src∧#lk<<16

长立即数左移16位后和累加器相异或

2

2

XORsrc[,SHIFT][,dst]

dst=dst∧src<

源累加器移位后和目的累加器相异或

1

1

XORM#lk,Smem

Smem=Smem∧#lk

操作数和长立即数相异或

2

2

4.移位指令

移位指令共6条,见表2.2.4。

表2.2.4移位指令

语法

表达式

说明

字长

周期数

ROLsrc

Rotateleftwithcarryin

累加器经进位位循环左移

1

1

ROLTCsrc

RotateleftwithTCin

累加器经TC位循环左移

1

1

RORsrc

Rotaterightwithcarryin

累加器经进位位循环右移

1

1

SFTAsrc,SHIFT[,dst]

dst=src<

累加器算术移位

1

1

SFTCsrc

ifsrc(31)=src(30)thensrc=src<

累加器条件移位

1

1

SFTLsrc,SHIFT[,dst]

dst=src<

累加器逻辑移位

1

1

5.测试指令

测试指令共5条,见表见表2.2.5。

表2.2.5测试指令

语法

表达式

说明

字长

周期数

BITXmem,BITC

TC=Xmem(15-BITC)

测试指定位

1

1

BITFSmem,#lk

TC=(Smem&#lk)

测试由立即数指定的位

2

2

BITTSmem

TC=Smem(15-T(3-0))

测试由T寄存器指定的位

1

1

CMPMSmem,#lk

TC=(Smem==#lk)

存储单元与长立即数比较

2

2

CMPRCC,ARx

CompareARxwithAR0

辅助寄存器ARx与AR0比较

1

1

Ⅲ、程序控制指令

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

分别例于下列表中。

1.分支指令

分支指令共6条,见表3.3.1。

表3.3.1分支指令

语法

表达式

说明

字长

周期数

B[D]pmad

PC=pmad(15~0)

无条件分支转移

2

4/[2*]

BACC[D]src

PC=src(15~0)

按累加器规定地址转移

1

6/[4*]

BANZ[D]pmad,Sind

if(Sind(s)≠0)

thenPC=pmad(15~0)

辅助寄存器不为0转移

2

4‡/2§/[2*]

BC[D]pmad,cond[cond[,cond]]

if(cond(s))

thenPC=pmad(15~0)

条件分支转移

2

5‡/3§/[3*]

FB[D]extpmad

PC=pmad(15~0),

XPC=pmad(22~16)

无条件远程分支转移

2

4/[2*]

FBACC[D]src

PC=src(15~0),

XPC=src(22~16)

按累加器的地址远程分支转移

1

6/[4*]

‡条件为真,§条件为假,*延迟指令

2.调用指令

调用指令共5条,见表3.3.2。

表3.3.2调用指令

语法

表达式

说明

字长

周期数

CALA[D]src

--SP=PC

PC=src(15~0)

按累加器的地址调子程序

1

6/[4*]

CALL[D]pmad

--SP=PC

PC=pmad(15~0)

无条件调用子程序

2

4/[2§]

CC[D]pmad,cond[cond[,cond]]

if(cond(s))then--SP=PCPC=pmad(15~0)

有条件调用子程序

2

5‡/3§/[3*]

FCALA[D]src

--SP=PC,--SP=XPC

PC=src(15~0)

XPC=src(22~16)

按累加器的远程调子程序

1

6/[4*]

FCALL[D]extpmad

--SP=PC,--SP=XPC

PC=pmad(15~0)

XPC=pmad(22~16)

无条件远程调用子程序

2

4[2*]

3.中断指令

中断指令有2条,见下表。

表3.3.3中断指令

语法

表达式

说明

字长

周期数

INTRK

--SP=PC

PC=IPTR(15~7)+K<<2

INTM=1

非屏蔽软件中断,关闭其他可屏蔽中断

1

3

TRAPK

--SP=PC

PC=IPTR(15~7)+K<<2

非屏蔽软件中断,不影响INTM位

1

3

4.返回指令

返回指令共有6条,见下表。

表3.3.4返回指令

语法

表达式

说明

字长

周期数

FRET[D]

XPC=SP++,PC=SP++

远程返回

1

6/[4*]

FRETE[D]

XPC=SP++,PC=SP++

INTM=0

开中断,从远程中断返回

1

6/[4*]

RC[D]cond[,cond[,cond]]

If(cond(s))thenPC=SP++

条件返回

1

5‡/3§/[3*]

RET[D]

PC=SP++

返回

1

5/[3*]

RETE[D]

PC=SP++,INTM=0

开中断,从中断返回

1

5/[3*]

RETF[D]

PC=RTN,SP++,INTM=0

开中断,从中断快速返回

1

3/[1*]

5.重复指令

重复指令共5条,见下表。

表3.3.5重复指令

语法

表达式

说明

字长

周期数

RPTSmem

重复执行一条指令,RC=Smem

重复执行下条

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1