没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
DSP 的寻址方式和汇编指令
1 汇编语言指令集概述
TMS320C2000 系列中,CPU 内核
序号 CPU 内核
1
C20x/C24x/C240x:C2xLP:
2
C27x/C28x:C27x、C28x
这些 CPU 的硬件结构有一定差别,指令集也不相同,但是,在 C28x 芯片中可以通过
选择兼容特性模式,使 C28xCPU 与 C27xCPU 及 C2xLPCPU 具有最佳兼容性。可通过状
寄存器 STl 的 OBJMODE 位 AMODE 的组合,选定模式。
C28x 芯片具有 3 种操作模式:
a) C28x 模式:在该模式中,用户可以使用 C28x 的所有有效特性、寻址方式和指
令系统,因此,一般应使 C28x 芯片工作于该种模式。
b) C27x 目标——兼容模式:在复位时,C28x 的 CPU 处于 C27x 目标-兼容模式。
在该模式下,目标码与 C27xCPU 完全兼容,且它的循环计数也与 C27xCPU 兼
容。
c) C2xLP 源——兼容模式:该模式允许用户运行 C2xLP 的源代码,这些源代码是
用 C28x 代码生成工具编译生成的。
本节假设条件为芯片工作于 C28x 模式(OBJMODE=1,AMODE=0)。复位后,通
过执行指令 C28OBJ 或者 SETCOBJMODE 将 ST1 中的 OBJMODE 位置 1,芯片即可工作
于 C28x 模式。
1.1 DSP 中的操作数
汇编语言离不开操作符和操作数,操作符可以认为就是 CPU 的指令或者编译器上的伪
指令,操作数是指令执行过程中的参与者,也可以说操作数就是指令所控制的对象。如表
6-1,表 6-2 和表 6-3 对指令中常用到的一些操作数符号进行说明。
表 1 操作数符号及说明
序号 符号 描述
1 XARn
32 位辅助寄存器 XAR0~XAR7
2
ARn,ARm 32 位辅助寄存器 XAR0~XAR7 的低 16 位
3 ARnH
32 位辅助寄存器 XAR0~XAR7 的高 16 位
4 ARPn
32 位辅助寄存器指针,ARP0 指向 XAR0,ARP1 指向 XAR1
5
AR(ARP) ARP 指向的辅助寄存器的低 16 位
6
XAR(ARP) ARP 指向的辅助寄存器
7 AX
累加器的高 16 位寄存器 AH 或者 16 位寄存器 AL
8 #
立即数助记符
9 PM
乘积移位方式(+4,1,0,-1,-2,-3,-4,-5,-6)
10 PC
22 位程序计数器
11 ~
按位求反码
12 [loc16]
Loc16 寻址方式对应的 16 位数据
13
0:[loc16] 将 Loc16 寻址方式对应的 16 位数据进行零扩展
14
S:[loc16] 将 Loc16 寻址方式对应的 16 位数据进行符号扩展
15 [loc32]
Loc32 寻址方式对应的 32 位数据
16
0:[loc32] 将 Loc32 寻址方式对应的 32 位数据进行零扩展
17
S:[loc32] 将 Loc32 寻址方式对应的 32 位数据进行符号扩展
18 7bit
表示 7 位立即数
19 0:7bit
7 位立即数,零扩展
20 S:7bit
7 位立即数,符号扩展
21 8bit
表示 8 位立即数
22 0:8bit
8 位立即数,零扩展
23 S:8bit
8 位立即数,符号扩展
24 10bit
表示 10 位立即数
25 0:10bit
10 位立即数,零扩展
26 S:10bit
10 位立即数,符号扩展
27 16bit
表示 16 位立即数
28 0:16bit
16 位立即数,零扩展
29 S:16bit
16 位立即数,符号扩展
30 22bit
表示 22 位立即数
31 0:22bit
22 位立即数,零扩展
32 S:22bit
22 位立即数,符号扩展
33 LSb
最低有效位
34 LSB
最低有效字节
35 LSW
最低有效字
36 MSb
最高有效位
37 MSB
最高有效字节
38 MSW
最高有效字
39 OBJ
对于某条指令,位 OBJMODE 的状态
40 N
重复次数(N=0,1,2,3,4,5,6⋯)
41 {}
可选字段
42 =
赋值
43 ==
等于
44
在应用程序的开发过程当中少不了的就是算术运算还有比较运算,当然在汇编语言编
程的时候也是一样的,在汇编语言当中进行算术运算的操作并不像 C/C++那样直观、方
便,需要掌握众多的助记符才行,接下来会通过表 6-2 来说明一下关于算术方面的助记符
以及与其相关的标志位。
表 2 影响指令的判断条件的说明
序号
COND
语法 描述 测试标志位
1 0000 NEQ
不等于
Z=0
2 0001 EQ
等于
Z-1
3 0010 GT
大于(有符号减法) Z=0 且 N=1
4 0011 GEQ
大于或等于(有符号减法)
N=0
5 0100 LT
小于(有符号减法)
N=1
6 0101 LEQ
小于或等于(有符号减法) Z=1 或 N=1
7 0110 HI
高于(无符号减法) C=1 且 Z=0
8 0111
HIS,C 高于或相同(无符号减法)
C=1
9 1000 LO,NC
低于(无符号减法)
C=0
10 1001 LOS
低于或相同(无符号减法) C=1 或 Z=0
11 1010 NOV
无溢出
V=0
12 1011 OV
溢出
V=1
13 1100 NTC
测试位为 0
TC=0
14 1101 TC
测试位为 1
TC=1
15 1110 NBIO
BIO 输入等于零
BIO=0
16 1111 UNC
无条件
在汇编程序当中实现乘法操作时一件非常不简单的事,由于是属于纯寄存器操作,因
此,开发人员需要准备保存乘法结果的地址,在表 6-1 当中讲解操作数符号的时候有一个
关于乘积操作的符号—PM,那么它的结果保存是如何执行的呢?下面通过表 6-3 来说明一
下。
表 3PM 与结果保存方式
X 序号
+4
P(31:4)=相乘结果中低 38 位的(27:0),P(3:0)+0
1 +1
P(31:1)=相乘结果中低 38 位的(30:0),P(31)+0
2 0
P(31:0)=相乘结果中低 38 位的(31:0)
3 -1
P(31:0)=相乘结果中低 38 位的(32:1)
4 -2
P(31:0)=相乘结果中低 38 位的(33:2)
5 -3
P(31:0)=相乘结果中低 38 位的(34:3)
6 -4
P(31:0)=相乘结果中低 38 位的(35:4)
7 -5
P(31:0)=相乘结果中低 38 位的(36:5)
8 -6
P(31:0)=相乘结果中低 38 位的(37:6)
1.2 汇编语法指令描述
前一小节提到过,汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记
符,
它是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也可以有很
多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空格分开。
ARn:
n 为数值 0~7,ARn 指定下次的辅助寄存器。
ind:
选择一下 7 种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式使用)。
#:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数。
<<左移。
>>右移。
@:
当使用 C28x 语法时,64 位字段数据与通过“@”符号来表示,以帮助程序员理解当前正在
使用哪种寻址模式。
@@:
当使用 C28x 语法时,128 位字段数据页通过“@@”符号来表示。
loc16:16 位寻址方式指定地址单元的内容。
loc32:32 位寻址方式指定地址单元的内容。
#16bitsigned:16 位有符号立即数。
1.3 寻址方式
通过 6.1 节当中读者们应当对汇编语言编程有了一定的了解,仅仅了解了汇编语言的
操作符还是不过的,接下来就从汇编语言最根本的开始学习——寻址方式就是寻找操作数
或者操作数地址的方式,在存储器中,操作数或指令字写入或读出的方式,有地址指定方
式、相联存储方式或堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。
当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。C28x 系列 DSP 的
指
令集采用 7 种寻址方式:
a) 直接寻址方式:DP(数据页指针),在此方式中,16 位的 DP 寄存器被当做一
个固定的页指针,讲指令中提供 6 位或者 7 位的地址偏移量与 DP 寄存器中的值
组合起来就构成完整的地址。当访问具有固定地址的数据结构时,这种寻址方式
特别有用,例如,外设寄存器和 C/C++中的全局及静态变量。
b) 堆栈寻址方式:SP(堆栈指针),在这种方式下,16 位的 SP 指针被用来访问软
件堆栈的内容。C28x 系列的堆栈是从低端地址想高端地址生长的,SP 总是指向
下一个空的存储单元。当需要访问堆栈中的数据时,SP 的值减去指令中提供的 6
位偏移量作为被访问数据的地址和,而堆栈指针将在入栈后加 1,出栈前减 1.
c) 间接寻址方式:XAR0 到 XAR7(辅助寄存器指针),在该方式下,32 位的
XARn 寄存器被当做一般的数据指针来使用的。通过相应的指令可以实现操作后
XARn 加 1、操作前/后减 1,还可以配合 3 位偏移量或者其他 16 位寄存器实现
变址寻址。
d) 寄存器寻址方式:这种方式下,另一个寄存器可以是该次访问的资源或者目的操
作数。这样在 C28x 中既能实现寄存器到寄存器的操作。数据/程序/IO 空间寻址
方式:在这种方式下,存储器中操作数的地址被包含在指令中。
e) 程序空间间接寻址方式:某些指令可以通过指针来访问位于程序空间中的存储器
操作数。由于在 C28xCPU 中存储器是统一寻址的,所以单周期内可以读取两个
剩余32页未读,继续阅读
资源评论
chaliewenhao
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功