600 likes | 776 Views
第 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 算术运算指令.
E N D
第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所示。
1) 加法指令 指令中表示整数时,有有符号数和无符号数两种格式。TMS320C54x提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS,具体说明见表4-2
ADD指令有10种句法。如果目的累加器dst被指定,则结果存放在dst中;如果没有被指定,则结果存放在源累加器src中。移位操作数的范围为?16≤SHIFT≤15,0≤SHFT≤15。正数为左移位,左移位低位添0,高位受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。负数为右移位,受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。ADD指令有10种句法。如果目的累加器dst被指定,则结果存放在dst中;如果没有被指定,则结果存放在源累加器src中。移位操作数的范围为?16≤SHIFT≤15,0≤SHFT≤15。正数为左移位,左移位低位添0,高位受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。负数为右移位,受SXM位影响。如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位清零。
指令执行前 指令执行后 A 00 0000 1200H A 00 0540 1200H C 1 C 0 AR3 0100H AR3 0101H SXM 1 SXM 1 数据存储器 0100H 1500H 0100H 1500H • 【例1】 ADD *AR3+,14,A
指令执行前 指令执行后 A 00 0540 1200H A 00 0540 1200H B 00 0000 1800H B 00 0005 5812H C 1 C 0 • 【例2】 ADD A,-8,B
指令执行前 指令执行后 A 00 0000 1200H A 00 0000 1200H B 00 0000 1800H B 00 0045 7A00H C 1 C 0 • 【例3】 ADD #4568H,8,A,B
指令执行前 指令执行后 A 00 0000 0030H A 00 0000 0045H C 1 C 0 AR2 0100H AR2 0105H 数据存储器 0100H 0000H 0100H 0000H 0105H 0014H 0105H 0014H • 【例4】 ADDC *+AR2(5),A ;不受SXM位影响
指令执行前 指令执行后 AR4 0100H AR4 0101H 数据存储器 0100H 0014H 0100H 124FH • 【例5】 ADDM #123BH,*AR4+ ;该指令不能循环执行
指令执行前 指令执行后 VOM 1 VOM 1 SXM 1 SXM 1 AR2 0105H AR2 0106H 数据存储器 0105H 8007H 0105H 8000H • 【例6】 ADDM #0F088H,*AR2+
指令执行前 指令执行后 B 00 0000 0003H B 00 0000 F004H C x C 0 AR2 0106H AR2 0105H 数据存储器 0106H F001H 0106H F001H • 【例7】 ADDS *AR2-,B ;无论SXM为何值,都不进行符号扩展
2) 减法指令 • TMS320C54x 中减法指令有许多,如SUB、SUBB、SUBC和SUBS,具体说明见表4-3。其中,SUBS是无符号数的减法运算,SUBB是带借位的减法运算,而SUBC是含条件的移位减。在TMS320C54x中,没有专门的除法指令,要实现除法运算一般有两种方法:一种方法是用乘法进行,如要除以某个数,可以先求出该数的倒数,再乘以其倒数;另一种方法是用SUBC指令,再重复16次减法运算,可实现两个无符号数的除法运算。减法指令中状态位与加法指令中的基本相同。
指令执行前 指令执行后 A 00 0000 1200H A 00 0000 1200H B 00 0000 1800H B FF FFCF D900H C X C 0 SXM 1 SXM 1 • 【例8】 SUB #12345,8,A,B
【例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指令,其他指令都是有符号数的乘法。
【例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是对乘加、乘减指令的说明。
指令执行前 指令执行后 A 00 0000 1000H A 00 0000 1000H B 00 0000 0000H B 00 000D 2400H T 0400H T 0400H FRCT 0 FRCT 0 • 【例11】 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 • 【例12】 MAC #345H,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 • 【例13】 MACR *AR3+,*AR4+,A,B
指令执行前 指令执行后 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 • 【例14】 MACSU *AR3+,*AR4+,A
指令执行前 指令执行后 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 • 【例15】 MAS *AR3+,*AR4+,A,B
表4-7 专用指令 返回本节
4.2.2 逻辑运算指令 • 逻辑指令包括与、或、异或(按位)、移位和测试指令,分别如表4-8、表4-9、表4-10、表4-11、表4-12所示。
表4-12 测试指令 返回本节
4.2.3 程序控制指令 • 程序控制指令包括分支转移指令、子程序调用指令、中断指令、返回指令、重复指令、堆栈操作指令及混合程序控制指令,分别如表4-13、表4-14、表4-15、表4-16、表4-17、表4-18及表4-19所示。