DSPC2000汇编指令(2)

2019-01-19 14:27

1 0 001 AAA 1 0 010 AAA 1 0 011 AAA 1 0 Ⅲ AAA *--XRAn *+XRAn[AR0] *+XRAn[AR1] *+XRAn[3位数] 1 0 001 AAA 1 0 010 AAA 1 0 011 AAA *--XRAn *+XRAn[AR0] *+XRAn[AR1] 表6-4 loc16/loc32的寻址方式

6.2.1直接寻址方式

指令字中包含数据存储器的7位便宜地址与基地址构成16位数据存储器地址,基地址由数据页指针DP或堆栈指针SP提供,具体由ST1的CPL决定。64K数据存储器包含512个数据页指针DP,DP的范围记为0~511.状态寄存器ST0内的第9位数据指针中的值来确定当前数据页。具体的直接寻址方式如图6-1所示。

15~8位操作码7位I=06~0位数据存储器的地址 图6-1直接寻址方式

直接寻址方式下loc16/loc32的语法说明如表6-5所示。 AMODE(ST1.8) 偏移量 0 @6位数 每页大小 32位数据地址 64字 寻址范围 (32~22)=0 数据空间 (21~6)=DP:15~0 的低4M (5~0)=6位数 字的范围 (32~22)=0 (21~7)=DP:15~0 (6~0=7)位数 1 @@7位数 128字 表6-5直接寻址方式下loc16/loc32的语法说明 假设需要访问数据空间地址0000105DH: (1)AMODE=0:

使用直接寻址方式访问数据存储器时,必须首先对DP进行设置以确定数据页面,然后再书写进行某种操作的指令,该指令的操作数将确定数据页面内部的特定偏移单元。其步骤如下:

1. 设置数据页面将当前数据页面载入DP。 MOVW DP,#0041H ;初始化数据页面指针 2. 设置偏移量

给出6位偏移量作为指令的一个操作数。

ADD AL,@1Dh ; AL与当前数据页面内偏移1DH单元的内容相加,结果存入到AL中 如图6-2所示直接寻址下AMODE为0的地址分配

16bit00000000010000016bit011101DP:0041HOFFSET:1DH

图6-2直接寻址下AMODE为0的地址分配

(1)AMODE=1:

1选择兼容选址模式

SETC AMODE ;令AMODE=1

.lp_amode ;通知编译器AMODE=1 2设置数据页面

讲当前数据页面载入DP

MOVW DP,#0040H ;初始化数据页面指针 3设置偏移量

给出7位偏移量作为指令的一个操作数。

ADD AL,@@5Dh ;AL与当前数据页面内偏移量5DH单元的内容相加,结果存入到AL中 如图6-3所示直接寻址下AMODE为1的地址分配。

15bit0000000001000007bit1011101DP:0040HOFFSET:5DH

图6-3直接寻址下AMODE为1的地址分配

6.2.2堆栈寻址方式

在堆栈寻址方式下,16位的SP指针被用于访问软件堆栈的信息。C28x的堆栈从存储器的低地址变化到高地址(小端方式),SP指针总是指向下一个空单元.当需要访问堆栈中的数据时,由程序提供6位偏移量,SP的值减去这6位的偏移量就是被访问的数据的地址,然后修改堆栈指针,堆栈寻址方式下loc16/loc32的语法说明见表6-6所示。

AMODE(ST1.8) 偏移量 0 X 32位数据地址 寻址范围 *-SP[6位] (32~16)=0 (15~0)=SP-6位 *SP++ (32~16)=0 数据空间 (15~0)=SP 如果loc16,SP=SP+1 的低64K 如果loc132,SP=SP+2 字的范围 (32~16)=0 (15~0)=SP 如果loc16,SP=SP-1 如果loc132,SP=SP-2 X *--SP 表6-6堆栈寻址方式下loc16/loc32的语法说明

下面的例子是带偏移量的堆栈寻址方式访问对栈区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

MOVL *-SP[34],ACC ;讲讲ACC中的32位内容存入(SP-34)指向的堆栈单元

下面的例子是利用堆栈寻址方式递增访问堆栈区16/32为数据: MOV *SP++,AL ;将16位AL寄存器的值压入栈顶,且SP=SP+1 MOVL *SP++,P ;将32位P寄存器的值压入栈顶,且SPSP+2

最后通过例子来讲解一下通过堆栈寻址方式递减访问堆栈区16/32数据: ADD AL,*--SP ;SP=SP-1,再把新SP指向的16位堆栈的内容加到AL中 MOVL ACC,*--SP ;SP=SP-2,再把新的SP指向的32位堆栈内容移到ACC中

6.2.3间接寻址方式

间接寻址方式的基本概念是指CPU对操作数读写时,通过辅助寄存器中存放的地址访问操作数。

逻辑上来讲是在间接寻址方式下,32位的XARn(辅助寄存器)被当做是一般性数据指针。其内容是操作数所在数据存储器的32位地址,CPU通过这个地址来取操作数。可以通过指令实现对辅助寄存器XARn加1加2、减1减2和变址操作(操作前/后),C28x的间接寻址方式(XAR0~XAR7)。

例如指令:MOVL ACC,*XAR2++;假设XAR2的值位0x80100h,内容地址0x80100的存储单元内容位1234h,0x80101的内容位5678h,执行这条指令后,ACC=56781234h,XAR2=80102h。 在物理上来看间接寻址方式下执行指令: MOVL ACC,*XAR2++,地址和数据通过寄存器和总线传送,当CPU将这条指令从程序空间读出并译码后,AEAU把XAR2中存放的地址0x00080100发送到DRAB上,然后CPU通过DRDB把内存单元数据56781234h读到数据缓冲寄存器,在发送操作数总线上(至此寻址过程结束),ALU读取DRDB的数据,经过处理后发送结果到结果总线,然后放入ACC中。间接寻址方式的loc16/loc32语法说明见表6-7所示。

AMODE Loc16/32语法 X X *XARn++ *--XARn 说明 ARP=n (31~0)=XARn 如果loc16,XARn=XARN+1 如果loc32,XARn=XARN+2 ARP=n (31~0)=XARn 如果loc16,XARn=XARN-1 如果loc32,XARn=XARN-2 ARP=n (31~0)=XARn+AR0 ARP=n (31~0)=XARn+AR1 X X X *+XARn[AR0] *+XARn[AR1] *+XARn[3位数] ARP=n (31~0)=XARn+三位数 表6-7 C28x的间接寻址方式下的loc16/loc32的语法说明

几乎所有的处理器都具有间接寻址方式(只是使用数据指针寄存器不同而已),如F2812读/写操作数。

6.2.4寄存器寻址方式

在该寻址方式下,寄存器可以是访问的源操作数,也可以是目标操作数,这样在C28x中就能实现寄存器到寄存器的操作.这一方式包括对32位和16位寄存器的寻址。寄存器寻址方式说明见表6-8所示。 AMODE Loc16/loc32语法 X X X X X X X X X X X @ACC @P @XT @XARn @AL @AH @PL @PH @TH @SP @ARn 说明 访问32位寄存器ACC。当寄存器@ACC位目的地操作数是,Z、N、V、C、OVC等标志可能会受到影响 访问32位寄存器P 访问32位寄存器XT 访问32位寄存器XARn 访问16位寄存器AL。AH的内容不受影响。当@AL位目的操作数时,Z、N、V、C、OVC等标志可能会受到影响 访问16位寄存器AH。AL的内容不受影响。当@AH位目的操作数时,Z、N、V、C、OVC等标志可能会受到影响 访问16位寄存器PL。寄存器PH的内容不受影响 访问16位寄存器PH。寄存器PL的内容不受影响 访问16位寄存器TH。寄存器TL的内容不受影响 访问16位寄存器SP 访问16位寄存器AR0~AR7的内容。寄存器ARH0~ARH7的内容不受影响

表6-8寄存器寻址方式下的loc16/loc32语法说明 下面通过以下简单的例子来说明一下在汇编程序当中的寄存器寻址的相关操作。

1、ACC寄存器寻址32位数据

MOVL XAR6,@ACC ;将ACC的内容装入到XAR6 MOVL @ACC,XT ;将XT寄存器的内容装入到ACC ADDL ACC,@ACC ;ACC=ACC+ACC

2、P寄存器寻址32位数据

MOVL XAR6,@P ;将P的内容装入到XAR6 MOVL @P,XT ;将XT寄存器的内容装入P ADDL ACC,@P ;ACC+ACC+P

3、AX寄存器寻址16位数据

MOV PH,@AL ;将AL的内容装入到PH ADD AH,@AL ;AH=AH+AL

MOV T,@AL ;将AL的内容装入T

6.2.5数据/程序/IO空间立即寻址方式

在该寻址方式下,存储器操作的地址就存在指令中。数据/程序/IO空间立即寻址方式的说明见表6-9所示。

语法 地址说明 *(0:16位) 32位数据地址:(31:16)=0、(15:0)=16位立即数 PS:指令重复执行时地址在操作后+1,只能寻址数据空间的低64K *(PA) 0:pma *(pma) 32位数据地址:(31:16)=0、(15:0)=16位立即数 PS:指令重复执行时地址在操作后+1, 22位程序地址:(21:16)=0、(15:0)=pma PS:指令重复执行时地址在操作后+1,只能寻址数据空间的低64K 22位程序地址:(21:16)=0x3F、(15:0)=pma PS:指令重复执行时地址在操作后+1,只能寻址数据空间的高64K 表6-9数据/程序/IO空间立即寻址方式下的指令语法说明

6.2.6程序空间间接寻址方式

某些指令可以通过使用间接指针对程序空间中的存储器进行访问。因为C28xCPU的存储器是标准一致的,使用的是统一寻址,这就使在一个机器周期中进行两次读操作成为可能。 程序空间间接寻址方式说明见表6-10所示。 语法 *AL 地址说明 22位程序地址:(21:16)=0x3F、(15:0)=AL PS:如果指令重复执行,AL的地址会被复制到影子寄存器,同时其地址会在每一执行后+1,寄存器AL中断内容没有改变。只能寻址数据空间的高64K 22位程序地址:(21:0)=XAR7 PS:如果该指令重复执行,只有在指令XPREAD和XPWRITE中,XAR7中存放的地址才能被复制到影子寄存器中,同时地址置将会在每次执行都+1,寄存器XAR7的值并没有被修改,对于其他指令即使重复执行,地址值也不增加 *XAR7


DSPC2000汇编指令(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:10kv箱式变电站设计(工厂供电的毕业设计)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: