2. loc32:为32位数据访问选择直接/堆栈/间接/寄存器寻址方式。
[loc32]表示 loc32 这种寻址方式对应的 32 位数据。
在直接寻址方式下,loc16/loc32 指的是一个用标号表示的地址,这个地址由 16 位
的 DP 寄存器和操作码内 8 位字段的 6 位或 7 位偏移量共同决定。[loc16]/[loc32]表示
这个地址对应的 16/32 位数据。以上 7 种寻址方式都与“loc16/loc32”组合起来使用。
在间接寻址方式下,loc16/loc32 表示放在辅助寄存器(XAR0~XAR7)中的一个地
址,[loc16]/[loc32]表示这个地址对应的 16/32 位数据。
在 堆 栈 寻 址 方 式 下 , loc16/loc32 表 示 堆 栈 指 针 指 向 的 一 个 堆 栈 单 元 ,
[loc16]/[loc32]表示这个单元内的 16/32 位数据。
在 寄 存 寻 址 方 式 下 , loc16/loc32 表 示 一 个 16 位 或 32 位 寄 存 器 ( 如
ACC、P、XT、AH 等), [loc16]/[loc32]表示这些寄存器内的 16/32 位数据。
由于 C28x 提供了多种寻址方式,因此用寻址方式选择位(AMODE)来选择8位字
段(loc16/loc32)的解码。该位属于状态寄存器 ST1。寻址方式可以大致归类如下:
(1)AMODE=0——该方式是复位后的默认方式,也是 C28x 的 C/C++编译器使用的
方式。这种方式与 C2xLP CPU 的寻址方式不完全兼容。数据页指针偏移量是6位(在
C2xLP CPU 中是7位),并且不支持所有的间接寻址方式。
(2)AMODE=1——该方式包括的寻址方式完全与 C2xLP 器件的寻址方式兼容。数据
页指针的偏移量是7位并支持所有 C2xLP 支持的间接寻址方式。
编译器总是假定 AMODE=0,所以它只使用对 AMODE=0 有效的寻址模式。而汇编
器可以通过设置命令行选项实现默认 AMODE=0 或者 AMODE=1。
v28:假定 AMODE=0(C28x 寻址方式)
v28 – m20:假定 AMODE=1(与 C2xLP 全兼容的寻址方式)
在文件中使用内嵌伪指令:
. c28_amode :告诉汇编器后面的代码段都假定 AMODE=0(C28x 寻址方式)
. lp_amode :告诉汇编器后面的代码段都假定 AMODE=1(与 C2xLP 全兼容的 寻址方
式)
指令操作码仲的 8 位字段决定了 loc16/32 寻址方式,其可用的寻址方式总结见表 6-4。
AMODE=0 AMODE=1
8 位译码 loc16/32 语法 8 位译码 loc16/32 语
法
直接寻址方式(DP)
0 0 Ⅲ Ⅲ
@6 位数
0 1 Ⅲ Ⅲ
@@7 位数
堆栈寻址方式(SP)
0 1 Ⅲ Ⅲ
1 0 Ⅲ Ⅲ
1 0 111
110
*-SP[6 位数]
*SP++
*--SP
1 0 111
101
1 0 111
110
*SP++
*--SP
C28x 间接寻址方式(XRA0 到 XRA7)
1 0 000
AAA
1 0 001
AAA
*XARn++
*--XRAn
*+XRAn[AR0
]
1 0 000
AAA
1 0 001
AAA
*XARn++
*--XRAn
*+XRAn[AR
0]