
第六章 DSP寻址方式和汇编指令.docx
10页本文格式为Word版,下载可任意编辑第六章 DSP寻址方式和汇编指令 第六章 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. 字节寻址方式:该方式能访问到股东地址单元的最低有效位和最高有效位 提示: 对于基于C28x的DSP芯片来说,以上的7种寻址方式仲出了IO空间寻址方式外其他的都支持 C28x的大多数指令都是利用操作符中的8位字段来选择寻址方式和对寻址方式举行修改.在C28x的指令系统中,这个8位字段用于以下寻址方式: 1. loc16:为16位数据访问选择直接/堆栈/间接/寄放器寻址方式 [loc16]表示loc16这种寻址方式对应的16位数据 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位数据 在寄放寻址方式下, lo。
