第三章 寻址方式和汇编指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

32位辅助寄存器XAR0~XAR7
32位辅助寄存器XAR0~XAR7的低16位
32位辅助寄存器XAR0~XAR7的高16位
32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1……
ARP指向的辅助寄存器的低16位
ARP指向的辅助寄存器
累加器的高16位寄存器AH或者16位寄存器AL
立即数助记符
loc32:32位寻址方式指定地址单元的内容。
#16bitsigned:16位有符号立即数。
7
§3.2 寻址方式
C28x系列DSP的指令集采用7种寻址方式:
直接寻址方式 堆栈寻址方式 间接寻址方式 寄存器寻址方式 数据/程序/IO空间寻址方式 程序空间间接寻址方式 字节寻址方式
8
F2812的大多数指令利用操作码中的8位字段来选 择寻址方式和对寻址方式进行修改.在F2812指令系统 中,这个8位字段用于以下寻址方式:
ADD AL,*--SP
;SP=SP-1,再把新SP指向的16位堆栈的内容加到AL中
MOVL ACC,*--SP ;SP=SP-2,再把新的SP指向的32位堆栈内容移到ACC中
14
3、间接寻址方式
XAR0~XAR7(辅助寄存器指针),该方式下,32位的XARn寄存 器被当做一般的数据指针。通过相应的指令可以实现操作后XARn加1、 操作前/后减1,或由3位立即数偏移量或另一个16位寄存器的内容来索
MOVL *-SP[34],ACC ;将ACC中的32位内容存入(SP-34)指向的堆栈单元
例2、利用堆栈寻址方式递增访问堆栈区16/32为数据:
MOV *SP++,AL ;将16位AL寄存器的值压入栈顶,且SP=SP+1 MOVL *SP++,P ;将32位P寄存器的值压入栈顶,且SPSP+2
例3、通过堆栈寻址方式递减访问堆栈区16/32数据:
乘积移位方式(+4 ,1 ,0 ,-1,-2,-3,-4 ,-5 ,-6)
22位程序计数器
按位求反码
Loc16寻址方式对应的16位数据
将Loc16寻址方式对应的16位数据进行零扩展
将Loc16寻址方式对应的16位数据进行符号扩展
Loc32寻址方式对应的32位数据
将Loc32寻址方式对应的32位数据进行零扩展
▲ AMODE=0—该方式是复位后的默认方式,也是F2812 的C/C++编译器使用的方式。这种方式与C2xLP CPU的寻 址方式不完全兼容。数据页指针偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1—该方式包括的寻址方式完全与C2xLP 器
件的寻址方式兼容。数据页指针的偏移量是7位并支持所
16位立即数,零扩展
S:16bit
16位立即数,符号扩展
22bit
表示22位立即数
0:22bit
22位立即数,零扩展
S:22bit
22位立即数,符号扩展
LSb
最低有效位
LSB
最低有效字节
LSW
最低有效字
MSb
最高有效位
MSB
源自文库
最高有效字节
MSW
最高有效字
OBJ
对于某条指令,位OBJMODE的状态
N
重复次数(N=0,1,2,3,4,5,6…)
有C2xLP 支持的间接寻址方式
在F2812间接寻址方式中,使用哪个辅助寄存器指针在指令中并不
被明确指出。而在C2xLP的间接寻址方式中,3位长度的辅助寄存器
指针被用来选择当前使用哪个辅助寄存器以及下次操作将使用哪个辅
助寄存器
10
➢ 汇编器/编译器对AMODE位的追踪
编译器总是假定AMODE=0,所以它只使用对AMODE=0 有效的寻址模式。而汇编器可以通过设置命令行选项实现默认 AMODE=0或者AMODE=1
C2xLP全兼容的寻址方式)
11
1、直接寻址方式
DP(数据页指针),此方式中,16位的DP寄存器被当做一个固定 的页指针,将指令提供6位或7位的地址偏移量与DP寄存器中的值组合 起来就构成完整的地址。当访问具有固定地址的数据结构时,这种寻 址方式特别有用,例如,外设寄存器和C/C++中的全局及静态变量。
第三章 寻址方式和汇编指令
§3.1 汇编语言指令集概述 §3.2 寻址方式 §3.3 C28x汇编操作指令 §3.4 汇编程序
1
§3.1 汇编语言指令集概述
在TMS320C2000系列中,CPU内核为: C20x/C24x/C240x:C2xLP: C27x/C28x:C27x、C28x
这些CPU的硬件结构有一定差别,指令集也不相同,但在C28x芯片 中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具 有最佳兼容性。
C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这 些源代码是用C28x代码生成工具编译生成的。
2
1、常用操作数符号说明
符号
描述
XARn ARn,ARm ARnH ARPn AR(ARP) XAR(ARP) AX # PM PC ~ [loc16] 0:[loc16] S:[loc16] [loc32] 0:[loc32] S:[loc32] 7bit 0:7bit S:7bit 8bit 0:8bit
直接寻址方式下loc16/loc32的语法说明:
AMODE (ST1.8)
偏移量
0
@6位数
1
@@7位数
每页大小 64字 128字
32位数据地址
(32~22)=0 (21~6)=DP:15~0 (5~0)=6位数
(32~22)=0 (21~7)=DP:15~0 (6~0=7)位数
寻址范围
数据空间的低 4M字的范围
使用)。
#:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数
<< 左移。
>> 右移。
@:
当使用C28x语法时,64位字段数据与通过“@”符号来表示,以帮助程
序员理解当前正在使用哪种寻址模式。
@@:
当使用C28x语法时,128位字段数据页通过“@@”符号来表示。
loc16:16位寻址方式指定地址单元的内容。
堆栈寻址方式下loc16/loc32的语法说明:
AMODE (ST1.8)
0 X
X
偏移量
32位数据地址
*-SP[6位] *SP++ *--SP
(32~16)=0 (15~0)=SP-6位
(32~16)=0 (15~0)=SP 如果loc16,SP=SP+1 如果loc132,SP=SP+2
(32~16)=0 (15~0)=SP 如果loc16,SP=SP-1 如果loc132,SP=SP-2
寄存器寻址方式下的loc16/loc32语法说明:
AMODE X
Loc16/loc32语法
说明
@ACC
访问32位寄存器ACC。当寄存器@ACC位目的地操作
数是,Z、N、V、C、OVC等标志可能会受到影响
将Loc32寻址方式对应的32位数据进行符号扩展
表示7位立即数
7位立即数,零扩展
7位立即数,符号扩展
表示8位立即数
8位立即数,零扩展
3
续:
S:8bit
8位立即数,符号扩展
10bit
表示10位立即数
0:10bit
10位立即数,零扩展
S:10bit
10位立即数,符号扩展
16bit
表示16位立即数
0:16bit
6
2、汇编语法指令描述
汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,它
是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也
可以有很多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空
格分开。
ARn :
n为数值0~7,ARn指定下次的辅助寄存器。
ind :
选择以下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式
{}
可选字段
=
赋值
==
等于
4
关于算术方面的助记符以及与其相关的标志位
COND 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
语法 NEQ EQ GT GEQ LT LEQ HI HIS,C LO,NC LOS NOV OV NTC TC NBIO UNC
引。 C28x的间接寻址方式下的loc16/loc32的语法说明:
AMODE X X X X X
Loc16/32语法 *XARn++
说明
ARP=n (31~0)=XARn 如果loc16,XARn=XARN+1 如果loc32,XARn=XARN+2
*--XARn
ARP=n
(31~0)=XARn 如果loc16,XARn=XARN-1 如果loc32,XARn=XARN-2
描述 不等于 等于 大于(有符号减法) 大于或等于(有符号减法) 小于(有符号减法) 小于或等于(有符号减法) 高于(无符号减法) 高于或相同(无符号减法) 低于(无符号减法) 低于或相同(无符号减法) 无溢出 溢出 测试位为0 测试位为1 BIO输入等于零 无条件
测试标志位
Z=0 Z-1 Z=0且N=1 N=0 N=1 Z=1或N=1 C=1且Z=0 C=1 C=0 C=1或Z=0 V=0 V=1 TC=0 TC=1 BIO=0
通过状寄存器STl的位OBJMODE和位AMODE的组合来选定模式。 3种操作模式:
C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址 方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标—兼 容模式。在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数 也与C27xCPU兼容。
*+XARn[AR0]
ARP=n (31~0)=XARn+AR0
*+XARn[AR1]
ARP=n
(31~0)=XARn+AR1
*+XARn[3位数]
ARP=n
(31~0)=XARn+三位数
15
4、寄存器寻址方式
该寻址方式下,寄存器可以是访问的源操作数,也可以是目标操
作数,这样在C28x中就能实现寄存器到寄存器的操作。这一方式包括 对32位和16位寄存器的寻址
22位地址的构成:
31 21
0
0 DP寄存器的值(15~0或15~1) 来自指令中偏移量(6位或7位)
12
2、堆栈寻址方式
SP(堆栈指针),这种方式下,16位的SP指针被用来访问软件堆栈 的内容。C28x系列的堆栈是从存储器的低地址变化到高地址的,SP总是 指向下一个空的存储单元。指令提供6位的偏移量,该偏移量是从当前的 堆栈指针值中抽取出来的,用以访问堆栈中的数据。在数据入栈和出栈 时,该偏移量也可分别用于堆栈指针操作后的增加或操作前的减少。
√ – v28
;假定AMODE=0(C28x寻址方式)
– v28 – m20 ;假定AMODE=1(与C2xLP全兼容的寻址方式)
√ 在文件中使用内嵌伪指令
. c28_amode ;告诉汇编器后面的代码段都假定AMODE=0
(C28x寻址方式)
. lp_amode ;告诉汇编器后面的代码段都假定AMODE=1(与
(1)loc16 为16位数据访问选择直接/堆栈/间接/寄 存器寻址方式
(2)loc32 为32位数据访问选择直接/堆栈/间接/寄 存器寻址方式
以上7种寻址方式都与“loc16/loc32”组合起来使用
9
➢ 寻址方式选择位
由于F2812 提供了多种寻址方式, 因此用寻址方式选择 位(AMODE)来选择8位字段(loc16/loc32)的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下:
5
PM与结果保存方式的关系
PM +4 +1 0 -1 -2 -3 -4 -5 -6
保存方式 P(31:4)=相乘结果中低38位的(27:0),P(3:0)+0 P(31:1)=相乘结果中低38位的(30:0),P(31)+0 P(31:0)=相乘结果中低38位的(31:0) P(31:0)=相乘结果中低38位的(32:1) P(31:0)=相乘结果中低38位的(33:2) P(31:0)=相乘结果中低38位的(34:3) P(31:0)=相乘结果中低38位的(35:4) P(31:0)=相乘结果中低38位的(36:5) P(31:0)=相乘结果中低38位的(37:6)
寻址范围
数据空间的低 64K字的范围
13
例1、带偏移量的堆栈寻址方式访问堆栈区16/32数据,当AMODE=0时:
ADD AL,*-SP[5]
;将(SP-5)指向堆栈单元的16位内容加到AL
MOV *-SP[8],AL ;将AL中的16位内容存入(SP-8)指向的堆栈单元
ADDL ACC,*-SP[12] ;将(SP-12)指向的堆栈单元的32位内容加到ACC
相关文档
最新文档