TMS320C62x/C64x/C67xDSP的寻址模式有线性寻址模式(使用BK0),还有循环寻址模式(使用BK1)。寻址模式由寻址模式寄存器(AMR)决定。
概念
TMS320C62x/C64x/C67xDSP的寻址模式有线性寻址模式(使用BK0),还有循环寻址模式(使用BK1)。寻址模式由寻址模式寄存器(AMR)决定。
所有的
寄存器都可以进行线性寻址,只有8个寄存器可以进行循环寻址,这8个寄存器是:.D1功能单元使用的寄存器A4~A7和.D2功能单元使用的寄存器B4~B7。指令LDB(U)/LDH(U)/LDW,STB/STH/STW,ADDAB/ADDAH/ADDAW/ADDAD和SUBAB/SUBAH/SUBAW都使用AMR寄存器来决定这些寄存器的寻址模式。
工作原理
线性寻址模式
对于load和store
指令,线性寻址方式是将偏移量(offsetR/cst)进行移位操作。对于字(word)、半字(halfword)或者字节(byte),分别左移2位、1位或者0位。然后,再将移位的结果与基础寄存器(baseR)的值相加或者相减。
对于整数加减法指令,线性寻址是将源操作数(src1/cst)进行移位操作。对于字(word)、半字(halfword)或者字节(byte),分别左移2位、1位或者0位。然后,再将移位的结果进行加减法运算。
循环寻址模式
AMR寄存器中的BK0和BK1字段说明了循环寻址方式块的大小。
对于LDW、LDH(U)或LDB(U)指令,在分别完成将偏移量(offsetR/cst)左移2位、1位或者0位以后,再在第N位和第N+1位之间做一次带进位和借位的加减法运算。基础寄存器(baseR)中的N+1位到第31位保留。如果偏移量大于循环缓冲大小,那么偏移量的有效值是循环缓冲大小的模。
如图1所示,如果说一个块的大小是4,意思就是块的大小是4B,而不是4个数据类型(字节、半字或者字)的大小。所以,要完成一个对8个字大小的阵列的循环寻址,那么块的大小应该为32,或者N=4。
对于ADDAW、ADDAH或者ADDAB指令,在分别完成将源操作数(src1/cst)左移2位、1位或者0位以后,再在第N位和第N+1位之间做一次带进位和借位的加减法运算。源操作数src2的第N+1位到第31位的值不变。如果src1大于循环缓冲的大小,那么偏移量的有效值是循环缓冲大小的模。
存取指令地址生成语法
TMS320C62x/C64x/C67x CPU从存储器取数据和向存储器存数据只能使用load和store指令。图2显示了向存储器间接寻址的语法规定。有时候,存储指令需要在基础地址上有一个比较大的偏移量,在这种情况下,可以使用B15或者B14寄存器作为基础寄存器,使用一个15位的常数(ucst15)作为偏移量。
微处理器的寻址模式
微处理器在执行指令时,必然要对数据进行操作,这些数据叫做操作数。操作数可以是指令的一部分,可以存放在处理器的内部寄存器中,也可以存放在存储器或保持在
I/O端口中。为了访问这些不同类型的操作数,微处理器提供了各种寻址模式。寻址模式一般可分为三类:寄存器操作数寻址、立即操作数寻址和存储器操作数寻址。
寄存器操作数寻址
寄存器寻址模式是指指令的操作数存放在处理器的内部寄存器中,这些内部寄存器包括段寄存器和
通用寄存器,寄存器可以分8位、16位或32位,寄存器操作数可以用作为源操作数,也可以用作为目的操作数。
MOV指令执行过程如下:MPU首先取指令,指令地址由CS:IP的内容确定,对应的物理地址为01000H,当指令取进MPU内部的指令队列后,存放在那里并等待执行,此时的CS:IP将指向下一条指令地址。
立即操作数寻址
假如指令运行的操作数就是指令的一部分,那么这种形式的操作数叫做立即数,其对应的寻址方式为立即数寻址。立即数可以是8位、16位或32位,在指令中编码格式,立即数放在操作码之后。
存储器操作数寻址
为了访问存储器的操作数,MPU必须首先计算这个操作数的物理地址PA,然后开始读或写这个寄存器的操作数。段基地址SBA确定一个物理存储器段的起始地址,有效地址EA表示操作数相对这个存储器段开始的偏移量。在实地址模式下,SBA和EA组合形成实模式的物理地址SBA:EA。