当前位置:文档之家› 第三章 寻址方式和汇编指令

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


loc32:32位寻址方式指定地址单元的内容。
#16bitsigned:16位有符号立即数。
7
§3.2 寻址方式
C28x系列DSP的指令集采用7种寻址方式:
直接寻址方式 堆栈寻址方式 间接寻址方式 寄存器寻址方式 数据/程序/IO空间寻址方式 程序空间间接寻址方式 字节寻址方式
8
F2812的大多数指令利用操作码中的8位字段来选 择寻址方式和对寻址方式进行修改.在F2812指令系统 中,这个8位字段用于以下寻址方式:
6
2、汇编语法指令描述
汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,它
是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也
可以有很多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空
格分开。
ARn :
n为数值0~7,ARn指定下次的辅助寄存器。
பைடு நூலகம்
ind :
选择以下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式
使用)。
#:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数
<< 左移。
>> 右移。
@:
当使用C28x语法时,64位字段数据与通过“@”符号来表示,以帮助程
序员理解当前正在使用哪种寻址模式。
@@:
当使用C28x语法时,128位字段数据页通过“@@”符号来表示。
loc16:16位寻址方式指定地址单元的内容。
将Loc32寻址方式对应的32位数据进行符号扩展
表示7位立即数
7位立即数,零扩展
7位立即数,符号扩展
表示8位立即数
8位立即数,零扩展
3
续:
S:8bit
8位立即数,符号扩展
10bit
表示10位立即数
0:10bit
10位立即数,零扩展
S:10bit
10位立即数,符号扩展
16bit
表示16位立即数
0:16bit
√ – v28
;假定AMODE=0(C28x寻址方式)
– v28 – m20 ;假定AMODE=1(与C2xLP全兼容的寻址方式)
√ 在文件中使用内嵌伪指令
. c28_amode ;告诉汇编器后面的代码段都假定AMODE=0
(C28x寻址方式)
. lp_amode ;告诉汇编器后面的代码段都假定AMODE=1(与
引。 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
寻址范围
数据空间的低 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
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位寄存器的内容来索
▲ AMODE=0—该方式是复位后的默认方式,也是F2812 的C/C++编译器使用的方式。这种方式与C2xLP CPU的寻 址方式不完全兼容。数据页指针偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1—该方式包括的寻址方式完全与C2xLP 器
件的寻址方式兼容。数据页指针的偏移量是7位并支持所
32位辅助寄存器XAR0~XAR7
32位辅助寄存器XAR0~XAR7的低16位
32位辅助寄存器XAR0~XAR7的高16位
32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1……
ARP指向的辅助寄存器的低16位
ARP指向的辅助寄存器
累加器的高16位寄存器AH或者16位寄存器AL
立即数助记符
描述 不等于 等于 大于(有符号减法) 大于或等于(有符号减法) 小于(有符号减法) 小于或等于(有符号减法) 高于(无符号减法) 高于或相同(无符号减法) 低于(无符号减法) 低于或相同(无符号减法) 无溢出 溢出 测试位为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
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数据:
寄存器寻址方式下的loc16/loc32语法说明:
AMODE X
Loc16/loc32语法
说明
@ACC
访问32位寄存器ACC。当寄存器@ACC位目的地操作
数是,Z、N、V、C、OVC等标志可能会受到影响
有C2xLP 支持的间接寻址方式
在F2812间接寻址方式中,使用哪个辅助寄存器指针在指令中并不
被明确指出。而在C2xLP的间接寻址方式中,3位长度的辅助寄存器
指针被用来选择当前使用哪个辅助寄存器以及下次操作将使用哪个辅
助寄存器
10
➢ 汇编器/编译器对AMODE位的追踪
编译器总是假定AMODE=0,所以它只使用对AMODE=0 有效的寻址模式。而汇编器可以通过设置命令行选项实现默认 AMODE=0或者AMODE=1
22位地址的构成:
31 21
0
0 DP寄存器的值(15~0或15~1) 来自指令中偏移量(6位或7位)
12
2、堆栈寻址方式
SP(堆栈指针),这种方式下,16位的SP指针被用来访问软件堆栈 的内容。C28x系列的堆栈是从存储器的低地址变化到高地址的,SP总是 指向下一个空的存储单元。指令提供6位的偏移量,该偏移量是从当前的 堆栈指针值中抽取出来的,用以访问堆栈中的数据。在数据入栈和出栈 时,该偏移量也可分别用于堆栈指针操作后的增加或操作前的减少。
*+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位寄存器的寻址
通过状寄存器STl的位OBJMODE和位AMODE的组合来选定模式。 3种操作模式:
C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址 方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标—兼 容模式。在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数 也与C27xCPU兼容。
(1)loc16 为16位数据访问选择直接/堆栈/间接/寄 存器寻址方式
(2)loc32 为32位数据访问选择直接/堆栈/间接/寄 存器寻址方式
以上7种寻址方式都与“loc16/loc32”组合起来使用
9
➢ 寻址方式选择位
由于F2812 提供了多种寻址方式, 因此用寻址方式选择 位(AMODE)来选择8位字段(loc16/loc32)的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下:
直接寻址方式下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字的范围
堆栈寻址方式下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
相关主题