DSPC2000姹囩紪鎸囦护 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期三 文章DSPC2000姹囩紪鎸囦护 - 鐧惧害鏂囧簱更新完毕开始阅读c49e07386edb6f1aff001fd3

BANZ 16bitoff,ARn-- BF 16bitoff,COND FFC XAR7,22bitoff IRET LB 22bitAddr LB *XAR7 LC 22bitAddr LC *XAR7 LCR *XARn LCR 22bitAddr LOOPZ loc16,#16bit LOOPNZ loc16,#16bit lLRET LRETE LRETR RPT #8bit/loc16 SB #8bitoff,COND SBF #8bitoff,EQ/NEQ/TC/NTC XB pma XB pma,COND XB pma,*ARPn XB *AL XCALL pma,*ARPn XBANZ pma,*ind{,ARPn} XBCALL pma, XCALL pma,COND XCALL *AL XRET XRETC COND 若辅助寄存器为0,进行跳转,PC变化同上 快速跳转,PC变化同上 快速调用函数,XAR7保存当前PC,PC=22位程序地址 中断返回 长跳转,PC=22位程序地址 间接长跳转,保存在XAR7中的22位程序地址到PC 直接长调用,PC=22位程序地址 间接长调用,保存在XAR7中的22位程序地址到PC 使用RPC的间接长调用 使用RPC的长调用,PC=22位程序地址 [loc16]与16位立即数相与为0时循环 [loc16]与16位立即数相与非0时循环 长返回 长返回且允许中断 使用RPC的长返回 重复下一条指令N次,N由8位立即数或[loc16]决定 有条件短跳转,PC变化同上 快速有条件跳转,PC变化同上 与C2xLP兼容性的跳转 与C2xLP兼容性的有条件跳转 与C2xLP兼容性的功能调用跳转 与C2xLP兼容性的功能调用 与C2xLP兼容性的功能调用且改变ARP 若ARn不为0,与C2xLP兼容性的跳转 与C2xLP兼容性的调用 与C2xLP兼容性的条件调用 与C2xLP兼容性的间接调用 等效于XRETC UNC 与C2xLP兼容性的条件性返回 BAR 16bitoff,ARn,ARm,EQ/NEQ 根据辅助寄存器比较进行跳转,PC变化同上 表6-27跳转/调用/返回操作的说明

14.其他操作的说明(表6-28)

助记符 ABORTI ASP EALLOW IDLE NASP ZAPA EDIS ESTOPO 对齐堆栈指针 允许访问受保护的寄存器/空间 置处理器与低功耗模式 不对齐堆栈指针 将累加器、P寄存器、OVC都清0 禁止访问受保护的寄存器/空间 仿真停止0 说明 终止中断,该指令仅仅为一条仿真指令 NOP {*int} 空跳,间接地址修改为可选操作 ESTOP1 仿真停止1 表6-28其他操作的说明

在C28x系列的汇编操作当中可不单单只有上面所讲述的17个表的操作说明,在这里只是对在开发程序时经常能用到的,也是最为基础的操作进行了说明,可以更好的使得刚刚接触汇编语言编程的读者很好的理解汇编语言。

6.4汇编程序

6.4.1汇编源程序格式

C28x系列芯片汇编源程序由源程序语句组成,源程序语句包含汇编伪指令、汇编语言指令、宏伪指令和注释。源语句包含有4各域(标号,助记符,操作数列表,注释)。 源程序语句通常格式如下:

[标号] [:] [||] 助记符 [操作数1,操作数2,...] [;注释] 对于上面抽象的解释肯定有不少的读者还是迷惑不解的,这样通过完整的汇编语句来讲解一下吧!

two .set 2 ;符号two=2 begin: MOV AR1,#two ;AR1=2

.word 016h ;用016h初始化一个字 LOOP MOV DP,#two 看可以各完整的汇编程序,读者们是不是特然觉得汇编没有想象中那么难呢!只要读者们一步一步来,先从基础的操作符号,操作方式来入手学习,进而理解好各种寻址方式,最后将汇编指令都搞清楚,这样学习汇编就不是一件难事了。需要注意的一点是,C28x汇编器每行最多可200字符,超过200个字符将被截断。为了保证汇编程序的正确(除了注释意外的部分),必须控制每一行都在200个字符以内。 接下来总结一下汇编程序的规则:

i. 所有语句必须以标号、空格、星号或分号开头。

ii. 标号是可选的,若用标号,它必须写在第一列的开始(否则编译出错)。 iii. 必须用一个或多个空格分隔每一个域。制表符(TAB等效位空格。

iv. 注释是可选的。在第一列开始的注释可以用星号或者分号(*或)打头,但在其他任何列

开始的注释必须以分号(;开头)。

v. 助记符不能从第一列开始,否则将被视为标号。 vi. “[]”表示该选项可选的。

提示:

1、标号对于所有的汇编指令和大部分的伪指令都是可选的。如果使用标号,标号必须从源程序语句的第一列开始。标号可以由128个字符(A-Z、a-z、0-9、_或$)构成,开头不能为数字

2、助记符包括:机器码助记符(如ADD、MOV或B)、汇编指令(如.data、.list、.set)、宏伪指令(如.macro、.var或.mexit)、宏调用。如果有(||),则表示该指令可有RPT指令重复。

3、所有的指令或伪指令都可以有一个或多个操作,或没有操作数。操作数包括:符号、

常数、表达式。

4、标号后面的(:)可有可无。

6.4.2常量

常数、字符串和符号是汇编器能识别的数据项,是汇编指令、伪指令和宏指令语句中操作数的基本组成部分。 ①常数

汇编器支持6中类型的常熟:

(1)二进制整数:以字母B(或b)结尾,由二进制数字(0,1)组成的数字串。数字串长度最多可达32个二进制数字,如010000110B。

(2)八进制整数:以字母Q(或q)结尾,由八进制数字(0~7)组成的数字串。数字串长度最多可达11个八进制数字,如100000Q。 (3)十进制整数:以字母D(或d)结尾(也可以默认),十进制整数由0~9组成的字符串。范围从-2147483648~4294967295,如-300000. (4)十六进制整数:以字母H(或h)结尾,有十六进制数字由0~9和A~F(或a~f)组成的字符串。数字串长度最多可达8各十六进制数字。 (5)字符常数:包含在单引号中的一个或两个字符的串。每个字符表示为8位ASCII码,如‘a’定义字符a,并在内部用61H表示。

(6)汇编时间常数:用.set伪指令对符号进行赋值,赋值内容不同,汇编符号所表示的含义也就不同了。

例如,用.set向符号赋值,则符号成为常数,为了在表达式中使用此常数,为了在表达式中使用此常数,赋予它的值必须是绝对值。 SHIFT .set 3 MOV AR1,#SHIFT

也可用.set将寄存器名赋予符号常数,此符号与寄存器是同义词,如 AUXR1 .set AR1 MOV AUXR1,#3

(7)浮点型常数:由整数部分、小数点、小数部分和指数部分组成,其格式如下: [+/-]nnn[.[nnn] [E/e[+/-]nnn]] 其中N表示十进制数字,“[]”内的部分是可选的。如3.0、3.14、-0.314e13.

②字符串

字符串是包含在双引号内的一串字符,双引号是字符串的一部分。串的最大长度是变化的,并由每一个使用字符串的伪指令定义的。字符在内部被定义为8位ASCII字符,如:“sample program”定义13个子的字符串sample program。 字符串用与下列场合:

(1).copy \中的文件名; (2).setc \中的段名;

(3).byte \中断数据初始化伪指令; (4).string伪指令的操作数。

字符串与字符常熟不同,字符常熟代表一个单独的整数值,而字符串是字符的列表。

③符号

符号被用做标号、常数及替代符号。符号名最多可由32各字母和数字混合组成(A~Z,a~z,0~9,$和_)。符号的第一个字符不能是数字,符号内不能有空格。用户定义的符号区分大小写,例如汇编时ABC、Abc和abc都会被识别为3个不同的符号。如果用汇编器选项(-C),可消除对大小写的识别。

6.4.3表达式与运算符

表达式由运算符、常数和符号组成。有效表达式的范围是-32768~+32767。表5-29将表达式内部使用的运算符按优先级分组列出。

组 运算符 1 2 + - ~ * / % << >> + - ^ | & < > <= >= =或== != 说明 取正 取负 求反(1的补码) 乘 除 求模 左移 右移 加 减 按位逻辑异或 按位逻辑或 按位逻辑与 小于 大于 小于或等于 大于或等于 等于 不等于 优先级 高 低 3 4 表6-29表达式内使用的运算符说明

提示:

(1)同组运算符的优先级以在前的为优;

(2)第一组运算符从右到左求值,其他组成从左到右

本章阐述了C28x系列DSP的寻址方式和汇编指令,并简单介绍了汇编程序的格式。许多情况向C28x的编程都可以使用c语言,因此初学者不必死记硬背汇编指令,理解汇编指令,只要能读懂汇编指令即可。希望读者们能通过本章的学习熟练掌握C28x的各种寻址方式,掌握常用湖边指令的功能和语法,汇编语句的格式,掌握CPU的工作原理,这样能有助于在开发DSP系统时写出高效优质的代码。