DSP的指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章
TMS320C55X的指令系统
汇编语言源文件的书写格式
TMS320的汇编程序包含
– 汇编伪指令(assembler directives)、 – 汇 编 语 言 指 令 ( assembly language instructions) – 宏指令(macro directives) – 注释(comments)
3. 寄存器位直接寻址
M Bitoffset: MSB ... ... 寄存器 M为39或15(根据不同的寄存器而定) LSB 11 10 9 8 7 6 5 4 3 2 1 0
操作数中的偏移@bitoffset是相对于寄存器最低
位来说的
仅有寄存器位测试/设置/清零/求补等指令支持这
种寻址方式
例: MAC *AR1+,*CDP,AC0 ::MAC *AR2+,*CDP,AC1
;AC0=AC0+(AR1)*(CDP), AR1=AR1+1 ; AC1=AC1+(AR2)*(CDP), AR2=AR2+1
3.2
TMS320C55x DSP的汇编指令
TMS320C55x指令集按操作类型可分为以 下6种:
SPH和SP合并后形成扩展数据堆栈指针(XSP)
–
2. SP寻址
例:BSET CPL .CPL_ON MOV MOV MOV MOV #01H,SPH #2000H,SP @2,T0 @12,AC1
;使CPL=1
;SPH=1 ;SP=2000H ;将(012002H)->T0 ;将(01200CH) ->AC1
*(ARn+T0B/AR0B)
Smem、Lmem、Baddr
*(ARn-T0B/AR0B)
Smem、Lmem、Baddr
*(ARn+T1) *(ARn-T1) *ARn(T1) *ARn(#K16)
Smem、Lmem、Baddr Smem、Lmem、Baddr Smem、Lmem、Baddr Smem、Lmem、Baddr
;将数据页1,地址200BH中的数据给AC1
例2:访问存储器映射寄存器
DPH=DP=0, CPL=0
• MOV mmap(@AC0L),AR2 • ;CPU从00 0008h处读取数据装入AR2
2. SP寻址
23位地址的形成
–
–
高7位由SPH提供 低16位为SP和一个7 位的偏移地址(offset)的和 可单独向SPH和SP赋值,也可使用一条指令向XSP 赋值
其中:k23是一个无符号的23位常数
例: MOV * (#012000h),T0 ;将( 012000h )->T0
MOV * (#01200Ah),AC1 ;将( 01200Ah )->AC1
3.1.1 绝对寻址
3. I/O绝对寻址
port(#k16) 其中,k16是一个16位无符号立即数 例:设A/D的端口地址为8F07H MOV port(#8F07h), T2 ;
AR间接寻址DSP模式
序 号 操作数 地址修改
1
2
*ARn
*ARn +
ARn未修改
在生成地址之后增加:16位操作,ARn =ARn + 1 32位操作,ARn =ARn + 2 在生成地址之后减少:16位操作,ARn =ARn1 32位操作,ARn =Arn2 在生成地址之前增加:16位操作,ARn =ARn + 1 32位操作,ARn =ARn + 2 在生成地址之前减少:16位操作,ARn =ARn1 32位操作,ARn =ARn2
寻址方式--间接寻址
ADD *(ARn+T0/T1/AR0),#8,ACx ;执 行加法后,将T0或AR0的值加给当前辅助寄 存器 ADD *ARn(#8),#8,ACx ; ARn基址 不变,加上以立即数8(偏移地址)作为地 址,对应地址里的数据左移8bit后加给ACx ADD *(ARn+T0B/AR0B),#8,ACx ; 执行加法后,将T0或AR0的值加给当前辅助 寄存器,但加法按位倒序进位规律相加
由8个辅助寄存器(AR0--AR7),以及一个
系数寄存器CDP来实现
1. AR间接寻址
• 使用辅助寄存器ARn(n=0~7)指向数据 • CPU使用ARn产生地址的方式取决于访问的数 据类型
表3-7 AR间接寻址方式时AR的内容
寻址空间 AR内容
数据空间(存储空间或寄存器) 23位地址的低16位,而高7位由ARnH提供 寄存器位或双位 I/O空间 位的相对位置 一个16位的I/O地址
3
4
*ARn
* + ARn
5
* ARn
6
在生成地址之后,ARn 加上T0或ARn 中16位带符 号的常数: *(ARn + T0/AR0) 如果C54CM = 0,ARn =ARn + T0 如果C54CM = 1,ARn =ARn + AR0
表3-9 DSP模式下的AR间接寻址模式(2)
操作数 *ARn(T0/AR0) 指针修改方式 ARn作为基地址不变,T0或AR0的值作为 偏移地址 地址产生后,指针的值变化: 如果C54CM=0,有ARn=ARn+T0; 如果C54CM=1,有ARn=ARn+AR0; 上述加法按位倒序进位规律进行相加 地址产生后,指针的值变化: 如果C54CM=0,有ARn=ARn-T0; 如果C54CM=1,有ARn=ARn-AR0; 上述加法按位倒序借位规律进行相加 地址产生后,指针的值为ARn= ARn+T1 地址产生后,指针的值为ARn= ARn-T1 ARn作为基地址不变,T1值作为偏移地址 ARn作为基地址不变,K16值作为偏移地址 地址产生前,指针的值变为 ARn=ARn+K16 访问数据类型 Smem、Lmem、Baddr
正向进位与反向进位
• • • • 100 + 100 ———— 1000 100 + 100 ———— 010
• AR0 = 100, AR1 = 000 • 按AR1寻址后,将AR0加给AR1,反向进位 原序
0
1
原址
000
001
位倒序后地址
000
100
序号
0
4
2
3 4
010
011 100
010
*+ARn(#K16)
Smem、Lmem、Baddr
寻址方式--间接寻址
ADD *ARn,#8,ACx ;将当前辅助寄 存器所指的地址里的数据,左移8-bit后 加给ACx
ADD *ARn+,#8,ACx ;数据左移8bit,加 给ACx后,当前辅助寄存器加1
ADD *ARn(T0/T1/AR0) ,#8,ACx ;以ARn为基 址不变,加上以T0、T1或AR0的值(偏移地址)作 为地址,寻找对应数据,左移8bit后与ACx的值相 加,结果给ACx 。
仅能访问下列寄存器的各位:AC0~AC3,AR0~
AR7,T0~T3 BSET @0,AC3 ; 将AC3的位0置为1 例:
4. PDP直接寻址
9位的外设数据页寄存器(PDP)
–
选取512个外设数据页(0~511)中的一页,每 页有128个字,由指令中的7 位偏移指定
指定要访问的是I/O空间,而不是数据存储单元 port()限定词的括号内是7 位的偏移(Poffset)
110 001
2
6 1
5
6 7
101
110 111
101
011 111
5
3 7
2. 双AR间接寻址方式
执行一个指令,同时访问两个16位数据存储器 ADD Xmem,Ymem,ACx 并行执行两个指令,每个指令访问一个数据存 储器 MOV Smem,dst‖AND Smem,src,dst
3.CDP间接寻址 4.系数间接寻址(CDP寄存器)
汇编语言源文件格式
[标号] [:]
例, SYM1 Begin:
助记符
[操作数]
[; 注释]
.set 2 ;SYM1 = 2 MOV #SYM1, AR1 ;AR1=2 .data .byte 016h ; 初始化(016h) 助记符 操作数 常数、符号、表 达式,操作数之 间用“,”分开 注 释
标
使用时必须用port( )限定词
– –
例:设A/D的端口地址为8F07H MOV #11EH,PDP ;设置数据页为11EH MOV port(@7),T2 ;将偏移地址为7的数据给T2
3.1.3 间接寻址
寻址方式 描 述 该模式使用 AR0~AR7 中的任一个寄存器访问数据。CPU 使用辅助寄存器产 AR 间接寻址 生地址的方式取决于访问数据的来源:数据空间、存储器映射寄存器、I/O 空 间或是独立的寄存器位 双 AR 间接寻址 该模式与单 AR 间接寻址相似,只是借助两个辅助寄存器,可以同时访问两个 或更多的数据 该模式使用系数数据指针(CDP)访问数据。CPU 使用 CDP 产生地址的方式 CDP 间接寻址 取决于访问数据的来源:数据空间、存储器映射寄存器、I/O 空间或是独立的 寄存器位 系数间接寻址 该模式与 CDP 间接寻址方式相似,它可以在访问数据空间某区块的数据的同 时,借助双 AR 间接寻址访问别的区块的两个数据
3.1.2 直接寻址
寻址方式 DP 直接寻址 SP 直接寻址 寄存器位直接寻址 PDP 直接寻址 描 述 该方式用 DPH 与 DP 合并的扩展数据页指针寻址存储空间和存 储器映射寄存器 该方式用 SPH 与 SP 合并的扩展堆栈指针寻址存储空间中堆栈 该模式用偏移地址指定一个位地址,用于寻址寄存器中的一个 或相邻的两个位 该模式使用 PDP 和一个偏移地址寻址 I/O 空间
0000 0000 0000 0000 主数据页127: 7F 0000h~7F .. FFFFh 1111 1111 1111 1111
CPU连接DPH和DP成为一个扩展数据页指针XDP 可以使用两条指令独立地装入DPH和DP 也可以使用一条指令装入XDP 计算偏移地址的方法:
访问空间 数据空间 偏移地址(Doffset)的计算 Doffset=(Daddr-.dp)& 7Fh Doffset=Daddr & 7Fh 描 述 Daddr 是一个 16 位的局部地址, .dp 指 DP 的值, “&”表示与操作 Daddr 是一个 16 位的局部地址, “&” 表示与操作,需要使用 mmap()指令
号
标号、空格 *,; 字母、数字、_、$
TMS320C55X的指令系统
• 3.1 寻址方式
–3.1.1 绝对寻址模式 –3.1.2 直接寻址模式 –3.1.3 间接寻址模式
• 3.2
C55X的指令系统
3.1.1 绝对寻址
1. k16绝对寻址
*abs16(#k16) •k16是一个16位无符号常数
算术运算指令 位操作指令 扩展辅助寄存器操作指令 逻辑运算指令 移动指令 程序控制指令
一、算术运算指令
用于完成加减乘除等运算,按照功能可分成以下几类:
• 加法指令 • 减法指令:减法,条件减法,条件加/减 • 乘法指令:乘法,乘加,乘减,双乘加/减 • 双16比特算术指令
• 比较运算指令:比较并求极值,最大/最小值,存储单元比较,寄存
存储器映射寄存器
1. DP直接寻址
• 例1:访问数据存储空间
BCLR CPL .CPL_OFF
;使CPL=0 ;指向数据页1,DP=0 ;告诉汇编器DP=2000h
AMOV #012000H,XDP .dp #2000h
MOV @1H,T0
MOV @BH,AC1
;将数据页1,地址2001H中的数据给T0
•地址的高7位有DPH 寄存器提供
例: MOV #01H, DPH ; DPH=1 MOV *abs16(#2000h), T0 ;将(01 2000h)->T0 MOV *abs16(#200Ah),AC1 ;将(01 200Ah)->AC1
3.1.1 绝对寻址
2. k23绝对寻址
*(#k23)
ST1_55中的CPL位决定使用DP还是SP CPL=0 数据页指针DP CPL=1 堆栈指针SP
1. DP寻址
DPH
000 0000 . 000 0000 000 0001 . 000 0001 .. 111 1111 .. 111 1111
DP+Doffset
数据空间
0000 0000 0000 0000 . 主数据页0: 00 0000h~00 FFFFh 1111 1111 1111 1111 0000 0000 0000 0000 . 主数据页1: 01 0000h~01 FFFFh 1111 1111 1111 1111 .. . .. .
TMS320C55X的指令系统
汇编语言源文件的书写格式
TMS320的汇编程序包含
– 汇编伪指令(assembler directives)、 – 汇 编 语 言 指 令 ( assembly language instructions) – 宏指令(macro directives) – 注释(comments)
3. 寄存器位直接寻址
M Bitoffset: MSB ... ... 寄存器 M为39或15(根据不同的寄存器而定) LSB 11 10 9 8 7 6 5 4 3 2 1 0
操作数中的偏移@bitoffset是相对于寄存器最低
位来说的
仅有寄存器位测试/设置/清零/求补等指令支持这
种寻址方式
例: MAC *AR1+,*CDP,AC0 ::MAC *AR2+,*CDP,AC1
;AC0=AC0+(AR1)*(CDP), AR1=AR1+1 ; AC1=AC1+(AR2)*(CDP), AR2=AR2+1
3.2
TMS320C55x DSP的汇编指令
TMS320C55x指令集按操作类型可分为以 下6种:
SPH和SP合并后形成扩展数据堆栈指针(XSP)
–
2. SP寻址
例:BSET CPL .CPL_ON MOV MOV MOV MOV #01H,SPH #2000H,SP @2,T0 @12,AC1
;使CPL=1
;SPH=1 ;SP=2000H ;将(012002H)->T0 ;将(01200CH) ->AC1
*(ARn+T0B/AR0B)
Smem、Lmem、Baddr
*(ARn-T0B/AR0B)
Smem、Lmem、Baddr
*(ARn+T1) *(ARn-T1) *ARn(T1) *ARn(#K16)
Smem、Lmem、Baddr Smem、Lmem、Baddr Smem、Lmem、Baddr Smem、Lmem、Baddr
;将数据页1,地址200BH中的数据给AC1
例2:访问存储器映射寄存器
DPH=DP=0, CPL=0
• MOV mmap(@AC0L),AR2 • ;CPU从00 0008h处读取数据装入AR2
2. SP寻址
23位地址的形成
–
–
高7位由SPH提供 低16位为SP和一个7 位的偏移地址(offset)的和 可单独向SPH和SP赋值,也可使用一条指令向XSP 赋值
其中:k23是一个无符号的23位常数
例: MOV * (#012000h),T0 ;将( 012000h )->T0
MOV * (#01200Ah),AC1 ;将( 01200Ah )->AC1
3.1.1 绝对寻址
3. I/O绝对寻址
port(#k16) 其中,k16是一个16位无符号立即数 例:设A/D的端口地址为8F07H MOV port(#8F07h), T2 ;
AR间接寻址DSP模式
序 号 操作数 地址修改
1
2
*ARn
*ARn +
ARn未修改
在生成地址之后增加:16位操作,ARn =ARn + 1 32位操作,ARn =ARn + 2 在生成地址之后减少:16位操作,ARn =ARn1 32位操作,ARn =Arn2 在生成地址之前增加:16位操作,ARn =ARn + 1 32位操作,ARn =ARn + 2 在生成地址之前减少:16位操作,ARn =ARn1 32位操作,ARn =ARn2
寻址方式--间接寻址
ADD *(ARn+T0/T1/AR0),#8,ACx ;执 行加法后,将T0或AR0的值加给当前辅助寄 存器 ADD *ARn(#8),#8,ACx ; ARn基址 不变,加上以立即数8(偏移地址)作为地 址,对应地址里的数据左移8bit后加给ACx ADD *(ARn+T0B/AR0B),#8,ACx ; 执行加法后,将T0或AR0的值加给当前辅助 寄存器,但加法按位倒序进位规律相加
由8个辅助寄存器(AR0--AR7),以及一个
系数寄存器CDP来实现
1. AR间接寻址
• 使用辅助寄存器ARn(n=0~7)指向数据 • CPU使用ARn产生地址的方式取决于访问的数 据类型
表3-7 AR间接寻址方式时AR的内容
寻址空间 AR内容
数据空间(存储空间或寄存器) 23位地址的低16位,而高7位由ARnH提供 寄存器位或双位 I/O空间 位的相对位置 一个16位的I/O地址
3
4
*ARn
* + ARn
5
* ARn
6
在生成地址之后,ARn 加上T0或ARn 中16位带符 号的常数: *(ARn + T0/AR0) 如果C54CM = 0,ARn =ARn + T0 如果C54CM = 1,ARn =ARn + AR0
表3-9 DSP模式下的AR间接寻址模式(2)
操作数 *ARn(T0/AR0) 指针修改方式 ARn作为基地址不变,T0或AR0的值作为 偏移地址 地址产生后,指针的值变化: 如果C54CM=0,有ARn=ARn+T0; 如果C54CM=1,有ARn=ARn+AR0; 上述加法按位倒序进位规律进行相加 地址产生后,指针的值变化: 如果C54CM=0,有ARn=ARn-T0; 如果C54CM=1,有ARn=ARn-AR0; 上述加法按位倒序借位规律进行相加 地址产生后,指针的值为ARn= ARn+T1 地址产生后,指针的值为ARn= ARn-T1 ARn作为基地址不变,T1值作为偏移地址 ARn作为基地址不变,K16值作为偏移地址 地址产生前,指针的值变为 ARn=ARn+K16 访问数据类型 Smem、Lmem、Baddr
正向进位与反向进位
• • • • 100 + 100 ———— 1000 100 + 100 ———— 010
• AR0 = 100, AR1 = 000 • 按AR1寻址后,将AR0加给AR1,反向进位 原序
0
1
原址
000
001
位倒序后地址
000
100
序号
0
4
2
3 4
010
011 100
010
*+ARn(#K16)
Smem、Lmem、Baddr
寻址方式--间接寻址
ADD *ARn,#8,ACx ;将当前辅助寄 存器所指的地址里的数据,左移8-bit后 加给ACx
ADD *ARn+,#8,ACx ;数据左移8bit,加 给ACx后,当前辅助寄存器加1
ADD *ARn(T0/T1/AR0) ,#8,ACx ;以ARn为基 址不变,加上以T0、T1或AR0的值(偏移地址)作 为地址,寻找对应数据,左移8bit后与ACx的值相 加,结果给ACx 。
仅能访问下列寄存器的各位:AC0~AC3,AR0~
AR7,T0~T3 BSET @0,AC3 ; 将AC3的位0置为1 例:
4. PDP直接寻址
9位的外设数据页寄存器(PDP)
–
选取512个外设数据页(0~511)中的一页,每 页有128个字,由指令中的7 位偏移指定
指定要访问的是I/O空间,而不是数据存储单元 port()限定词的括号内是7 位的偏移(Poffset)
110 001
2
6 1
5
6 7
101
110 111
101
011 111
5
3 7
2. 双AR间接寻址方式
执行一个指令,同时访问两个16位数据存储器 ADD Xmem,Ymem,ACx 并行执行两个指令,每个指令访问一个数据存 储器 MOV Smem,dst‖AND Smem,src,dst
3.CDP间接寻址 4.系数间接寻址(CDP寄存器)
汇编语言源文件格式
[标号] [:]
例, SYM1 Begin:
助记符
[操作数]
[; 注释]
.set 2 ;SYM1 = 2 MOV #SYM1, AR1 ;AR1=2 .data .byte 016h ; 初始化(016h) 助记符 操作数 常数、符号、表 达式,操作数之 间用“,”分开 注 释
标
使用时必须用port( )限定词
– –
例:设A/D的端口地址为8F07H MOV #11EH,PDP ;设置数据页为11EH MOV port(@7),T2 ;将偏移地址为7的数据给T2
3.1.3 间接寻址
寻址方式 描 述 该模式使用 AR0~AR7 中的任一个寄存器访问数据。CPU 使用辅助寄存器产 AR 间接寻址 生地址的方式取决于访问数据的来源:数据空间、存储器映射寄存器、I/O 空 间或是独立的寄存器位 双 AR 间接寻址 该模式与单 AR 间接寻址相似,只是借助两个辅助寄存器,可以同时访问两个 或更多的数据 该模式使用系数数据指针(CDP)访问数据。CPU 使用 CDP 产生地址的方式 CDP 间接寻址 取决于访问数据的来源:数据空间、存储器映射寄存器、I/O 空间或是独立的 寄存器位 系数间接寻址 该模式与 CDP 间接寻址方式相似,它可以在访问数据空间某区块的数据的同 时,借助双 AR 间接寻址访问别的区块的两个数据
3.1.2 直接寻址
寻址方式 DP 直接寻址 SP 直接寻址 寄存器位直接寻址 PDP 直接寻址 描 述 该方式用 DPH 与 DP 合并的扩展数据页指针寻址存储空间和存 储器映射寄存器 该方式用 SPH 与 SP 合并的扩展堆栈指针寻址存储空间中堆栈 该模式用偏移地址指定一个位地址,用于寻址寄存器中的一个 或相邻的两个位 该模式使用 PDP 和一个偏移地址寻址 I/O 空间
0000 0000 0000 0000 主数据页127: 7F 0000h~7F .. FFFFh 1111 1111 1111 1111
CPU连接DPH和DP成为一个扩展数据页指针XDP 可以使用两条指令独立地装入DPH和DP 也可以使用一条指令装入XDP 计算偏移地址的方法:
访问空间 数据空间 偏移地址(Doffset)的计算 Doffset=(Daddr-.dp)& 7Fh Doffset=Daddr & 7Fh 描 述 Daddr 是一个 16 位的局部地址, .dp 指 DP 的值, “&”表示与操作 Daddr 是一个 16 位的局部地址, “&” 表示与操作,需要使用 mmap()指令
号
标号、空格 *,; 字母、数字、_、$
TMS320C55X的指令系统
• 3.1 寻址方式
–3.1.1 绝对寻址模式 –3.1.2 直接寻址模式 –3.1.3 间接寻址模式
• 3.2
C55X的指令系统
3.1.1 绝对寻址
1. k16绝对寻址
*abs16(#k16) •k16是一个16位无符号常数
算术运算指令 位操作指令 扩展辅助寄存器操作指令 逻辑运算指令 移动指令 程序控制指令
一、算术运算指令
用于完成加减乘除等运算,按照功能可分成以下几类:
• 加法指令 • 减法指令:减法,条件减法,条件加/减 • 乘法指令:乘法,乘加,乘减,双乘加/减 • 双16比特算术指令
• 比较运算指令:比较并求极值,最大/最小值,存储单元比较,寄存
存储器映射寄存器
1. DP直接寻址
• 例1:访问数据存储空间
BCLR CPL .CPL_OFF
;使CPL=0 ;指向数据页1,DP=0 ;告诉汇编器DP=2000h
AMOV #012000H,XDP .dp #2000h
MOV @1H,T0
MOV @BH,AC1
;将数据页1,地址2001H中的数据给T0
•地址的高7位有DPH 寄存器提供
例: MOV #01H, DPH ; DPH=1 MOV *abs16(#2000h), T0 ;将(01 2000h)->T0 MOV *abs16(#200Ah),AC1 ;将(01 200Ah)->AC1
3.1.1 绝对寻址
2. k23绝对寻址
*(#k23)
ST1_55中的CPL位决定使用DP还是SP CPL=0 数据页指针DP CPL=1 堆栈指针SP
1. DP寻址
DPH
000 0000 . 000 0000 000 0001 . 000 0001 .. 111 1111 .. 111 1111
DP+Doffset
数据空间
0000 0000 0000 0000 . 主数据页0: 00 0000h~00 FFFFh 1111 1111 1111 1111 0000 0000 0000 0000 . 主数据页1: 01 0000h~01 FFFFh 1111 1111 1111 1111 .. . .. .