第 4 章 TMS320C54x 汇编指令系统
description
Transcript of 第 4 章 TMS320C54x 汇编指令系统
第 4 章 TMS320C54x 汇编指令系统
4.1 指令系统中的符号和缩写
4.2 指令系统
4.1 指令系统中的符号和缩写表 4-1 指令系统中的符号和缩写
返回首页
返回本节
4.2 指令系统
4.2.1 算术运算指令
4.2.2 逻辑运算指令
4.2.3 程序控制指令
4.2.4 加载和存储指令
返回首页
4.2.1 算术运算指令
C54x 的算术运算指令包括加法指令、减法指令、乘法指令、乘累加指令与乘法减法指令、双字 /双精度运算指令及专用指令。分别如表 4-2 、表4-3 、表 4-4 、表 4-5 、表 4-6 、表 4-7 所示。
指令中表示整数时,有有符号数和无符号数两种格式。 TMS320C54x 提供了多条用于加法的指令,如ADD 、 ADDC 、 ADDM 和 ADDS ,具体说明见表 4-2
1) 加法指令
ADD 指令有 10 种句法。如果目的累加器dst 被指定,则结果存放在 dst 中;如果没有被指定,则结果存放在源累加器 src 中。移位操作数的范围为 ?16≤SHIFT≤15 , 0≤SHFT≤15 。正数为左移位,左移位低位添 0 ,高位受 SXM 位影响。如果 SXM= 1 ,则高位进行符号扩展;如果 SXM = 0 ,则高位清零。负数为右移位,受 SXM 位影响。如果SXM = 1 ,则高位进行符号扩展;如果 SXM = 0 ,则高位清零。
表 4-2 加法指令
【例 1 】 ADD *AR3+ , 14 , A
指令执行前 指令执行后
A 00 0000 1200H A 00 0540 1200H
C 1 C 0
AR3 0100H AR3 0101H
SXM 1 SXM 1
数据存储器
0100H 1500H 0100H 1500H
【例 2 】 ADD A , -8 ,B
指令执行前 指令执行后
A 00 0540 1200H A 00 0540 1200H
B 00 0000 1800H B 00 0005 5812H
C 1 C 0
【例 3 】 ADD #4568H , 8 , A , B
指令执行前 指令执行后
A 00 0000 1200H A 00 0000 1200H
B 00 0000 1800H B 00 0045 7A00H
C 1 C 0
【例 4 】 ADDC *+AR2(5) , A ;不受 SXM 位影响
指令执行前 指令执行后
A 00 0000 0030H A 00 0000 0045H
C 1 C 0
AR2 0100H AR2 0105H
数据存储器
0100H 0000H 0100H 0000H
0105H 0014H 0105H 0014H
【例 5 】 ADDM #123BH , *AR4+ ;该指令不能循环执行
指令执行前 指令执行后
AR4 0100H AR4 0101H
数据存储器
0100H 0014H 0100H 124FH
【例 6 】 ADDM #0F088H , *AR2+
指令执行前 指令执行后
VOM 1 VOM 1
SXM 1 SXM 1
AR2 0105H AR2 0106H
数据存储器
0105H 8007H 0105H 8000H
【例 7 】 ADDS *AR2- , B ;无论SXM 为何值,都不进行符号扩展
指令执行前 指令执行后
B 00 0000 0003H B 00 0000 F004H
C x C 0
AR2 0106H AR2 0105H
数据存储器
0106H F001H 0106H F001H
2) 减法指令
TMS320C54x 中 减 法 指 令 有 许 多 , 如SUB 、 SUBB 、 SUBC 和 SUBS ,具体说明见表4-3 。其中, SUBS 是无符号数的减法运算, SUBB是带借位的减法运算,而 SUBC 是含条件的移位减。在 TMS320C54x 中,没有专门的除法指令,要实现除法运算一般有两种方法:一种方法是用乘法进行,如要除以某个数,可以先求出该数的倒数,再乘以其倒数;另一种方法是用 SUBC 指令,再重复 16 次减法运算,可实现两个无符号数的除法运算。减法指令中状态位与加法指令中的基本相同。
表 4-3 减法指令
【例 8 】 SUB #12345 , 8 , A , B
指令执行前 指令执行后
A 00 0000 1200H A 00 0000 1200H
B 00 0000 1800H B FF FFCF D900H
C X C 0
SXM 1 SXM 1
【例 9 】
LD #8 , DP ;使页面指针 DP = 8
LD #0006H , A ;加载 A 累加器 SSBX C ;置借位位 C 为 1
SUBB @5 , A ;完成带借位的减法运算。 数据地址= 0405H ,为直接寻址
指令执行前 指令执行后
A 00 0000 0006H A FF FFFF FFFEH
C 1 C 0
DP 008H DP 008H
数据存储器
0405H 0008H 0405H 0008H
3) 乘法指令
TMS320C54x 中有大量的乘法运算指令,其结果都是 32 位,放在 A 或 B 累加器中,如表 4-4 所示。乘数在 TMS320C54x 的乘法指令中的使用很灵活,可以是 T 寄存器、立即数、存储单元以及 A 或 B 累加器的高 16 位。如果是无符号数相乘,则使用一条专用于无符号数相乘的指令,即 MPYU 指令,其他指令都是有符号数的乘法。
表 4-4 乘法指令
【例 10 】 实现整数乘法。
LD #0030H , A ;将 0030H 装入累加器 A
STM #0100H , AR2 ; AR2 = 0100H
ST #2000H , *AR2 ; (AR2) = 2000H
RSBX FRCT ;清 FTCT 标志位,准备整数乘 LD #2 , DP ; DP = 002H
LD 0 , T ;将 AR2 中的内容 2000H 装入 T寄存器
MPY #-2 , A ;完成 2000H 与 0FFFEH 相乘,结果
放入 A 累加器 (32 位 ) , ; A = FF FFFF C000H
4) 乘加和乘减指令
乘加指令完成一个乘法运算,将乘积再与源累加器的内容相加。指令中使用 R 后缀的,其运算结果要进行凑整。
乘减指令完成从累加器 B 或源累加器 src 或目的累加器 dst 中减去 T 寄存器或一个操作数与另一个操作数的乘积,结果存放在累加器 B 或dst 或 src 中。表 4-5 是对乘加、乘减指令的说明。
表 4-5 乘加和乘减指令
【例 11 】 MAC #345H , A , B
指令执行前 指令执行后
A 00 0000 1000H A 00 0000 1000H
B 00 0000 0000H B 00 000D 2400H
T 0400H T 0400H
FRCT 0 FRCT 0
【例 12 】 MAC #345H , A , B
指令执行前 指令执行后
A 00 0000 1000H A 00 0000 1000H
B 00 0000 0000H B 00 001A 3800H
T 0400H T 0400H
FRCT 1 FRCT 1
【例 13 】 MACR *AR3+ , *AR4+ , A , B
指令执行前 指令执行后
A 00 0000 1000H A 00 0000 1000H
B 00 0000 0004H B 00 0C4C 0000H
T 0008H T 5678H
FRCT 1 FRCT 1
AR3 0100H AR3 0101H
AR4 0200H AR4 0201H
数据存储器
0100H 5678H 0100H 5678H
0200H 1234H 0200H 1234H
【例 14 】 MACSU *AR3+ , *AR4+ , A
指令执行前 指令执行后
A 00 0000 1000H A 00 09A0 AA84H
T 0008H T 8765H
FRCT 0 FRCT 0
AR3 0100H AR3 0101H
AR4 0200H AR4 0201H
数据存储器
0100H 8765H 0100H 8765H
0200H 1234H 0200H 1234H
【例 15 】 MAS *AR3+ , *AR4+ , A , B
指令执行前 指令执行后
A 00 0000 1000H A 00 0000 1000H
B 00 0000 0004H B FF F3B4 0F40H
T 0008H T 5678H
FRCT 1 FRCT 1
AR3 0100H AR3 0101H
AR4 0200H AR4 0201H
数据存储器
0100H 5678H 0100H 5678H
0200H 1234H 0200H 1234H
表 4-6 双精度( 32 位操作数)指令
表 4-7 专用指令
返回本节
4.2.2 逻辑运算指令
逻辑指令包括与、或、异或(按位)、移位和测试指令,分别如表 4-8 、表 4-9 、表 4-10 、表 4-11 、表 4-12 所示。
表 4-8 与逻辑运算指令
表 4-9 或逻辑运算指令
表 4-10 异或逻辑运算指令
表 4-11 移位逻辑运算指令
表 4-12 测试指令
返回本节
4.2.3 程序控制指令
程序控制指令包括分支转移指令、子程序调用指令、中断指令、返回指令、重复指令、堆栈操作指令及混合程序控制指令,分别如表 4-13 、表 4-14 、表 4-15 、表 4-16 、表 4-17 、表 4-18 及表4-19 所示。
表 4-13 分支转移指令
表 4-14 子程序调用指令
表 4-15 中断指令
表 4-16 返回指令
表 4-17 重复指令
表 4-18 堆栈操作指令
表 4-19 混合程序控制指令
返回本节
4.2.4 加载和存储指令
加载和存储指令包括加载指令、存储指令、条件存储指令、并行加载和存储指令、并行加载和乘法指令、并行存储和加 / 减法指令、混合加载和存储指令,分别如表 4-20 、表 4-21 、表 4-22 、表 4-23 、表 4-24 、表 4-25 、表 4-26 及表 4-27所示。加载指令是将存储器内容或立即数赋给目的寄存器;存储指令是把源操作数或立即数存入存储器或寄存器。
表 4-20 加载指令
表 4-21 存储指令
表 4-22 条件存储指令
表 4-23 并行加载和存储指令
表 4-24 并行加载和乘法指令
表 4-25 并行存储和加 / 减法指令
表 4-26 并行存储和乘法指令
表 4-27 混合加载和存储指令(数据块传送指令)
返回本节