附录6 TMS320C54x 指令系统一览
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
(按指令功能排列)
一、算术运算指令
1. 加法指令
句 法
表 达 式
说 明
字数
周期
ADD Smem,src
src=src+Smem
操作数加至累加器
1
1
ADD Smem,TS,src
src=src+Smem<
src(15—0)
then Smem=src(31—16)
If src(31—16)≤src(15—0)
then Smem=src(15—0)
比较选择并存储最大值
1
1
SACCD src,Xmem,cond
If(cond) Xmem=src<<(ASM—16)
有条件存储累加器值
1
1
SRCCD Xmem,cond
If(cond) Xmem=BRC
有条件存储块重复计数器
1
1
STRCD Xmem,cond
If(cond) Xmem=T
有条件存储T寄存器值
1
1
4. 并行加载和存储指令
句 法
表 达 式
说 明
字数
周期
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行加载累加器
1
1
||LD Xmem,dst
||dst=Xmem<<16
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行加载T寄存器
1
1
||LD Xmem,T
||T=Xmem
5. 并行加载和乘法指令
句 法
表 达 式
说 明
字数
周期
LD Xmem,dst
dst=Xmem<<16
加载累加器并行乘法累加运算
1
1
||MAC Ymem,dst_
||dst_=dst_+T*Ymem
LD Xmem,dst
dst=Xmem<<16
加载累加器并行乘法累加运算(带舍入)
1
1
||MACR Ymem,dst_
||dst_=rnd(dst_+T*Ymem)
LD Xmem,dst
dst=Xmem<<16
加载累加器并行乘法减法运算
1
1
||MAS Ymem,dst_
||dst_=dst_—T*Ymem
LD Xmem,dst
dst=Xmem<<16
加载累加器并行乘法减法运算(带舍入)
1
1
||MASR Ymem,dst_
||dst_=rnd(dst_—T*Ymem)
6. 并行存储和加 / 减法指令
句 法
表 达 式
说 明
字数
周期
ST src,Ymem
||ADD Xmem,dst
Ymem=src<<(ASM—16)
||dst=dst_+Xmem<<16
存储累加器值并行加法运算
1
1
ST src,Ymem
||SUB Xmem,dst
Ymem=src<<(ASM—16)
||dst=(Xmem<<16)—dst_
存储累加器值并行减法运算
1
1
7. 并行存储和乘法指令
句 法
表 达 式
说 明
字数
周期
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行乘法累加运算
1
1
||MAC Xmem,dst
||dst=dst+T*Xmem
ST src,Ymem
||MACR Xmem,dst
Ymem=src<<(ASM—16)
||dst=rnd(dst+T*Xmem)
存储累加器并行乘法累加运算(带舍入)
1
1
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行乘法减法运算
1
1
||MAS Xmem,dst
||dst=dst—T*Xmem
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行乘法减法运算(带舍入)
1
1
||MASR Xmem,dst
||dst=rnd(dst—T*Xmem)
ST src,Ymem
Ymem=src<<(ASM—16)
存储累加器并行乘法运算
1
1
||MPY Xmem,dst
||dst=T*Xmem
8. 其他加载和存储指令
句 法
表 达 式
说 明
字数
周期
MVDD Xmem,Ymem
Ymem=Xmem
数据存储器内部传送数据
1
1
MVDK Smem,dmad
dmad=Smem
数据存储器内部指定地址传送数据
2
2
MVDM dmad,MMR
MMR=dmad
数据存储器向MMR传送数据
2
2
MVDP Smem,pmad
pmad=Smem
数据存储器向程序存储器传送数据
2
4
MVKD dmad,Smem
Smem=dmad
数据存储器内部指定地址传送数据
2
2
MVMD MMR,dmad
dmad=MMR
MMR向指定地址传送数据
2
2
MVMM MMRx,MMRy
MMRy=MMRx
MMRx向MMRy传送数据
1
1
MVPD pmad,Smem
Smem=pmad
程序存储器向数据存储器传送数据
2
3
PORTR PA,Smem
Smem=PA
从PA口读入数据
2
2
PORTW Smem,PA
PA=Smem
向PA口输出数据
2
2
READA Smem
Smem=Pmem(A)
按累加器A寻址读程序存储器并存入数据存储器
1
5
WRITA Smem
Pmem(A)=Smem
将数据按累加器A寻址写入程序存储器
1
5
五.伪指令
1.定义段的伪指令
助记符和语法
说 明
.asect"section name",address
汇编至绝对命名(初始化)段(此段已过时)
.bss symbol, size in words [, blocking flag]
在.bss段(未被初始化数据段)保留size个字
.data
汇编至数据(初始化数据)段
.sect ”section name”
汇编至一个命名(已初始化)段
.text
汇编至.text可执行代码)段
symbol .usect “section name”, size in words,[blocking flag]
在1个命名段(未被初始化)保留.size个字
2.初始化常数(数据和存储器)的伪指令
助记符号和语法
说明
.bes size in bits
在当前段保留size位;标号指向保留间的末尾
.bfloat value
初始化一个32位,IEEE单精度浮点常数;不允许目标跨越业界.
.blong value1 [, ... , valuen ]
初始化一个或多个32位的整数;不允许目标跨越页边界
.byte value1 [, ... , valuen ]
在当前段初始化一个或多个连续字节
.field value [, size in bits]
初始化可变长度域
.float value
初始化一个32位,IEEE单精度浮点数
.int value1 [, ... , valuen ]
初始化1个或多个16位整数
.long value1 [, ... , valuen ]
初始化个或多个32位整数
.space size in bits
在半前段保留.size位;标号指向保留空间的末尾
.string ”string1” [, ... , ”stringn”]
初始化—个或多个.text串
.word value1 [, ... , valuen ]
初始化一个或多个16位整数
3.调整段程序计数器伪指令(SPC)
.align 把SPC调整到页边界
.even 把SPC调整到偶数字边界
4.控制输出列表格式化伪指令
.drlist
允许所有伪指令行的列出(默认)
.drnolist
禁止特定的伪指令行的列出
.fclist
允许列出度假条件代码块(默认)
.fcnolist
禁止列出虚假条件代码块
.length page length
设置源列表的页长度
.list
重启源列表
.mlist
允许列出宏列表和循环块(默认)
.mnolist
禁止列出宏列表和循环块
.nolist
停止源列表
.option {B|D|F|L|M|T|X}
选择输出列表选项
.page
在源列表中弹出页
.sslist
允许扩展替代符号列表
.ssnolist
禁止扩展替代符号列表(默认)
.tab size
设置列表符大小
.title ”string”
在列表页头部打印标题
.width page width
设置源列表的页宽度
.copy [”]filename[”]
从其他文件包含源语句
.def symbol1 [, ... , symboln ]
确认在当前模块定义并在其他模块中使用的一个或多个符号
.global symbol1 [, ... , symboln ]
标识一个或多个全局(外部)符号
.include [”]filename[”]
从其他文件包括源语句
.mlib [”]filename[”]
定义宏库
.ref symbol1 [, ... , symboln ]
确认一个或多个在当前模块中使用但在其他模块中定义的符号
5.条件汇编伪指令
.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项
.else 如果.if条件为假,汇编代码块.else结构是可选项
.elseif well-defined expression——如果if条件为假且.elseif条件为真,汇编代码块.else结构是可选项
.endif 结束.if代码块
.endloop 结束.1oop代码块
.if well-defined expression 如果条件为真则汇编代码块
.loop [well-defined expression] 开始代码块的重复汇编
6. 汇编符号
.asg [”] character string [”],substitution symbol—— 把字符串赋予替代的符号.
.endstruct 结束结构定义
.equ 使值和符号相等
.eval well-defined expression,substitution symbol 根据数字替代符号完成运算
.newblock 取消局部标号
.set 使数值和符号相等
.struct 开始结构定义
.tag 把结构属性赋予标号
7.宏指令
宏定义:Macname .macro[参数1],[…],[参数n]
宏调用:[标号][:] macname [参数1],[…],[参数n]
8.编译软件指令
①汇编器:
asm500.exe
asm500 [input file[object file [listing file] [-options]]
-c—使汇编语言文件中大小没有区别。缺损为区分大小写。
-i—为汇编源文件中引用的其他文件(例.copy, .include等引入的文件)指明路径。格式-i path name。
-q—抑制汇编的标题及所有的进程信息。
-s—把所有定义的符号放进目标文件的符号表中,一般汇编器只将全局符号放进符号表中,选用-s选项,所定义的标号以及汇编时定义的常数也都放进符号表内。
-x—产生一个交叉引用表,并将它附加到列表文件的最后,还在目标文件上加上交叉引用信息。
②链接器
lnk500.exe
lnk500
file1.obj… file.cmd –m file.map –o file.out –e global-symbol
-o –m –e—都是属于链接器选项,用来控制链接操作;链接器常用项选项包括:(选项都是加短划“-”)
-a—生成一个绝对地址的可执行输出模块,它不包含重新定位信息,如果缺省,链接器就像有-a那样处理;
-m—生成一个.map映象文件,filename是映象文件的文件名,.map文件中说明了存储器配置、输入、输出段的布局以及外部符号重定位之后的地址等;
-o—对可执行输出模块命名,如果缺省,则此文件名为a.out;
-e—定义一个全局符号,它是可执行文件中程序开始执行时的入口地址。当加载器把一个程序加载到目的存储器时,程序记数器(SPC)被初始化到入口地址,然后从这个地址开始执行程序;
-r—生成一个可重新定位的输出模块。当利用-r选项且不用-a选项时,链接器生成一个不可执行的文件,但这一文件可以与其他目标文件重新链 接,或者在加载时重新定位;
-ar—生成一个重新定位,可执行的目标模块,与-a选项相比,-ar选项还在输出文件中保留有重新定位信息。-ar也可以分开写成-a和-r。
9.其他伪指令
.emsg string 把用户定义的错误信息送到输出器件
.end 结束程序
.label symbol 在段中定义装载时可重定位标号
.mmregs 把存储器映射寄存器输入到符号表中
.mmsg string 把用户定义信息送到输出设备
.port 打开汇编器移植开关
.sblock ”section name” [,”section name”, . . . ] 为块指定段
.version generation #number 为块指定段
.wmsg string 将用户定义的警告信息送到输出设备
10.cmd文件
****************开始*********************
a.obj
b.obj
/*输入被链接的二个目标文件*/
-o prog.out
/*用-o选项列出名为prog的输出文件*/
-m prog.map
/*用-m选项生成名为prog的map文件*/
-e
start
/用-e要求程序的入口为start */
MEMORY
{PAGE 0 ROM: origin=1000h, length=0100h
PAGE 1 RAM: origin=0080h, length=0100h
}
SECTIONS
{
.text: >ROM
.data: >ROM
.bss : >RAM
}
*************结束***************
MEMORY伪指令的一般语法:
MEMORY
{
PAGE 0: name 1[(attr)]: origin=常数,length=常数
PAGE n: name n[(attr)]: origin=常数,length=常数
}
SECTIONS伪指令的一般语法:
SECTIONS
{
name: [property, property, property, …]
name: [property, property, property, …]
}