1.寻址方式分类
寻址方式是CPU根据指令中给出的地址信息来寻找指令操作数物理地址的方式,即获得操作数的方式。C28x CPU支持四种基本的寻址方式:直接寻址(Direct Addressing)、堆栈寻址(Stack Addressing)、间接寻址(Indirect Addressing)和寄存器寻址(Register Ad-dressing)。
在直接寻址方式中,16位的数据页指针(DP)寄存器作为固定的页指针,指令中提供6位或7位偏移量,这些偏移量与DP中的值一起确定操作数的地址。
在堆栈寻址方式中,16位的堆栈指针(SP)用于访问堆栈的信息。C28x的软件堆栈从存储器的低地址变化到高地址,堆栈指针总是指向下一个位置。在指令中提供6位的偏移量,表明数据入栈或出栈时堆栈指针的增加和减小值。
在间接寻址方式中,32位的辅助寄存器XARn作为数据指针。在C28x的间接寻址中所用的间接寻址寄存器由指令直接指定。在C2xLP的间接寻址中,由3位的辅助寄存器指针(ARP)选择指令使用哪个辅助寄存器作为间接寻址寄存器。
在寄存器寻址方式中,另一个寄存器可作为访问的源操作数或目标操作数,即寄存器内容为操作数。这种寻址可实现C28x的寄存器到寄存器的操作。
C28x还有少数指令使用数据/程序/IO空间立即寻址方式或程序空间间接寻址方式。立即寻址方式与其他处理器立即寻址方式略有不同。可以使用间接寻址对程序空间中的存储器进行访问。
2.寻址方式选择位(AMODE)
由于C28x提供了多种寻址方式,C28x的大多数指令操作码用8位字段来表示指令使用的寻址方式和所选寻址方式的相关信息。而且,这8位操作码信息受CPU的状态寄存器ST1中的寻址方式选择位(AMODE)的影响。同一指令,AMODE的取值不同,指令操作码中对应寻址的8位操作码不同。
(1)AMODE对指令操作码的影响
1)AMODE=0。这是复位默认方式,也是C28x的C/C++编译器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容,数据页指针偏移量为6位(而C2xLP中为7位),并且不支持所有的间接寻址方式。
2)AMODE=1。该方式与C2xLP CPU的寻址方式完全兼容,数据页指针偏移量为7位,并且支持所有C2xLP的间接寻址方式。
例如,直接寻址方式在AMODE=1时,指令操作码对应寻址的8位信息为:0III IIII(7个I表示指令中给出的偏移地址)。在AMODE=0时,指令操作码对应寻址的8位信息为00II IIII(6位的I表示指令中给出的偏移地址)。
(2)汇编器/编译器对AMODE位的跟踪
由于C/C++编译器假定寻址方式设定在AMODE=0,因此,只能满足使用AMODE=0条件下的寻址方式。汇编器可以按照命令行操作指定默认状态为AMODE=0或AMODE=1,这些操作如下:
-v28 ;假设AMODE=0(C28x寻址方式)(www.daowen.com)
-v28-m20 ;假设AMODE=1(C2xLP兼容寻址方式)
另外,汇编器允许文件中嵌套指令改变寻址方式。使用的命令如下:
.c28_amode ;告知汇编器后缀代码为AMODE=0(C28x寻址方式)
.lp_amode ;告知汇编器后缀代码为AMODE=1(C2xLP兼容寻址方式)
在汇编程序中,上述命令可被使用如下:
… ;汇编器配置选择使用AMODE=0
… ;该段指令只能使用AMODE=0寻址方式
SETC AMODE ;设置AMODE=1
.lp_amode ;告知汇编器按照AMODE=1的语法
… ;该段指令只能使用AMODE=1寻址方式
…
CLRC AMODE ;回复到AMODE=0
.c28_amode ;告知汇编器按照AMODE=0的语法
… ;该段指令只能使用AMODE=0寻址方式
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。