当前位置:首页 > DSPC2000汇编指令
第六章 DSP的寻址方式和汇编指令
当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。
6.1汇编语言指令集概述
在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。
在进行汇编讲解之前先来了解一下开发的核心——CPU。在TMS320C2000系列中,CPU内核为:
C20x/C24x/C240x:C2xLP: C27x/C28x:C27x、C28x
这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。 C28x芯片具有3种操作模式:
1. C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统,
因此,一般应使C28x芯片工作于该种模式。
2. C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。在该模式
下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。
3. C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x
代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。 本节假设条件为芯片工作于C28x模式(OBJMODE=1,AMODE=0)。复位后,通过执行指令C28OBJ或者SETC OBJMODE将ST1中的OBJMODE位置1,芯片即可工作于C28x模式。
6.1.1 DSP中的操作数
汇编语言离不开操作符和操作数,操作符可以认为就是CPU的指令或者编译器上的伪指令,操作数是指令执行过程中的参与者,也可以说操作数就是指令所控制的对象。 如表6-1,表6-2和表6-3对指令中常用到的一些操作数符号进行说明 符号 XARn ARn,ARm 描述 32位辅助寄存器XAR0~XAR7 32位辅助寄存器XAR0~XAR7的低16位 ARnH ARPn AR(ARP) AX # PM PC ~ [loc16] 32位辅助寄存器XAR0~XAR7的高16位 32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1?? ARP指向的辅助寄存器的低16位 累加器的高16位寄存器AH或者16位寄存器AL 立即数助记符 乘积移位方式(+4 ,1 ,0 ,-1,-2,-3,-4 ,-5 ,-6) 22位程序计数器 按位求反码 Loc16寻址方式对应的16位数据 XAR(ARP) ARP指向的辅助寄存器 0:[loc16] 将Loc16寻址方式对应的16位数据进行零扩展 S:[loc16] 将Loc16寻址方式对应的16位数据进行符号扩展 [loc32] Loc32寻址方式对应的32位数据 0:[loc32] 将Loc32寻址方式对应的32位数据进行零扩展 S:[loc32] 将Loc32寻址方式对应的32位数据进行符号扩展 7bit 0:7bit S:7bit 8bit 0:8bit S:8bit 10bit 0:10bit S:10bit 16bit 0:16bit S:16bit 22bit 0:22bit S:22bit LSb LSB LSW MSb MSB MSW OBJ N {} = == 表示7位立即数 7位立即数,零扩展 7位立即数,符号扩展 表示8位立即数 8位立即数,零扩展 8位立即数,符号扩展 表示10位立即数 10位立即数,零扩展 10位立即数,符号扩展 表示16位立即数 16位立即数,零扩展 16位立即数,符号扩展 表示22位立即数 22位立即数,零扩展 22位立即数,符号扩展 最低有效位 最低有效字节 最低有效字 最高有效位 最高有效字节 最高有效字 对于某条指令,位OBJMODE的状态 重复次数(N=0,1,2,3,4,5,6?) 可选字段 赋值 等于 表6-1操作数符号及说明
在应用程序的开发过程当中少不了的就是算术运算还有比较运算,当然在汇编语言编程的时候也是一样的,在汇编语言当中进行算术运算的操作并不像C/C++那样直观、方便,需要掌握众多的助记符才行,接下来会通过表6-2来说明一下关于算术方面的助记符以及与其相关的标志位。
COND 语法 0000 NEQ 0001 EQ 0010 GT 0011 GEQ 0100 LT 0101 LEQ 0110 HI 1000 LO,NC 1001 LOS 1010 NOV 1011 OV 1100 NTC 1101 TC 1110 NBIO 1111 UNC 描述 不等于 等于 大于(有符号减法) 小于(有符号减法) 高于(无符号减法) 低于(无符号减法) 无溢出 溢出 测试位为0 测试位为1 BIO输入等于零 无条件 测试标志位 Z=0 Z-1 Z=0且N=1 N=1 C=1且Z=0 C=0 V=0 V=1 TC=0 TC=1 BIO=0 大于或等于(有符号减法) N=0 小于或等于(有符号减法) Z=1或N=1 0111 HIS,C 高于或相同(无符号减法) C=1 低于或相同(无符号减法) C=1或Z=0 表6-2影响指令的判断条件的说明
在汇编程序当中实现乘法操作时一件非常不简单的事,由于是属于纯寄存器操作,因此,开发人员需要准备保存乘法结果的地址,在表6-1当中讲解操作数符号的时候有一个关于乘积操作的符号—PM,那么它的结果保存是如何执行的呢?下面通过表6-3来说明一下。
PM 保存方式 +4 P(31:4)=相乘结果中低38位的(27:0),P(3:0)+0 +1 P(31:1)=相乘结果中低38位的(30:0),P(31)+0 0 P(31:0)=相乘结果中低38位的(31:0) -1 P(31:0)=相乘结果中低38位的(32:1) -2 P(31:0)=相乘结果中低38位的(33:2) -3 P(31:0)=相乘结果中低38位的(34:3) -4 P(31:0)=相乘结果中低38位的(35:4) -5 P(31:0)=相乘结果中低38位的(36:5) -6 P(31:0)=相乘结果中低38位的(37:6) 表6-3 PM与结果保存方式的关系
6.1.2汇编语法指令描述
前一小节提到过,汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,
它是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也可以有很多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空格分开。
ARn:
n为数值0~7,ARn指定下次的辅助寄存器。 ind:
选择一下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式使用)。 #:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数。 <<左移。 >>右移。 @:
当使用C28x语法时,64位字段数据与通过“@”符号来表示,一帮组程序员理解当前正在使用哪种寻址模式。 @@:
当使用C28x语法时,128位字段数据页通过“@@”符号来表示。 loc16:16位寻址方式指定地址单元的内容。 loc32:32位寻址方式指定地址单元的内容。 #16bitsigned:16位有符号立即数。
6.2寻址方式
通过6.1节当中读者们应当对汇编语言编程有了一定的了解,仅仅了解了汇编语言的操作符还是不过的,接下来就从汇编语言最根本的开始学习——寻址方式寻址方式就是寻找操作数或者操作数地址的方式,在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式或堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。C28x系列DSP的指令集采用7种寻址方式:
1. 直接寻址方式:DP(数据页指针),在此方式中,16位的DP寄存器被当做一个固定的
页指针,讲指令中提供6未或者7位的地址偏移量与DP寄存器中的值组合起来就构成完整的地址。当访问具有固定地址的数据结构时,这种寻址方式特别有用,例如,外设寄存器和C/C++中的全局及静态变量。 2. 堆栈寻址方式:SP(堆栈指针),在这种方式下,16位的SP指针被用来访问软件堆栈
的内容。C28x系列的堆栈是从低端地址想高端地址生长的,SP总是指向下一个空的存储单元。当需要访问堆栈中的数据时,SP的值减去指令仲提供的6位偏移量作为被访问数据的地址和,而堆栈指针将在入栈后加1,出栈前减1. 3. 间接寻址方式:XAR0到XAR7(辅助寄存器指针),在该方式下,32位的XARn寄存器被
当做一般的数据指针来使用个。通过相应的指令可以实现操作后XARn加1、操作前/后减1,还可以配合3位偏移量或者其他16位寄存器实现变址寻址。
4. 寄存器寻址方式:这种方式下,另一个寄存器可以是该次访问的资源或者目的操作数。
这样在C28x中既能实现寄存器到寄存器的操作。
5. 数据/程序/IO空间寻址方式:在这种方式下,存储器中操作数的地址被包含在指令中。 6. 程序空间间接寻址方式:某些指令可以通过指针来访问位于程序空间中的存储器操作
数。由于在C28xCPU中存储器是统一寻址的,所以单周期内可以读取两个操作数。 7. 字节寻址方式:该方式能访问到股东地址单元的最低有效位和最高有效位。
共分享92篇相关文档