TMS320LF2407A汇编指令集I1.docx

上传人:b****7 文档编号:10131560 上传时间:2023-02-08 格式:DOCX 页数:75 大小:2.23MB
下载 相关 举报
TMS320LF2407A汇编指令集I1.docx_第1页
第1页 / 共75页
TMS320LF2407A汇编指令集I1.docx_第2页
第2页 / 共75页
TMS320LF2407A汇编指令集I1.docx_第3页
第3页 / 共75页
TMS320LF2407A汇编指令集I1.docx_第4页
第4页 / 共75页
TMS320LF2407A汇编指令集I1.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

TMS320LF2407A汇编指令集I1.docx

《TMS320LF2407A汇编指令集I1.docx》由会员分享,可在线阅读,更多相关《TMS320LF2407A汇编指令集I1.docx(75页珍藏版)》请在冰豆网上搜索。

TMS320LF2407A汇编指令集I1.docx

TMS320LF2407A汇编指令集I1

 

TMS320LF2407A

汇编指令集

 

规范资料整理

2017年10月

版本信息:

文件名称:

TMS320LF2407A汇编指令集I1

V1.0

2017.10.23

版本号

编写

第一检查

第二检查

批准

日期

版本更新记录

版本号

修改人

修改位置

修改内容

修改原因

修改时间

目录

1前言4

1.1指令集按功能分为六大类:

4

1.2符号定义4

2TMS320LF240x的汇编指令概述4

2.1汇编语言源程序的标准格式4

2.2在编写汇编语句时,必须遵循以下格式:

5

2.3汇编语言的指令集5

2.4汇编指令的语法和说明5

2.5存储器寻址方式6

3汇编指令集9

3.1ABS累加器取绝对值9

3.2ADD累加器加10

3.3ADDC带进位的累加器加11

3.4ADDS符号扩展抑制的累加器加12

3.5ADDTTREG指定移位的累加器加12

3.6ADRK辅助寄存器加短立即数13

3.7AND和累加器进行与操作13

3.8APACPREG加到累加器14

3.9B无条件跳转15

3.10BACC跳转到累加器指定的地址15

3.11BANZ辅助寄存器非0跳转15

3.12BCND条件跳转16

3.13BIT位测试16

3.14BITTTREG指定位测试17

3.15BLDD数据存储器间的块传送17

3.16BLPD程序区到数据区的块移动18

3.17CALA累加器指定地址的子程序调用19

3.18CALL无条件调用19

3.19CC条件调用20

3.20CLRC控制位清020

3.21CMPL累加器逻辑取反20

3.22CMPR辅助寄存器与AR0比较20

3.23DMOV数据移动21

3.24IDLE等待中断22

3.25IN从端口读入数据22

3.26INTR软件中断22

3.27LACC带移位的累加器装载23

3.28LACL装载累加器低16位,高16位清023

3.29LACT由TREG指定左移位数的累加器装载24

3.30LAR辅助寄存器装载25

3.31LDP数据页指针装载26

3.32LPH乘积寄存器高位装载26

3.33LST状态寄存器装载27

3.34LTTREG寄存器装载28

3.35LTATREG寄存器装载并累加前一次乘积28

3.36装载TREG寄存器指令LTD29

3.37LTPTREG寄存器装载并将乘积寄存器内容存入累加器ACC中30

3.38LTSTREG寄存器装载、累加器减去前一次乘积30

3.39MAC乘累加30

3.40MACD乘累加并数据移动31

3.41MAR修改辅助寄存器32

3.42MPY乘33

3.43MPYA乘并累加前一次乘积33

3.44MPYS乘并减去前一次乘积34

3.45MPYU乘无符号数34

3.46NEG累加器取补码35

3.47NMI非屏蔽中断35

3.48NOP空操作35

3.49NORM累加器内容归一化36

3.50OR与累加器进行或操作36

3.51OUT输出数据到端口37

3.52PAC乘积寄存器内容装载到累加器37

3.53POP栈顶内容弹出到累加器低16位38

3.54POPD栈顶内容弹出到数据存储单元38

3.55PSHD数据存储单元内容压入堆栈40

3.56PUSH累加器的低16位压入堆栈41

3.57RET子程序返回41

3.58RETC条件返回42

3.59ROL累加器循环左移42

3.60ROR累加器循环右移43

3.61RPT重复执行下一条指令43

3.62SACH存储累加器移位后的高16位44

3.63SACL存储累加器移位后的低16位44

3.64SAR存储辅助寄存器45

3.65SBRK辅助寄存器减去短立即数45

3.66SETC控制位置位46

3.67SFL累加器左移46

3.68SFR累加器右移46

3.69SPAC累加器减乘积寄存器47

3.70SPH存储乘积寄存器的高16位47

3.71SPL存储乘积寄存器的低16位48

3.72SPLK长立即数存储到数据存储单元48

3.73SPM设置PREG输出的移位模式49

3.74SQRA数值平方并累加前一次乘积49

3.75SQRS数值平方并减去前一次乘积50

3.76SST存储状态寄存器51

3.77SUB累加器减51

3.78SUBB带借位的累加器减52

3.79SUBC条件减53

3.80SUBS符号扩展抑制的累加器减54

3.81SUBTTREG确定移位的累加器减55

3.82TBLR表读55

3.83TBLR表读指令56

3.84TBLW表写56

3.85TRAP软件中断57

3.86XOR与累加器进行异或操作57

3.87ZALR累加器低位字1清0,高位字带舍入装载58

1前言

1.1指令集按功能分为六大类:

1)累加器、算术和逻辑指令

2)辅助寄存器和数据页面指针指令

3)TREG、PREG和乘法指令

4)转移指令

5)控制指令

6)I/O和存储器操作

1.2符号定义

1)ACC-累加器

2)ARx-LAR和SAR指令中使用的3位值,指定被操作的辅助寄存器

3)CM-2位数值,CMPR指令根据CM的值进行比较:

4)CM=00,测试是否当前AR=AR0;

5)CM=01,测试是否当前AR

6)CM=10,测试是否当前AR>AR0;

7)CM=11,测试是否当前AR≠AR0。

8)AR-辅助寄存器

9)BITX-4位数值,表示BIT指令要测试数据存储器值的哪一位

10)SHIFT-4位移位值

11)TP-条件执行指令的2位数值:

12)BIO引脚为低,TP=00;

13)TC=1,TP=01;

14)TC=0,TP=10;

15)无条件,TP=11。

2TMS320LF240x的汇编指令概述

汇编语言是DSP应用软件的基础,使用汇编语言时必须要符合规定的格式,只有这样汇编器才能将源文件转换为机器语言的目标文件。

2.1汇编语言源程序的标准格式

汇编语句格式一般包含4部分:

1)标号;

2)指令;

3)操作数;

4)注释。

以助记符指令为例,格式如下:

[标号][:

]指令[操作数][;注释]

说明:

其中[]内的内容为可选项。

2.2在编写汇编语句时,必须遵循以下格式:

1)语句必须以标号、空格、星号或分号开始。

2)若使用标号,则必须从第1列开始。

标号长度最多为32个字符,由A-Z、a-z、0-9、_和$等组成,但第1个字符不能为数字。

标号后可以跟一个冒号(:

),但并不作为标号的一部分。

3)每部分必须由1个或多个空格分开。

4)开始于第1列的注释须用星号(*)或分号(;)标示,但在其他列开始的注释前面只能用分号。

5)指令一定不能从第1列开始,否则将被视为标号。

指令包括助记符指令、汇编伪指令(如.data,.set)、宏伪指令(如.macro)和宏调用。

6)操作数可以为列表形式,汇编器允许使用常数、符号或表达式作为地址、立即数或间接寻址。

当操作数为立即数时,使用#号作为前缀;操作数为间接寻址时,使用*号作为前缀,将操作数的内容作为地址。

2.3汇编语言的指令集

TMS320LF240x的汇编语言共87条,分为6大类:

1)累加器、算术和逻辑指令;

2)辅助寄存器和数据页指针指令;

3)TREG、PREG和乘法指令;

4)跳转指令;

5)控制指令;

6)I/O和存储器操作指令。

2.4汇编指令的语法和说明

在介绍汇编指令之前,先把所用到的操作数做统一规定:

1)dma:

数据存储器地址的低7位(LSB);

2)shift:

左移位数0~15;

3)n:

指定下一次的辅助寄存器ARP值(0~7);

4)k:

8位短立即数;

5)1k:

16位长立即数;

6)ind:

是一个间接寻址变量,可取*、*+、*-、*0+、*0-、

*BR0+、*BR0-;

7)Pma:

16位程序存储器地址;

8)PA:

16位I/O端口或I/O映射寄存器地址。

2.5存储器寻址方式

存储器寻址方式包括立即寻址、直接寻址和间接寻址。

1)立即寻址

含义:

指令中已包含有执行指令所需的操作数;

说明:

①在数值或符号前加‘#’表示立即数;

②两种形式:

短立即数(8/9/13位)和长立即数(16位)。

例如:

①采用短立即寻址RPT指令(详见3.61项)(#后的最大值为255)

RPT#99;将紧跟在后面的语句重复99+1次

②采用长立即寻址ADD指令

ADD#65534,2;将数据65534左移两位后,再将结果加至;累加器

2)直接寻址

含义:

用指令中包含的数据存储器地址的低7位+基地址

→16位数据存储器地址。

 

基地址:

DP__数据页指针(ST0低9位)

指令寄存器的内容:

位15~8:

指示指令类型(操作码)和指令所访问的数据值的移位信息。

位7:

直接/间接指示符。

0-直接寻址;1-间接寻址。

位6~0:

指示指令访问的数据存储器的偏移量。

16位地址:

步骤:

①设置数据页面:

将适当的值(0~511)加载到DP。

可利用LDP或任何能将数值加载到ST0的指令。

②指定偏移地址:

给出7位偏移地址作为指令的操作数。

注:

不必在每条使用直接寻址的指令前都设置数据页面。

如果代码块内的所有指令都访问同一数据页面(128字),只须在该指令块的前面加载一个DP。

必须保证在访问新的数据页面前改变DP。

例:

①使用直接寻址的ADD指令

LDP#4;将数据页面设置为4

ADD9h,5;数据存储器地址0209h中的内容左移5位与累;加器的内容相加

②使用直接寻址的ADDC指令

LDP#500;将数据页面设置为500

ADDC6h;数据存储器地址FA06h中的内容及进位位

;(C)的值与累加器的内容相加

3)间接寻址

含义:

按辅助寄存器(AR)中的内容寻址数据存储器

用途:

主要用在需要存储器地址以步进方式连续变化的场合。

说明:

①当前辅助寄存器

通过向状态寄存器ST0中的3位辅助寄存器指针(ARP)在装入0~7,可选择特定的辅助寄存器。

ARP可由MAR、LST或任何支持间接寻址的指令装载。

ARP所指的寄存器被作为当前寄存器(AR)。

执行指令是,当前AR的内容用作被访问的数据存储器地址。

②间接寻址选项

不加也不减:

指令使用当前AR的内容作为数据存储器的地址,但当前AR的内容既不增加也不减少。

加1或减1:

指令使用当前AR的内容作为数据存储器的地址,但当前AR的内容加1或减1。

加或减一个变址量:

指令使用当前AR的内容作为数据存储器的地址,然后使当前AR的内容加或减一个变址量,该变址量为AR0中的值。

加或减一个变址量且反向进位:

指令使用当前AR的内容作为数据存储器的地址,然后使当前AR的内容加或减一个变址量,该变址量为AR0中的值,采用反向进位方式(用于FFT)。

选项

操作数

例子

不增不减

*

LACC*;用当前AR所指的DM地址中的内容装载累加器

增1

*+

LACC*+;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR加1

减1

*-

LACC*-;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR减1

加变址量

*0+

LACC*0+;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR的内容加上AR0的内容

减变址量

*0-

LACC*0-;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR的内容减去AR0的内容。

加变址量反向进位

*BRO+

LACC*BRO+;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR的内容加上AR0的内容,采用反转进位。

减变址量反向进位

*BRO-

LACC*BRO-;用当前AR所指的DM地址中的内容装载累加器然后

;当前AR的内容减去AR0的内容,采用反转进位。

③辅助寄存器

除了更新当前AR内容外,某些指令还可以指明下一个AR。

例:

MAR*,AR1;将当前AR设为AR1

LACL*+,AR2;将AR1所指向的地址中的内容装载到;ACC加器的低16位,AR1内容加1,使;AR2为当前AR

SACL*+;将ACC的低16位存于AR2所指向的地址;单元,AR2内容加1

④间接寻址操作码格式

指令寄存器的内容:

位15~8:

指定指令类型及与数据移位相关的信息。

位7:

直接/间接指示。

1为间接寻址方式,0为直接寻址方式。

位6~4:

AR更新代码ARU,确定是否对AR进行更新以及将其增加还是减少将ACC的低16位存于AR2所指向的地址。

位3:

下一AR指示符N。

指定该指令是否改变ARP的值,0-ARP内容不变;1-NAR的内容加载到ARP,原ARP的值加载到ST1的ARB。

位2~0:

下一AR的值NAR。

ARU代码

在当前AR中完成的运算

6

5

4

0

0

0

 在当前AR中无操作

0

0

1

 当前AR-1->当前AR

0

1

0

 当前AR+1->当前AR

0

1

1

 保留

1

0

0

 前AR-AR0->当前AR(反向进位)

1

0

1

 当前AR-AR0->当前AR

1

1

0

 当前AR+AR0->当前AR

1

1

1

 当前AR+AR0->当前AR(反向进位)

⑤修改辅助寄存器的内容

特定指令:

LAR、ADRK、SBRK和MAR。

     LAR:

装载AR;

     ADRK:

从AR中加上一个立即数;

     SBRK:

从AR中减去一个立即数;

     MAR:

使AR值增加/减少1或增加/减少一个索引量。

例:

①不加也不减的间接寻址指令

ADD*,8;将当前AR指定的DM单元的值向左移8位后加到ACC中

例:

②加1的间接寻址指令

ADD*+,8,AR4;将当前AR指定的DM单元的值向左移8位后加到;ACC中,当前AR加1,且AR4变为下一AR

3汇编指令集

3.1ABS累加器取绝对值

语法:

ABS

说明:

计算ACC的绝对值,进位位C置0。

指令受OVM状态标志位的影响,执行结果影响C和OV。

如果ACC的内容大于或等于0,执行指令后其内容不变;若累加器内容小于0,执行指令后用其对2的补码数(即它的绝对值)取代原来的值。

ACC=80000000h时为特殊情况,若OVM=0,对80000000h取绝对值(执行ABS指令)的结果是80000000h;若OVM=1,对80000000h取绝对值的结果是7FFFFFFFh,无论哪种情况下,状态位OV都置1。

例如:

ABS;(OVM=0)

 

3.2ADD累加器加

ADD指令执行的操作是将数据存储器单元的数或立即数左移后加至累加器(移位时受SXM影响)。

结果存在累加器中。

寻址短立即数时,加操作不受SXM的影响,且不能重复执行,不支持移位。

语法:

ADDdma[,shift];shift=0~16直接寻址

ADDdma,16左移16位直接寻址

ADDind[,shift[,ARn]]间接寻址

ADDind,16[,ARn]左移16位间接寻址

ADD#k;8位短立即数短立即数寻址

ADD#1k[,shift]长立即数寻址

说明:

被寻址的数据单元的内容或一个立即数左移后加到累加器,在移位时低位填0。

如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位填0。

如果采用间接寻址并更新ARP的值,此时必须指定一个shift(移位)操作数。

如果不希望产生移位,则将0作为操作数,例如ADD*+,0,AR2。

通常,如果相加的结果产生进位时,C=1;不产生进位时,C=0。

但是,当左移16位进行相加时,如果相加的结果产生进位,则C=1;不产生进位时,则C不受影响。

这样,在把32位数加到累加器时,可使累加器产生正确的符号进位。

1)ADD1,1;DP=6:

地址0300h-037Fh

2)ADD*+,0,AR0

 

3)ADD#1h;加短立即数

4)ADD#1111h,2;长立即数1111h左移2位后与ACC相加,            ;结果存在ACC

执行前

执行后

ACC

x

2h

ACC

0

4446h

C

C

3.3ADDC带进位的累加器加

语法:

ADDCdma直接寻址

ADDCind[,ARn]间接寻址

说明:

将数据存储单元的内容和进位位C的值加到累加器中,符号不扩展,进位位受正常方式影响。

指令受OVM位影响,执行指令的结果影响C和OV。

1)ADDC0;DP=6:

地址0300h-037Fh

2)ADDC*-,AR4;OVM=0

3.4ADDS符号扩展抑制的累加器加

语法:

ADDSdma 直接寻址

ADDSind[,ARn]间接寻址

说明:

将被寻址的数据单元中的内容加到累加器,抑制符号扩展。

无论SXM为何值,数据存储单元中的数据均被看作一个无符号的16位数。

ADDS指令产生的结果与SXM=0、移位数为0的ADD指令产生的结果相同,若相加结果产生进位时C=1;否则C=0。

1)ADDS0;DP=6:

地址0300h-037Fh

2)ADDS*

3.5ADDTTREG指定移位的累加器加

语法:

ADDTdma直接寻址

ADDTind[,ARn]间接寻址

说明:

将数据存储单元的内容左移后加到累加器中,左移的位数由TREG的低4位(0-15)确定。

数据存储单元中数据的符号扩展受SXM控制。

指令受SXM和OVM位影响,执行结果影响C和OV。

1)ADDT127;DP=4:

地址0200h-027Fh;SXM=0

2)ADDT*-,AR4;SXM=0

3.6ADRK辅助寄存器加短立即数

语法:

ADRK#k短立即数寻址

说明:

8位正整数按右对齐方式加到当前辅助寄存器中,当前辅助寄存器由ARP指定。

对辅助寄存器的所有运算都是无符号数运算。

例子:

ADRK#80h

3.7AND和累加器进行与操作

语法:

ANDdma直接寻址

ANDind[,ARn]间接寻址

AND#1k[,shift]长立即数寻址

AND#1k,16左移16位的长立即数寻址

说明:

如果是直接或间接寻址,数据存储单元中的数和累加器的低16位进行与运算,结构放在累加器的低16位,累加器的高16位清0。

如果是立即数寻址,长立即数可以被左移,没有被移位数填满的高位和低位均填0,移位结果与累加器的内容逻辑与。

指令不受SXM位影响。

【例1】AND#00FFh,4

【例2】AND16;DP=4:

地址0200h-027Fh

【例3】AND*

3.8APACPREG加到累加器

语法:

APAC

说明:

PREG寄存器的内容移位后加到累加器,移位的位数由状态寄存器ST1中的PM位确定。

指令不受SXM位影响,PREG总是进行符号扩展。

指令受PM和OVM位影响,结果影响C和OV。

【例3-31】APAC;PM=01

3.9B无条件跳转

语法:

Bpma[,ind[,ARn]]间接寻址

说明:

程序跳转到pma指定的地址,并根据指令修改当前辅助寄存器(AR)和ARP。

pma值既可以是一个符号,也可是一个数字地址。

【例3-32】B191,*+,AR1

将191加载到程序计数器,并且程序从该地址继续执行,当前辅助寄存器加1,并且ARP被设置为指向辅助寄存器1(AR1)。

3.10BACC跳转到累加器指定的地址

语法:

BACC

说明:

程序跳转到累加器低16位所指定的地址。

【例3-33】BACC;ACC低16位为191

将数值191加到程序计数器,并且程序从该地址继续执行。

3.11BANZ辅助寄存器非0跳转

语法:

BANZpma[,ind[,ARn]]间接寻址

说明:

如果当前辅助寄存器的值(AR)不为0,则程序跳转到pma指定的地址,否则执行下一条指令。

根据指令修改当前辅助寄存器(AR)和ARP。

缺省时,当前辅助寄存器减1。

该指令常用于控制循环体的执行,如果要使循环体执行N次,则可在循环体执行前将用于计数的辅助寄存器初始化为N-1。

pma值既可以是一个符号,也可以是一个数字地址。

【例3-34】BANZPGM0;PGM0为标号

因为AR0的内容不为0,则PGM0给定的地址加载到程序计数器(PC),程序从该处运行。

对当前AR减1,变为4h。

因为AR0的内容为0,所以不跳转,而是将PC加2,即继续执行BANZ后面的指令。

当前AR减1,变为FFFFh。

【例3-35】编制一个循环体程序,将数据存储单元0060h-0063h的内容加到累加器中。

MAR*,AR0

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

当前位置:首页 > 工程科技 > 电子电路

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

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