C55x通过以下三种寻址方式访问数据空间、存储器映射寄存器、寄存器位和I/O空间:
绝对寻址方式
通过在指令中指定一个常数地址完成寻址
直接寻址方式
使用地址偏移量寻址
间接寻址方式
使用指针完成寻址
1.绝对寻址方式
C55x有绝对寻址方式:
1.1 k16绝对寻址
其操作数为*abs16(#k16),【k16:16位的无符号常数】
将7位的寄存器DPH和k16级联形成一个23位的地址,用于对数据空间的访问
1.2 k23绝对寻址
操作数为*(#k23),【k23:23位的无符号常数】
1.3 I/O绝对寻址
操作数是*port(#k16),【k16:16位无符号常数】
使用助记符指令,其操作数是port(#k16)(操作数前没有*)
2.直接寻址方式
注意:DP和SP互相排斥,通过ST1_55的CPL位来选择。0 DP,1 SP、
2.1 DP直接寻址
高7位由DPH提供,用来确定主数据页
低16位由两部分组成:
DP
7位偏移量(Doffset)
2.2 SP直接寻址
SPH确定高7位地址
16位地址由SP和7位偏移量决定,偏移量范围是0~127
由SPH和SP构成了扩展数据堆栈指针XSP
2.3寄存器位寻址
操作数是@bitoffset
只有寄存器的位测试、置位、清零、取反指令支持这种寻址模式
2.4 PDP直接寻址
port()限定,指定访问的是I/O空间。而不是数据存储单元。
3.间接寻址方式
3.1 AR间接寻址
通过一个辅助寄存器ARn(n=0,1,2,3,4,5,6,7)访问数据空间
ST2-55的ARMS位决定AR间接寻址的操作类型
ARMS=0,DSP模式:CPU提供DSP增强应用的高效执行功能
ARMS=1,控制模式:CPU能够优化代码的长度
3.2 双AR间接寻址
通过8个辅助寄存器(AR0~AR7)同时访问两个数据存储单元
实现功能:
执行一条可完成两个16位数据空间访问的指令
并行执行两条指令
3.3 CDP间接寻址
使用系数数据指针(CDP)对数据空间、寄存器位和I/O空间进行访问
3.4 系数间接寻址
支持以下算术指令:
FIR滤波
乘法
乘加
乘减
双乘加或双乘减
指令系统
1 并行执行
指令并行的特征
单指令中内置并行方式 —隐含并行方式
例如:MPY *AR0, *CDP, AC0
::MPY *AR1, *CDP, AC1
用户自定义的两条指令间的并行方式
例如: MPYM *AR1–, *CDP, AC1
|| XOR AR2, T1
内置与用户自定义混合的并行方式
例如: MPYM T3=*AR3+, AC1, AC2
|| MOV #5, AR1
指令并行的规则
两条指令的总长度不能超过6个字节
在指令的执行过程中不存在操作器、地址产生单元、总线等资源冲突
其中一条指令必须有并行使能位或两条指令符合软-双并行条件
不能使用并行方式的情况
使用立即数寻址方式
例如: *abs16(#k16);*(#k23);port(#k16); *ARn(K16);*+ARn(K16);*CDP(K16); *+CDP(K16)
条件跳转、条件调用、中断、复位等程序控制指令
例如: BCC P24, cond;CALLCC P24, cond; IDLE;INTR k5;RESET;TRAP k5
使用下列指令或者操作修饰符
例如: mmap( );port( );.CR; .LR
资源冲突
C55x的资源
运算器
使用的操作器有:D单元的ALU、D单元的移位器、D单元的交换器、A单元的交换器、A单元的ALU和P单元
地址产生单元
两个数据地址(DA)产生单元、一个系数地址(CA)产生单元和一个堆栈地址(SA)产生单元
只能使用给定数量的数据地址产生单元
总线
两个数据读(DR)总线、一个系数读(CA)总线、两个数据写(DW)总线、1个ACB总线(将D单元寄存器的内容传送给A单元和P单元的操作器)、一个KAB总线(立即数总线)和一个KDB总线(立即数总线)
只能使用给定数量的总线
软-双并行条件
两个存储器操作数必须是双AR间接寻址模式
指令不能包含high_byte(Smem)和low_byte(Smem)
指令不能读、写同一个存储器单元
如果指令中的k4的值是0~8,就会改变XDP 的值,所以,不能与加载DP的指令组成并行指令
读重复计数寄存器(RPTC)指令不能和如下的任何一个单重复指令组成并行指令
2 C55x指令集按操作类型可分为6种:
注:一条指令的属性包括:指令,执行的操作,是否有并行使能位,长度,周期,在流水线上的执行阶段以及执行的功能单元等。
算术运算指令
位操作指令
扩展辅助寄存器操作指令
逻辑运算指令
移动指令
程序控制指令