DSP28335汇编教程 下载本文

内容发布更新时间 : 2024/5/9 3:04:33星期一 下面是文章的全部内容请认真阅读。

DSP28335汇编教程

当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。在本章节当中将主要以基于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 ARnH ARPn 描述 32位辅助寄存器XAR0~XAR7 32位辅助寄存器XAR0~XAR7的低16位 32位辅助寄存器XAR0~XAR7的高16位 32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1?? AR(ARP) AX # PM PC ~ [loc16] 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指定下次的辅助寄存器。