第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。

Slides:



Advertisements
Similar presentations
DSP技术及应用 Digital Signal Processor 数字信号处理器.
Advertisements

信息技术:硬件、软件、网络、数据库 计算机技术、多媒体技术、压缩技术...
2017年3月5日 单片机原理与应用 背景知识调查.
卷积 有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅立叶变换(FFT) 第8章 数字信号处理典型算法程序设计
第2章 微型计算机基本原理 2.1 数的编码和字符的表示 二进制数 二进制数向十进制数的转换:
1.1 计算机系统简介 1.2 计算机的基本组成 1.3 计算机硬件的主要技术指标 1.4 本书结构.
第2章 TMS320C54x的CPU结构和存储器配置 2.1 TMS320C54x DSP的结构 2.2 TMS320C54x的总线结构
第3章 MCS-51指令系统 3.1 简 介 指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。
DSP原理与应用 第4章 TMS320C55x的指令系统
逆向工程-汇编语言
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
第四章 指令系统及汇编语言程序设计.
本章分为七节,主要介绍: 3.1 指令格式及常用符号 C51的寻址方式 3.3 数据传送类指令(29条) 3.4 算术运算类指令(24条)
第5章 TMS320C54x汇编语言程序设计 内容提要 汇编语言程序设计是应用软件设计的基础,主要任务是利用汇编指令和伪指令编写源程序以完成指定的功能。 本章将结合例子介绍TMS320C54x汇编语言源程序设计的基本方法,涉及的内容包括: 汇编语言源程序的格式 常数、字符串、符号和表达式的规定.
第7章 汇编语言程序设计 7.1 程序流程控制 7.2 数据块传送 7.3 定点数的基本算术运算 7.4 长字运算和并行运算
总 复 习.
第6章 应用程序设计 内容提要 数字信号处理主要面向密集型的运算,包括乘法-累加、数字滤波和快速傅里叶变换等。’C54x具备了高速完成上述运算的能力,并具有体积小、功耗低、功能强、软硬件资源丰富等优点,现已在通信等许多领域得到了广泛应用。 本章结合数字信号处理和通信中最常见、最具有代表性的应用,介绍通用数字信号处理算法的DSP实现方法,主要包括:
第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.
7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第三章 DSP指令系统与特点 第一节 数据寻址方式 第二节 程序存储器地址的生成方式 第三节 流水线 第四节 指令系统概述.
‘C54x寻址方式 ‘C54x特殊寻址方式说明 ‘C54x指令集 ‘C54x特殊指令使用说明
8086 指令系统特点 可变长指令:指令格式比较复杂。
逆向工程-汇编语言
CPU结构和功能.
第2章 TMS320C54x的硬件结构及原理 TMS320C54x系列DSP是一种低功耗、高性能 的16位定点芯片
第四章 指令系统及汇编语言程序设计.
第3章 MCS-51单片机指令系统 3.1 指令概述 3.2 寻址方式 3.3 MCS-51系列单片机的指令系统.
Instructions: Language of the Machine
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
C语言程序设计 主讲教师:陆幼利.
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
第3章 指令系统和寻址方式 3.1指令系统概述 /8086CPU的寻址方式 3.3 指令的机器码表示方法(略)
第3章 MCS-51的指令系统 介绍MCS-51汇编语言的指令系统。 3.1 指令系统概述
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第9章 位 运 算.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第3章 TMS320LF240 x的CPU功能模块和时钟模块
第三章 MCS 51的硬件结构.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
实验2 中断模拟实验.
任务五 学习、应用控制转移类指令 单片机应用技术 认知1 掌握无条件转移指令格式及应用
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
College of Computer Science & Technology
学习目标 1、了解基本运算符 2、运算符优先级.
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
第二章:‘C5000 DSP硬件结构 在这一章中,我们介绍: TMS320C54XX硬件结构特点 ★
得技通电子 问题 三 判断题:.
第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第4章 汇编语言程序设计 本章结合C54x的软件开发过程,介绍DSP所采用的COFF目标文件格式、结构和规范。
4.3 汇编语言程序设计 顺序程序设计 顺序程序设计是最基本的程序设计。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。
认知1 掌握“与”、“或”和“异或”指令格式及应用
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
第3章 80C51单片机指令系统 教学基本要求: (1)、了解单片机的指令系统、编程语言等基本概念;
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
第9章 位 运 算.
Presentation transcript:

第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。 山东大学生物医学工程刘忠国

第3章 汇编语言指令系统 3.1 C54x汇编语言指令集介绍 3.2 寻址方式 3.3 C54x系列DSP的指令系统 第3章 汇编语言指令系统 3.1 C54x汇编语言指令集介绍 3.2 寻址方式 3.3 C54x系列DSP的指令系统 参考:TMS320C54x DSP Reference Set Volume 2: Mnemonic Instruction Set.pdf, spru172c, 2001, TI官网

3.1 C54x汇编语言指令集介绍 C54x汇编语言源程序指令包括: 汇编语言指令Assembly Language Instructions 汇编伪指令Assembler Directives 宏指令Macro Directives 本章介绍C54x DSP的汇编语言指令系统。与其它CPU的指令集相同,汇编语言指令又称为硬指令,它们在汇编和连接后形成可执行的机器码,供DSP进行运算和其它操作。 TMS320C54x assembly language source programs consist of source statements that can contain assembler directives, assembly language instructions, macro directives, and comments. TMS320C54x Assembly Language Tools User’s Guide--SPRU102F

3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符 序号 符 号 含 义 1 A 累加器A 2 ALU 符 号 含 义 1 A 累加器A 2 ALU 算术逻辑运算单元 3 AR 泛指通用辅助寄存器 4 ARx 指定某一辅助寄存器AR0~AR7 5 ARP ST0中的3位辅助寄存器指针 6 ASM ST1中的5位累加器移位方式位-16~15 7 B 累加器B 8 BRAF ST1中的块重复操作标志位 9 BRC 块重复操作计数器 10 BITC或bit_code 用于测试指令,指定数据存储器单元中的哪 一位被测试,取指范围:0~15 BIT Xmem, BITC

3.1.1 指令系统中的符号、缩写及操作符 (续) 3.1 C54x汇编语言指令集介绍 序号 符 号 含 义 11 C16 符 号 含 义 11 C16 ST1中的双16位/双精度算术运算方式位 12 C ST0中的进位位 13 CC 2位条件码(0CC3) CMPR CC, ARx 14 CMPT ST1中的ARP修正方式位 15 CPL ST1中的直接寻址编辑标志位 16 cond 表示一种条件的操作数,用于条件执行指令 17 [d],[D] 延时选项 18 DAB D地址总线 19 DAR DAB地址寄存器 20 dmad 16位立即数数据存储器地址(0~65535)

3.1.1 指令系统中的符号、缩写及操作符 (续) 3.1 C54x汇编语言指令集介绍 序号 符 号 含 义 21 Dmem 符 号 含 义 21 Dmem 数据存储器操作数 22 DP ST0中的数据存储器页指针(0DP511) 23 Dst 目的累加器(A和B) 24 dst_ 与dst相反的目的累加器 25 EAB E地址总线 26 EAR EAB地址寄存器 27 extpmad 23位立即数程序存储器地址 28 FRCT ST1中的小数方式位 29 hi(A) 累加器A的高阶位(AH或BH) 30 HM ST1中的保持方式位

3.1.1 指令系统中的符号、缩写及操作符 (续) INTR K; 0 ≤K ≤31 TRAP K; 0 ≤K ≤31 3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 31 IFR 中断标志寄存器 32 INTM ST1中的中断屏蔽位 33 K 少于9位的短立即数 34 k3 3位立即数(0k37) LD #k3, ARP 35 k5 5位立即数(-16k515) LD #k5, ASM 36 k9 9位立即数(0k9511) LD #k9, DP INTR K; 0 ≤K ≤31 TRAP K; 0 ≤K ≤31 IDLE K; 1 ≤K ≤3 LD #K, dst; 0 ≤K ≤255 RPT #K; 0 ≤K ≤255 FRAME K; –128 ≤K ≤127 37 lk 16位长立即数 38 Lmem 利用长字寻址的32位单数据存储器操作数 39 mmr,MMR 存储器映像寄存器 40 MMRx,MMRy 存储器映像寄存器,AR0~AR7或SP MVMM MMRx, MMRy

3.1.1 指令系统中的符号、缩写及操作符(续) 3.1 C54x汇编语言指令集介绍 序号 符 号 含 义 41 n 符 号 含 义 41 n XC指令后面的字数,取1或2 42 N 指定状态寄存器,N=0为ST0,N=1为ST1 43 OVA ST0中的累加器A溢出标志 44 OVB ST0中的累加器B溢出标志 XC n, cond [, cond [, cond] ] RSBX N, SBIT; 0SBIT15 45 OVdst 指定目的累加器(A或B)的溢出标志(注释中) 46 OVdst_ 另一个目的累加器(A或B)的溢出标志(注释中) 47 OVsrc 指定源累加器(A或B)的溢出标志(注释中) 48 OVM ST1中的溢出方式位 49 PA 16位立即数端口地址(0PA65535) 50 PAR 程序存储器地址寄存器

RND src [, dst] 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 51 PC 程序计数器 52 符 号 含 义 51 PC 程序计数器 52 pmad 16位立即数程序存储器地址(0pmad65535) 53 pmem 程序存储器操作数 54 PMST 处理器工作方式状态寄存器 55 prog 程序存储器操作数(c54x指令中没有使用) 56 [R] 舍入选项 57 rnd 舍入 ;Round的缩写 58 RC 重复计数器 59 RTN 快速返回寄存器 RND src [, dst] 60 REA 块重复结束地址寄存器 61 RSA 块重复起始地址寄存器 block-Repeat End Address register block-Repeat Start Address register

3.1.1 指令系统中的符号、缩写及操作符(续) 3.1 C54x汇编语言指令集介绍 序号 符 号 含 义 62 SBIT 符 号 含 义 62 SBIT 用于指定状态寄存器位的4位地址(0~15) 63 SHFT 4位移位值(0~15) 64 SHIFT 5位移位值(-16~15) RSBX N, SBIT; 0SBIT15 65 Sind 间接寻址的单数据存储器操作数 66 Smem 16位单数据存储器操作数 67 SP 堆栈指针寄存器 68 src 源累加器(A或B) BANZ[D] pmad, Sind(只出现于此指令) 69 ST0,ST1 状态寄存器0,状态寄存器1 70 SXM ST1中的符号扩展方式位 71 T 暂存器

3.1.1 指令系统中的符号、缩写及操作符(续) 3.1 C54x汇编语言指令集介绍 序号 符 号 含 义 71 T 暂存器 72 TC 符 号 含 义 71 T 暂存器 72 TC ST0中的测试/控制标志 73 TOS 堆栈顶部 74 TRN 状态转移寄存器(比较选择存储CSST单元内) CMPS src, Smem; 指令影响TRN(该寄存器用于Viterbi 算法) 75 TS 由T寄存器的5~0位所规定的移位数(-16~31) 76 uns 无符号数 77 XF ST1中的外部标志状态位 78 XPC 程序计数器扩展寄存器 79 Xmem 16位双数据存储器操作数, 用于双数据操作数指令和单数据操作指令 80 Ymem 16位双数据存储器操作数,用于双数据操作数指令

3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 81 – –SP 堆栈指针值减1 82 ++SP 堆栈指针值加1 3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 81 – –SP 堆栈指针值减1 82 ++SP 堆栈指针值加1 83 ++PC 程序计数器值加1 + + PC只出现在Table 2–14. Interrupt Instructions( TMS320C54x DSP Reference Set Volume 2: Mnemonic Instruction Set--spru172c ) INTR K ; – –SP, + + PC = TOS(非常见注释), TRAP K ; – –SP, + + PC = TOS, 表示(SP) –1 →SP ;(PC) +1 →TOS(常用TOS= + + PC )

指令系统中的运算符号及优先级如表3-2中所示 3.1.1 指令系统中的符号、缩写及操作符 指令系统中的运算符号及优先级如表3-2中所示 序号 符 号 运算功能 求值顺序 1 + - ~ ! 取正、取负、按位求补、 逻辑非 从右至左 2 * / % 乘法、除法、求模 从左至右 3 + - 加法、减法 4 ^ 指数 从左到右 5 << >> 左移、右移 从左至右 6 <  小于、小于等于 从左至右 7 >  大于、大于等于 8  != 不等于 9 & 按位与运算(AND) 从左至右 10 ∧ 按位异或运算(exclusive OR) 11 | 按位或运算(OR)

3.1 C54x汇编语言指令集介绍 3.1.2 汇编语言指令举例 本节以LD装载指令为例,说明指令的格式和其它一些有用信息。 (1)LD Smem, dst 汇编语法 操作数 指令代码 执行 状态位 说明 指令字长 周期数 1 D I A (2)LD Xmem, SHFT, dst 1 D X S H F T (3)LD #lk [, SHFT ], dst 1 D S H F T 16-bit constant

3.1.2 汇编语言指令举例: LD命令 汇编语法 操作数

3.1.2 汇编语言指令举例: LD命令 指令代码

3.1.2 汇编语言指令举例: LD命令 指令代码

3.1.2 汇编语言指令举例: LD命令 执行 状态位 说明

3.1.2 汇编语言指令举例: LD命令 注意事项

3.1.2 汇编语言指令举例: LD命令 指令字长 周期数 类型

3.1.2 汇编语言指令举例: LD命令

3.1.2 汇编语言指令举例: LD命令

3.2 寻址方式 3.2 寻址方式 C54x的寻址方式共有下列7种: (1)立即寻址 (2)绝对寻址 (3)累加器寻址 (4)直接寻址 (5)间接寻址 (6)存储器映像寄存器寻址 (7)堆栈寻址

3.2.1 立即寻址 立即寻址是指指令中的操作数是一个立即数,用#表示 l 短立即数—3位(k3)、5位(k5) 、8位(K)或9位(k9) l    长立即数—16(lk)位 LD #k3, ARP; 0 ≤K3 ≤7 LD #k5, ASM; -16 ≤K5 ≤15 LD #k9, DP; 0≤K ≤511 LD #lK [,SHFT], dst; LD #lK,16, dst; –32768≤lK≤32 767 INTR K; 0 ≤K ≤31 TRAP K; 0 ≤K ≤31 IDLE K; 1 ≤K ≤3 LD #K, dst; 0 ≤K ≤255 RPT #K; 0 ≤K ≤255 FRAME K; –128 ≤K ≤127 使用短(长)立即数的指令代码通常为一(两)个字长 例3-3 LD #4, DP ; 4→DP , 指令代码:EA04H LD #7850H,A ;7850H→A; 指令代码:F020H 7850H LD #78H,A ;78H→A; 指令代码:E850H

3.2.1 立即寻址 可使用立即寻址的指令及立即数的位数如下表所示: 3位或5位立即数 8位 立即数 9位 LD FRAME RPT INTR TRAP IDLE 16位 立即数 ADD BITF OR ST ADDM CMPM ORM STM AND LD RPT SUB ANDM MAC RPTZ XOR XORM FRAME: Stack Pointer Immediate Offset; Syntax: FRAME K (SP)+K→SP

3.2 寻址方式 3.2.2 绝对寻址 绝对寻址有下列4种类型 : 数据存储器(dmad)寻址 程序存储器(pmad)寻址 I/O端口(PA)寻址 *(lk)寻址

3.2.2 绝对寻址 相关指令如下表所示: 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD MMR, dmad 程序存储器 (pmad)寻址 MVDP Smem, pmad MVPD pmad, Smem FIRS Xmem, Ymem, pmad pmad→PAR, While (RC)≠0, (B)+(A(32–16))×(Pmem addressed by PAR)→B, ((Xmem)+(Ymem))<<16→A, (PAR)+1→PAR, (RC) −1→RC (FIRS指令功能)

3.2.2 绝对寻址 绝对寻址方式 相关指令 程序存储器 (pmad)寻址 MACD Smem, pmad, src MACP Smem, pmad, src I/O端口(PA)寻址 PORTR PA, Smem PORTW Smem, PA *(lk)寻址 可用于所有支持单数据操作数(Smem) 的指令 pmad→PAR, (Smem)×(Pmem addressed by PAR) +(src)→src, (Smem)→T, (Smem)→Smem+1, If (RC)≠0, (PAR)+1→PAR (MACD指令功能) MACP与MACD指令唯一的区别是不执行内存延迟 (Smem)→Smem+1。 MVDK *(200h),AR2

3.2 寻址方式 3.2.3 累加器寻址 有两条指令采用这种寻址方式 : 累加器寻址指令 解释 READA Smem 的数据存储器中 WRITA Smem 将Smem指定的数据存储器中的内容送入A所指出的程序存储器中 A(22-0)→PAR , (Smem) (Pmem addressed by PAR), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR 与重复指令RPT配合使用,便于两个空间的连续数据读写。

第3章 汇编语言指令系统 3.2.3 累加器寻址 例3-7 程序存储器中有一个常数表格,首地址为TABLE, 长度是10个字。要求把该表格读入首地址为BUFFER的数据存储器区中。 实现该功能的程序段如下: LD #TABLE,A ;#TABLE→A STM #BUFFER,AR3 ;#BUFFER→AR3 RPT #9 ;后面一条指令将运行10次, RC=9 READA *AR3+ ; A →PAR, ((PAR))→(AR3) , ; (AR3)+1→AR3 ; If (RC)≠0, (RC)–1→RC,(PAR)+1→PAR

3.2 寻址方式 3.2.4 直接寻址 Direct Memory Address (dma, DMA) 7位 直接寻址是指利用指令中的地址偏移量dma与数据页指针DP或堆栈指针SP组合,找到数据空间中的一个16位地址的方式。 以DP和SP为基地址的直接寻址方式指令代码格式: 15 ~ 8 7 6 ~ 0 操 作 码 I = 0 数据存储器地址偏移(dma) I = 0表示直接寻址 ;I = 1表示间接寻址。

3.2 寻址方式 3.2.4 直接寻址 CPL=0时: 以DP为基地址的直接寻址方式 直接寻址 指 令 15~8 7 6~0 操作码 I=0 指 令 15~8 7 6~0 操作码 I=0 dma 页指针DP (位于ST0中) 9位数据页指针DP 16位数据 存储器地址 9位数据页指针DP dma 高9位 低7位

3.2 寻址方式 3.2.4 直接寻址 CPL=1时: 以SP为基地址的直接寻址方式 直接寻址 指 令 15~8 7 6~0 操作码 I=0 指 令 15~8 7 6~0 操作码 I=0 dmad 16位堆栈指针SP 堆栈指针SP + dmad 16位数据 存储器地址 16位: SP + dmad 低7位

3.2 寻址方式 3.2.4 直接寻址 例3-8 下列程序段实现的功能是:将两个数据存储单元01E0h和01E1h中的内容相加,然后把结果送入A。 RSBX CPL ;CPL=0,采用DP方式。 LD #3,DP ;DP指向第3页。 LD @60h,A ;dma=60h,(01E0h)→A ADD @61h,A ; dma=61h , ((A))+(01E1h)→A @60h: dma DP @常省略。 16位数据 存储器地址 0000 0001 1 110 0000 0 1 E 0 h

3.2.5 间接寻址 间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。 单操作数寻址 LD *AR1, A 双操作数寻址 MAC *AR5-, *AR4+[AR6],A, B

3.2.5 间接寻址 (1)单操作数间接寻址址 LD *AR1, A 单操作数寻址是一条指令中,只有一个存储器操作数(即从存储器中只存取一个操作数),其指令的格式: 15 ~ 8 7 6 ~ 3 2 ~ 0 操 作 码 I = 1 MOD ARF Operand Address Modifications Auxiliary Register Field 其中: 2~0位定义寻址所用的辅助寄存器(如AR0~AR7)。 6~3位为地址调整,定义了间接寻址的类型(表3-4); 第7位I=1,表示指令的寻址方式为间接寻址; 15~8位是指令的操作码;

3.2.5 间接寻址 单操作数寻址: 单操作数寻址结构图如下所示. 操作数调整源 单操作数寻址: 单操作数寻址结构图如下所示. 操作数调整源 Auxiliary Register Arithmetic Units 操作 双操作数寻址无lk BK: Circular-buffer size register

3.2.5 间接寻址 表3-4 单操作数寻址 地址存放情况及地址调整功能共16种: 操作句法 功 能 说 明 * ARx 地址=ARx 单操作数寻址 地址存放情况及地址调整功能共16种: 操作句法 功 能 说 明 * ARx 地址=ARx ARx的内容为数据存储器地址 * +ARx ARx=ARx+1 地址=ARx+1 ARx中的地址加1后,再寻址,只用于写 * ARx- 地址=ARx ARx=ARx-1 寻址结束后,ARx地址减1 * ARx+ 地址=ARx ARx=ARx+1 寻址结束后,ARx地址加1 * ARx-0 地址=ARx ARx=ARx-AR0 寻址结束后,从ARx中减去AR0的值 * ARx+0 地址=ARx ARx=ARx+AR0 寻址结束后,把AR0加到ARx 中

3.2.5 间接寻址 单操作数寻址 表3-4(续) 操作句法 功 能 说 明 *ARx-0B 地址=ARx ARx=B(ARx-AR0) 功 能 说 明 *ARx-0B 地址=ARx ARx=B(ARx-AR0) 寻址结束后,用位倒序进位方法从ARx中减去AR0值 *ARx+0B ARx=B(ARx+AR0) 寻址结束后,用位倒序进位的方法将 AR0加到ARx中 *ARx-% 地址=ARx ARx=Circ(ARx-1) 寻址结束后,ARx中的地址值按循环减的方法减1 *ARx+% ARx=Circ(ARx+1) 寻址结束后,ARx中的地址值按循环加的方法加1 *ARx-0% 地址=ARx ARx=Circ(ARx-AR0) 寻址结束后,按循环减的方法从ARx中减去AR0中的值 *ARx+0% 地址=ARx ARx=Circ(ARx+AR0) 寻址结束后,按循环加的方法从AR0中的值加到ARx

3.2.5 间接寻址 单操作数寻址 表3-4(续) 操作句法 功 能 说 明 *ARx(lk) 地址=ARx+lk ARx=ARx 功 能 说 明 *ARx(lk) 地址=ARx+lk ARx=ARx 以ARx与16位数之和作为地址,寻址结束后,ARx中的值不变 $ *+ARx(lk) ARx=ARx+lk 将一个16位带符号数加到ARx,然后寻址 $ *+ARx(lk)% 地址=Circ(ARx+lk) ARx=Circ(ARx+lk) 将一个16位带符号数按循环加的方法加至ARx,然后再寻址$ * (lk) 地址=lk 利用16位无符号数作为地址,寻址数据存储器$ $不用于MMR

3.2 寻址方式 3.2.5 间接寻址 位反向寻址 位反向寻址是专门为快速傅立叶变换FFT而设计的。 例 3-9 求01101110b+00100100b

3.2.5 间接寻址 位反向寻址:4位二进制数的原始地址与位反向地址的对应关系如表3-5所示: 表3-5 正常顺序 原始地址 位反向地址 位反向顺序 0000 1 0001 1000 8 2 0010 0100 4 3 0011 1100 12 5 0101 1010 10 6 0110 7 0111 1110 14

3.2.5 间接寻址 位反向寻址 表3-5(续) 正常顺序 原始地址 位反向地址 位反向顺序 8 1000 0001 1 9 1001 10 1010 0101 5 11 1011 1101 13 12 1100 0011 3 14 1110 0111 7 15 1111

3.2.5 间接寻址 循环寻址 示意图: 使2 N﹥BK成立的最小N 低N位为0 例如: *AR1+% BK=20, 则N=5,即基地址EFB的低5 位为0,设EFB=1000h。 在初始化编程中将20→BK; 地址指针为AR1, 1000h→AR1 地址索引index = index + step index: AR1的低5位 这里step = +1,当index变化到19(13h) 时,再做index = index + step时就会 使index等于BK里的值20, 因此进行index = index + step – BK 的操作,使得index=0,也就是使 AR1=1000h,又回到基地址EFB的位 置,从而形成了循环寻址。 使2 N﹥BK成立的最小N 低N位为0 EFB 0  <BK BK=20 EOB

3.2.5 间接寻址 循环寻址算法如下: If 0  index+step< BK; index=index+step; Else if index+step  BK; index=index+step-BK; Else if index+step < 0; index=index+step+BK。

3.2.5 间接寻址 ② 双操作数间接寻址 ADD Xmem,Ymem, dst ST src, Ymem || LD Xmem, dst 用途:用在完成两个读或一个读且一个写的指令中。 说明:该指令只有一个字长,只能以间接寻址的方式工作。 格式如下: 例如 ADD *AR2+0%, *AR3–, A 其中,15~8位:指令操作码; 7~6位为Xmod,定义用于访问Xmem操作数间接寻址方式的类型 (见表3-6);5~4位为Xar,确定了包含Xmem地址的辅助寄存器; 3~2位为Ymod,定义了用于访问Ymem操作数的间接寻址方式的类型;1~0位为Yar,确定了包含Ymem的辅助寄存器。 ST src, Ymem || LD Xmem, dst

3.2.5 间接寻址 ②双操作数寻址 双操作数寻址结构图如下所示: 双操作数寻址无lk

3.2.5 间接寻址 ②双操作数寻址 表3-6双操作数寻址有4种地址存放情况和地址调整功能 : Xmod or Ymod 操作码 语法 功 能 说 明 00 * ARx 地址=ARx ARx中的内容是数据存储器地址 01 * ARx- ARx=ARx-1 寻址后,ARx的地址减1 10 * ARx+ ARx=ARx+1 寻址后,ARx的地址加1 11 * ARx+0% ARx=circ(ARx+AR0) 寻址后,AR0以循环寻址方式加到ARx中去 BK=0, 循环寻址等效于非循环寻址。 * ARx+0%等效*ARx+0 失效

3.2.5 间接寻址–特别实例 例3-10 双操作数间接寻址指令举例 MAC[R] Xmem, Ymem, src [, dst ]; 第3章 汇编语言指令系统 3.2.5 间接寻址–特别实例 例3-10 双操作数间接寻址指令举例 MAC[R] Xmem, Ymem, src [, dst ]; (Xmem) × (Ymem) + (src) → dst,(Xmem) → T 具体实现的指令如下: MAC *AR5+, *AR4+,A, B; ((AR5)) ×((AR4))+(A)→B, ((AR5))→T, (AR5)+1→AR5, (AR4)+1→AR4 ;

3.2 寻址方式 3.2.6 存储器映像寄存器寻址 存储器映像寄存器寻址是一种直接访问存储器映像寄存器MMR(地址00~7Fh)的方式,可以用来修改MMR的值。 有8条指令可以使用存储器映像寄存器寻址:

3.2 寻址方式 3.2.6 存储器映像寄存器寻址 LDM MMR,dst MVDM dmad,MMR MVMD MMR,dmad 存储器 MVMM MMRx,MMRy POPM MMR PSHM MMR STLM src,MMR STM #lk,MMR MMRx: AR0–AR7, SP MMRy: AR0–AR7, SP

3.2 寻址方式 3.2.7 堆栈寻址 下列4条指令使用堆栈寻址: 堆 栈 寻 址 PSHD Smem PSHM MMR POPD Smem POPM MMR

3.3 C54x系列DSP的指令系统 3.3 C54x系列DSP的指令系统 C54x的汇编语言指令集共有129条基本指令, 按完成的功能可以分为6类: 数据存取指令 (共28条) 算术运算指令 (共42条) 逻辑运算指令(共17条) 控制程序转移指令(共31+3条) 重复操作指令(共3条(包含于上面类) 并行操作指令(共8条)

3.以上包括32位长操作数的加载、存储指令(2条) 3.3 C54x系列DSP的指令系统 3.3.1 数据存取指令 (表3-7 共28条) 本节只介绍非并行的数据存取指令,包括 : 1. 加载指令 (6条细分为21分条) 2. 存储指令 (10条细分为18分条) 4. 混合加载和存储指令(12条) 3.以上包括32位长操作数的加载、存储指令(2条) 1. 加载指令的 6条助记符(Mnemonics): LD(16分条), DLD, LDM,LDR, LDU, LTD

1. 加载指令 (共6条) LD Smem, dst 以累加器A或B为目标操作数的LD指令 LD Smem, TS, dst 1. 加载指令 (共6条) 以累加器A或B为目标操作数的LD指令 以累加器 A或B为 目标操作数 的LD指令 LD Smem, dst LD Smem, TS, dst LD Smem, 16, dst LD Smem [, SHIFT ], dst TS: T的5–0位表示的移位值 (–16≤TS≤31) LD Xmem, SHFT, dst (1条) LD #K, dst LD #lk [, SHFT ], dst LD #lk, 16, dst LD src, ASM [, dst ] LD src [, SHIFT ], dst

3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) 以暂存器 LD Smem, T 以暂存器T或ST0、ST1的DP、ASM及ARP字段为目标操作数的LD指令 以暂存器 T或ST0、 ST1的DP、 ARP及ASM字段为目标 操作数的 LD指令 LD Smem, T LD Smem, DP LD Smem, ASM (1条续) LD #k9, DP LD #k5, ASM LD #k3, ARP

1. 加载指令 (共6条) DLD Lmem,dst 32位长操作数的加载指令 dst = Lmem,将Lmem所指定的单数据存储器中的32位数据送入累加器A或B中。 功能: LDM MMR,dst dst = MMR 将MMR寄存器中的数据,送 入累加器dst。 功能: LDR Smem,dst dst(31-16)=(Smem)<<16, dst(15)=1,dst(14-0)=0; 功能: (Smem) << 16 +1 << 15 → dst(31–16) Load Memory Value in Accumulator High With Rounding

3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) LDU Smem,dst 功能:dst = uns(Smem) 将Smem所指定的单数据存储器的无符号数据,送入累加器。 LTD Smem 功能:T=Smem,(Smem+1)= Smem 将单数据存 储器Smem的数据,送入寄存器T,并memory delay。

1. 加载指令 (共6条) 例3.11 LD *AR3, A 1)当SXM=0时,进行无符号数的加载 指令执行前 指令执行后 数据存储器 0200H 95A6 A 00 0000 95A6 SXM 0 AR3 0200 数据存储器 0200H 95A6 2)当SXM=1时,进行有符号数的加载 指令执行前 指令执行后 A 00 0000 0000 SXM 1 AR3 0200 数据存储器 0200H 95A6 A FF FFFF 95A6 SXM 1 AR3 0200 数据存储器 0200H 95A6

1.加载指令(共6条) 例3.12 LD A, 4, B 1) OVM=0时,对溢出不进行处理,仅通过OVB=1反映溢出 指令执行前 指令执行后 A 00 7FFF 8000 B 00 0000 FFFF OVB 0 OVM 0 A 00 7FFF 8000 B 07 FFF8 0000 OVB 1 OVM 0 2) OVM=1时,对溢出进行处理: 指令执行前 指令执行后 A 00 7FFF 8000 B 00 0000 FFFF OVB 0 OVM 1 A 00 7FFF 8000 B 00 7FFF FFFF OVB 1 OVM 1

直接寻址 ST1 1. 加载指令 例3.13 LD @0,ASM CPL=0 0001 0010 0011 0100 指令执行前 指令执行后 第3章 汇编语言指令系统 ST1 1. 加载指令 例3.13 LD @0,ASM CPL=0 0180H 0001 0010 0011 0100 指令执行前 指令执行后 ASM 00 DP 003 数据存储器 0180H 1234 ASM 14 DP 003 数据存储器 0180H 1234 0000 0001 1000 0000 16位数据 存储器地址 0 1 8 0 h DP @ 0 直接寻址 CPL=0

2. 存储指令 (共10条) (表3-7 ) 以累加器A, B或T, TRN, #lk, BRC为源操作数; 以数据存储器Smem, Xmem, Lmem或MMR为目标操作数; 存储指令的 10条助记符(Mnemonics): ST, STLM, STM , STH, STL, DST, CMPS, SACCD, SRCCD, STRCD 1: ST T, Smem 2: ST TRN, Smem 3: ST #lk, Smem; #有时可省略 1) ST

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) STLM src, MMR; 赋值的指令 STLM src, MMR; MMR = src(15-0),将累加器的低16 位送入MMR,是1字1周期指令。 STM #lk, MMR; MMR = #lk, 将长立即数送入MMR,是2字2周期指令。

2. 存储指令 (共10条) 2) 为MMR赋值的指令 例 3.14 STLM A, *AR2 指令执行前 指令执行后 AR5(15h) 3F69 A 00 1234 5678 AR2 0015 AR5 5678 STLM和STM 可访问位于数据存储器 0页上的MMR 和暂存寄存器0060h~007Fh。对其进行直接寻址或间接寻址时,不管当前DP或 ARx的值如何,在指令执行后,DP值或ARx的高9位都被强制清0.

2. 存储指令 2) 为MMR赋值的指令 例 3.15 STM #1357H, *AR4+ 指令执行前 指令执行后 AR0 0000 STM #lk, MMR; #有时可省略 例 3.16 STM #2468H, 60H 指令执行前 指令执行后 0060H 0000 0060H 2468

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) STH src, Smem STH src, ASM, Smem 3) STH和STL指令 STH和 STL指令 STH src, Smem STH src, ASM, Smem STH src, SHFT, Xmem STH src [, SHIFT ], Smem STL src, Smem STL src, ASM, Smem STL src, SHFT, Xmem STL src [, SHIFT], Smem

2. 存储指令 (共10条) 3) STH和STL指令 例 3.17 设累加器(A)=FF 9876 5432H STL A,8,da (da)=3200H STL A,-8,da (da)=7654H STH A,8,da (da)=7654H (da)=FF98H STH A,-8,da (da)=00FFH (SXM=0) STH A,-16,da (da)=FFFFH (SXM=1) STH A,-16,da If SXM = 0, bit 39 of src is copied in the MSBs of the data-memory location. If SXM = 1, the sign-extended value with bit 39 of src is stored in the MSBs of the data-memory location after being right-shifted by the exceeding guard bit margin.

CMPS src, Smem;比较选择累加器(src)的高、低字 值,把最大值放到存储器(Smem)中; 4)比较选择存储与条件存储指令: CMPS src, Smem;比较选择累加器(src)的高、低字 值,把最大值放到存储器(Smem)中; SACCD src, Xmem, cond; if(cond), Xmem= src<<(ASM-16) , cond:AEQ ANEQ AGT AGEQ ALT ALEQ SRCCD Xmem, cond; if(cond) Xmem= BRC STRCD Xmem, cond; if(cond) Xmem= T 移位后src的低字 值 例: SACCD A, *AR3+, ALT 移位后src的低字 值 A=FF FE00 C321 ASM=01 AR3=0202 *(0202)=0101 A=FF FE00 C321 ASM=01 AR3=0202 *(0202)=FC01

3.3 C54x系列DSP的指令系统 DLD Lmem, dst 3. 32位长操作数的加载、存储指令及数据存放格式 3. 32位长操作数的加载、存储指令及数据存放格式 32位 长操作数 的加载、 存储指令 及数据 存放格式 DLD Lmem, dst 在单周期内同时利用CAB、CB和AB、DB总线将32位Lmem读入累加器。是1字1周期指令。 DST src, Lmem 两次使用EAB、EB总线将累加器的内容分别写入高16位和低16 位数据存储器。是1字2周期指令。

3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 长操作数指令中给出的地址总是指向数据高有效字 3. 32位长操作数的加载、存储指令及数据存放格式 长操作数指令中给出的地址总是指向数据高有效字 C54x的32位长操作数有两种数据存放格式: 偶地址存放和奇地址存放 偶地址存放是指数据的高有效字存放在偶地址且是较低的地址,低有效字存放在奇地址且是较高的地址 奇地址存放是指数据的高有效字存放在奇地址且是较高的地址,低有效字存放在偶地址且是较低的地址 一般推荐使用偶地址存放格式

例3-18 存放格式对数据存储的影响 DST B, *AR3+ 1) 偶地址存放 指令执行前 指令执行后 B 00 6CAC BD90 AR3 0100 数据存储器 0100H 0000 0101H 0000 B 00 6CAC BD90 AR3 0102 数据存储器 0100H 6CAC 0101H BD90 2) 奇地址存放 指令执行前 指令执行后 B 00 6CAC BD90 AR3 0101 数据存储器 0100H 0000 0101H 0000 B 00 6CAC BD90 AR3 0103 数据存储器 0100H BD90 0101H 6CAC

例3-19 存放格式对数据加载的影响 DLD *AR3+, B 1) 偶地址存放 指令执行前 指令执行后 B 00 0000 0000 AR3 0100 数据存储器 0100H 6CAC 0101H BD90 B 00 6CAC BD90 AR3 0102 数据存储器 0100H 6CAC 0101H BD90 2) 奇地址存放 指令执行前 指令执行后 B 00 0000 0000 AR3 0101 数据存储器 0100H 6CAC 0101H BD90 B 00 BD90 6CAC AR3 0103 数据存储器 0100H 6CAC 0101H BD90

4. 混合加载和存储指令(共12条) 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDD Xmem, Ymem 4. 混合加载和存储指令(共12条) 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDD Xmem, Ymem MVMM MMRx, MMRy MVDK Smem, dmad MVKD dmad, Smem MVDM dmad, MMR MVMD MMR, dmad 程序存储器 (pmad)寻址 MVDP Smem, pmad MVPD pmad, Smem I/O端口(PA)寻址 PORTR PA, Smem PORTW Smem, PA

3.3 C54x系列DSP的指令系统 4. 混合加载和存储指令 累加器寻址指令 解释 READA Smem A中内容为程序存储器地址,将 4. 混合加载和存储指令 累加器寻址指令 解释 READA Smem A中内容为程序存储器地址,将 该地址中的数据送入Smem指定 的数据存储器中 WRITA Smem 将Smem指定的数据存储器中的内容送入A所指出的程序存储器中 A→PAR , (Pmem addressed by PAR) (Smem), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR

3.3 C54x系列DSP的指令系统 3.3.2 算术运算指令(共42条) C54x的算术运算指令包括: 基本算术运算指令 (共12条) 特殊运算指令 (共15条) 双字(32位)算术运算指令 (共6条) 乘累加和乘累减指令 (共9条)

基本算术运算指令(共12条) 加法指令 操作 字数 周期数 ADD Smem , src src=src+Smem 1 ADD Smem , TS,src src=src+Smem<<TS ADD Smem ,16 ,src[,dst] dst=src+Smem<<16 ADD Smem,[,SHIFT],src[,dst] dst=src+Smem<< SHIFT 2 ADD Xmem ,SHFT ,src src=src+Xmem<< SHFT 1 ADD Xmem ,Ymem ,dst dst=Xmem<<16+Ymem<<16 1 ADD #lk,[,SHFT],src[,dst] dst=src+#lk<< SHFT 2 ADD #lk,16,src[,dst] dst=src+#lk<< 16 ADD src,[,SHIFT][,dst] dst=dst+src<< SHIFT 1 2 ADD src,ASM[,dst] dst=dst+src<< ASM ADDC Smem , src src=src+Smem+C 1 ADDM #lk, Smem Smem=Smem+#lk 2 ADDS Smem , src src=src+uns(Smem) 1

基本算术运算指令(共12条)(续) 减法指令 操作 字数 周期数 SUB Smem , src src=src-Smem 1 SUB Smem , TS,src src=src-Smem<<TS SUB Smem ,16 ,src[,dst] dst=src-Smem<<16 SUB Smem,[,SHIFT],src[,dst] dst=src-Smem<< SHIFT 2 SUB Xmem ,SHFT ,src src=src-Xmem<< SHFT 1 SUB Xmem ,Ymem ,dst dst=Xmem<<16-Ymem<<16 1 SUB #lk,[,SHFT],src[,dst] dst=src-#lk<< SHFT 2 SUB #lk,16,src[,dst] dst=src-#lk<< 16 SUB src,[,SHIFT][,dst] dst=dst-src<< SHIFT 1 SUB src,ASM[,dst] dst=dst-src<< ASM SUBB Smem , src src=src-Smem-C 1 SUBC Smem,src (用于除法) If(src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1 Else src=src<<1 1 SUBS Smem , src src=src-uns(Smem) 1

基本算术运算指令(共12条)(续) 乘法指令 操作 字数 周期数 MPY Smem , dst dst=T*Smem 1 MPYR Smem , dst dst=rnd(T*Smem) MPY #lk ,dst dst= T*#lk 2 MPY Smem ,#lk ,dst dst= Smem *#lk ,T=Smem 2 MPY Xmem ,Ymem ,dst dst= Xmem *Ymem,T=Xmem 1 MPYA dst dst=T*A(32-16) 1 MPYA Smem B= Smem*A(32-16),T=Smem MPYU Smem , dst dst=uns(T )*uns(Smem) 1 SQUR Smem , dst dst= Smem *Smem ,T=Smem 1 SQUR A , dst dst=A(32-16)*A(32-16) 1

基本算术运算指令 例3-20 设被除数1000在数据空间0060h单元中,除数5在0061h中。用条件减法指令SUBC完成16位/16位无符号数除法1000÷5,并将结果存放在0062h单元。 实现的程序段如下: RSBX SXM ;无符号数除法,不进行符号扩展 STM #0060h, AR1 ;地址指针指向被除数 LD *AR1+, A ;被除数1000(3E8h)→A RPT #15 ;下条指令重复执行16次 SUBC *AR1 , A ;进行条件减法 MAR *AR1+ ; AR1+1指向商单元,因不能在前行调整AR1 STL A, *AR1 ;将商装入0062h单元 If (src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1 Else src=src<<1

调试程序时可增加存储被除数、除数的指令和loop循环 例3-20 设被除数1000在数据空间0060h单元中,除数5在0061h中。用条件减法指令SUBC完成16位/16位无符号数除法1000÷5,并将结果存放在0062h单元。 ;助记符不能顶格书写 ST #03E8h, *(0060h) ;0060h存储被除数 ST #05h, *(0061h) ;0061h存储除数 RSBX SXM ;无符号数除法,不进行符号扩展 STM #0060h, AR1 ;地址指针指向被除数 LD *AR1+, A ;被除数1000(3E8h)→A RPT #15 ;下条指令重复执行16次 SUBC *AR1 , A ;进行条件减法 MAR *AR1+ ; AR1+1指向商单元,因不能在前行调整AR1 STL A, *AR1 ;将商装入0062h单元 LOOP: NOP B LOOP

3.3.2 算术运算指令(共42条) 2. 特殊运算指令(共15条) 特殊运算指令 操作 字数 周期数 ABS src [,dst ] dst = |src | 1 ABDST Xmem , Ymem B = B + |A(32-16)|, A = (Xmem-Ymem)<<16 1 SQDST Xmem ,Ymem B = B + A(32-16)*A(32-16) A = (Xmem -Ymem)<<16 1 CMPL src [,dst ] dst = src 1 DELAY Smem (Smem)→Smem +1 1 FIRS Xmem ,Ymem ,Pmad B = B +A(32–6)*(Pmad), A = (Xmem +Ymem)<<16 2 3 LMS Xmem ,Ymem B = B + Xmem *Ymem, A = (A +Xmem<<16)+215 1

3.3.2 算术运算指令(共42条) 2. 特殊运算指令(共15条)(续) 特殊运算指令 功 能 字数 周期数 MAX dst 2. 特殊运算指令(共15条)(续) 特殊运算指令 功 能 字数 周期数 MAX dst dst = max(A,B) 1 MIN dst dst = min(A,B) NEG src [,dst ] dst = -src 1 EXP src T = 冗余符号位数(src)-8 1 NORM src [,dst ] dst = src<<TS, dst = norm (src ,TS) 1 POLY Smem B = Smem<<16,(Smem系数,T未知数) A = rnd(A (32–16)*T + B ) 1 spru172c :2–6. Application-Specific Instructions RND src [,dst ] dst = src +215 1 SAT src Saturate(src) 1

3. 双字(32位)算术运算指令(共6条) 双字指令 操作 字 数 C16 = 0 C16 = 1 DADD Lmem, src 3. 双字(32位)算术运算指令(共6条) 双字指令 操作 字 数 周 期 C16 = 0 C16 = 1 DADD Lmem, src [ , dst ] dst = Lmem + src dst(39~16) = Lmem(31~16)+src(31~16) dst(15~0) = Lmem(15~0) + src(15~0) 1 DSUB Lmem, src src = src – Lmem src (39~16) = src(31~16) – mem(31~16) src (15~0) = src(15~0) – mem(15~0) 1 DRSUB Lmem, src src = Lmem– src src(39~16) = Lmem(31~16) –src(31~16) src(15~0) = Lmem(15~0) –src(15~0) 1

3.3.2 算术运算指令(共42条) 3. 双字(32位)算术运算指令(共6条)(续) 双字指令 操作 字 数 C16 = 0 3. 双字(32位)算术运算指令(共6条)(续) 双字指令 操作 字 数 周 期 C16 = 0 C16 = 1 DSUBT Lmem, dst dst = Lmem– (T << 16 + T) dst(39~16) = Lmem(31~16) – T dst(15~0) = Lmem(15~0) – T 1 DSADT Lmem, dst dst = Lmem– (T << 16 + T) dst(39~16) = Lmem(31~16) –T dst(15~0)= Lmem(15~0) + T 1 DADST Lmem, dst dst=Lmem+ (T << 16 +T) dst(39~16) = Lmem(31~16) + T dst(15~0) = Lmem(15~0) – T 1

4. 乘累加和乘累减指令(共9条) 指令 操作 MAC Smem, src src = src + T * Smem 1 4. 乘累加和乘累减指令(共9条) 指令 操作 字数 周期数 MAC Smem, src src = src + T * Smem 1 MACR Smem, src src = rnd(src + T * Smem) MAC #lk, src [ , dst ] dst = src + T * #lk 2 MAC Smem, #lk, src [, dst] dst = src + Smem * #lk, T = Smem 2 MAC Xmem, Ymem, src [ , dst ] dst = src + Xmem * Ymem, T = Xmem 1 MACR Xmem, Ymem, src dst=rnd(src+Xmem*Ymem), T = Xmem SQURA幻灯片 92 Smem, src src = src + Smem * Smem, T = Smem 1 SQURS Smem, src src = src – Smem * Smem, T = Smem 1

4. 乘累加和乘累减指令(共9条)(续) 指令 操作 MACA Smem [ , B ] B = B + Smem * A(32~16), 4. 乘累加和乘累减指令(共9条)(续) 指令 操作 字数 周期数 MACA Smem [ , B ] B = B + Smem * A(32~16), T = Smem 1 MACAR Smem [ , B ] B=B+rnd( Smem*A(32~16)), T = Smem MACA T,src [ , dst ] dst = src + T * A(32~16) 1 MACAR T, src [ , dst ] dst = rnd(src + T * A(32~16)) MACD Smem, pmad, src src = src + Smem * pmad, T = Smem, (RC)≠0, (PAR)+1→PAR (Smem + 1) = Smem 2 3 MACP Smem, pmad, src src = src + Smem * pmad, T = Smem, (RC)≠0, (PAR)+1→PAR 2 3 MACSU Xmem,Ymem,src src=src+uns(Xmem)*Ymem T = Xmem 1

4. 乘累加和乘累减指令(共9条)(续) 指令 操作 MAS Smem, src src = src – T * Smem 1 字数 周期数 MAS Smem, src src = src – T * Smem 1 MASR Smem, src src = rnd(src – T * Smem) MAS Xmem, Ymem, src [ , dst ] dst = src – Xmem * Ymem, T = Xmem 1 MASR Xmem, Ymem, src dst =rnd(src–Xmem*Ymem) T = Xmem MASA Smem [ , B ] B = B – Smem * A(32~16), T = Smem 1 MASA T, src [ , dst ] dst = src – T * A(32~16) 1 MASAR T, src [ , dst ] dst =rnd(src–T*A(32~16))

指令MACD Smem, pmad, src 的操作框图 3.3.2 算术运算指令(共42条) 4. 乘累加和乘累减指令(共9条)(续) 对常用的乘累加指令的分析: MAC[R] MACA[R] MACP和MACD MACSU Xmem, Ymem, src 指令MACD Smem, pmad, src 的操作框图 如下图所示 :

[(Smem)×(PAR)]×2+(src)→src (Smem)×(PAR) +(src)→src 4. 乘累加和乘累减指令 MACD Smem, pmad, src 的操作框图 pmad→PAR 4. 乘累加和乘累减指令 NO: FRCT=1 FRCT=0? YES [(Smem)×(PAR)]×2+(src)→src (Smem)×(PAR) +(src)→src 重复计数器(RC) ≠ 0? NO YES (PAR)+1→PAR (MACD指令功能) pmad → PAR, (Smem)×(PAR) +(src)→src, (Smem)→T, (Smem)→Smem+1, If (RC)≠0, (PAR)+1→PAR (Smem)→T, (Smem)→Smem+1 RPT #K MACD *AR3–, COEFFS, A

(1) FRCT=0时, 执行指令MACD *AR1+,TABLE, A的情况 例3-21 乘累加指令举例。 (1) FRCT=0时, 执行指令MACD *AR1+,TABLE, A的情况 指令执行前 00 0000 1234 0000 A T 0100 TABLE 0064 FRCT AR1 程序存储器 0100h 1234 数据存储器 0101h 指令执行后 00 0007 2E84 1234 A T 0101 TABLE 0064 FRCT AR1 程序存储器 0100h 数据存储器 0101h 1234h×64h=71C50h 0111 0001 1100 0101 0000b ×2 1110 0011 1000 1010 0000b E 3 8 A 0 h (2)当FRCT=1时, 执行指令后,A= 00 000E 4AD4,其他相同。

第3章 汇编语言指令系统 3.3 C54x系列DSP的指令系统 3.3.3 逻辑运算指令(共17条) 逻辑运算指令包括: 第3章 汇编语言指令系统 3.3 C54x系列DSP的指令系统 3.3.3 逻辑运算指令(共17条) 逻辑运算指令包括: 布尔型指令(共6条) 移位指令 (共6条) 测试指令 (共5条)

AND #lk[,SHFT],src[,dst] dst = src&#lk<<SHFT 2 布尔型指令(共6条) 与指令 操作 字数 周期数 AND Smem , src src = src&Smem 1 AND #lk[,SHFT],src[,dst] dst = src&#lk<<SHFT 2 AND #lk,16,src[,dst] dst = src&#lk<<16 2 AND src[,SHIFT][,dst] dst=dst &src<<SHIFT 1 ANDM #lk, Smem Smem = Smem&#lk 2

dst=src | #lk<<SHFT 2 布尔型指令(共6条)(续) 或指令 操作 字数 周期数 OR Smem , src src = src | Smem 1 OR #lk[,SHFT],src[,dst] dst=src | #lk<<SHFT 2 OR #lk,16,src[,dst] dst = src | #lk<<16 OR src[,SHIFT][,dst] dst=dst |src<<SHIFT ORM #lk, Smem Smem = Smem | #lk 2

XOR #lk[,SHFT],src[,dst] dst = src  #lk<<SHFT 2 布尔型指令(共6条)(续) 异或指令 操作 字数 周期数 XOR Smem , src src = src  Smem 1 XOR #lk[,SHFT],src[,dst] dst = src  #lk<<SHFT 2 XOR #lk,16,src[,dst] dst = src  #lk<<16 XOR src[,SHIFT][,dst] dst=dst  src<<SHIFT XORM #lk, Smem Smem = Smem  #lk 2

dst = src << SHIFT {算术移位} SFTL src, SHIFT [, dst] 2. 移位指令(共6条) 移位指令共6条,都是单字单周期指令。 指令 操作 ROL src 带进位位C的循环左移 ROLTC src 带测试位TC的循环左移 ROR src 带进位位C的循环右移 SFTA src, SHIFT [, dst] dst = src << SHIFT {算术移位} SFTL src, SHIFT [, dst] dst = src << SHIFT {逻辑移位} SFTC src 条件移位指令 If (src)=0, 1→TC, else 若src(31)= src(30)则 src = src<<1 , 0→TC, 否则 1→TC

3.3 C54x系列DSP的指令系统 2. 移位指令 39 ~ 32 31 0 累加器src 保护位 C 39 ~ 32 31 0 2. 移位指令 带进位位C的循环左移ROL移位示意图如下: 39 ~ 32 31 0 累加器src 保护位 C 带进位位C的循环右移ROR移位示意图如下: 39 ~ 32 31 0 累加器src 保护位 C 保护位清零

3.3 C54x系列DSP的指令系统 2. 移位指令 带测试位TC的循环左移ROLTC移位示意图如下: 39 ~ 32 31 0 2. 移位指令 带测试位TC的循环左移ROLTC移位示意图如下: 39 ~ 32 31 0 累加器src 保护位 TC C 39 ~ 32 累加器src 保护位 比较ROL移位 C 保护位清零

逻辑移位指令SFTL src, SHIFT的操作示意图: 39 ~ 32 31 0 累加器src 保护位 0﹤SHIFT≤15时 C 39~32 31 0 累加器src 保护位 C -16≤ SHIFT<0时 C SHIFT=0时 保护位清零

算术移位指令SFTA src,SHIFT的操作示意图 : 3.3 C54x系列DSP的指令系统 算术移位指令SFTA src,SHIFT的操作示意图 : 39 累加器src 0﹤SHIFT≤15时 C 保护位与数据位一起移位,最高位移出到C

算术移位指令SFTA src,SHIFT的操作示意图 : 39 累加器src C -16≤ SHIFT<0,且SXM=0 累加器 39 Src C -16≤ SHIFT<0,且SXM=1 保护位与数据位一起移位 符号扩展

(1)当SXM=1时, 执行算术移位指令, 结果进行符号扩展。 例3-22 移位指令举例。SFTA A, -5, B (1)当SXM=1时, 执行算术移位指令, 结果进行符号扩展。 指令执行后 FF 8765 0055 FF FC3B 2802 A T 1 C SXM 指令执行前 FF 8765 0055 00 4321 1234 A B 1 C x SXM 1111 1111 1111 1100 0011 1011 0000 0000 0010b 1111 1111 1000 0111 0110 0000 0000 0101 0101b 0000 0 (2)当SXM=0时, 执行算术移位指令, 结果不进行符号扩展。 指令执行前 FF 8765 0055 00 4321 1234 A B C x SXM 指令执行后 FF 8765 0055 07 FC3B 2802 A T C 1 SXM

例3-22 移位指令举例。 (3)执行逻辑移位指令的情况。 SFTL A, -5, B 指令执行前 FF 8765 0055 C 指令执行后 FF 8765 0055 00 043B 2802 A T C 1 0000 0000 0000 0100 0011 1011 0000 0000 0010b 1111 1111 1000 0111 0110 0000 0000 0101 0101b

3. 测试指令 (共5条) 测试指令通常和条件转移等指令结合,实现程序转移,或用于检测数据的正、负极性,数据的位状态等。 测试指令 操作 3. 测试指令 (共5条) 测试指令通常和条件转移等指令结合,实现程序转移,或用于检测数据的正、负极性,数据的位状态等。 测试指令 操作 字数 周期数 BIT Xmem, BITC TC = Xmem(15 – BITC) 测试Xmem中指定的某位 1 BITF Smem, #lk TC= (Smem AND #lk) , 非0则1,测试Smem中指定的某些位 2 BITT Smem TC = Smem(15 – T(3~0)) 测试由T指定的位 1 CMPM Smem, #lk TC=(Smem==#lk) ,相等则1, 比较Smem与长立即数是否相等 2 CMPR CC, ARx ARx与AR0进行比较, CC成立, TC=1, 否则TC=0 1

3.3 C54x系列DSP的指令系统 3. 测试指令举例 例3-23 检测数据单元0060h中的数据低8位是否为全0。 3. 测试指令举例 例3-23 检测数据单元0060h中的数据低8位是否为全0。 STM #0060h, AR4 BITF *AR4, 00FFh;执行后若TC=0,说明该数据的低8位全为0 BITF Smem, #lk ; 测试Smem中指定的某些位 If ((Smem) AND #lk) = 0 Then TC=0, Else TC=1.

控制程序转移类指令的功能是改变程序执行的顺序,可划分为6类: 3.3 C54x系列DSP的指令系统 3.3.4 控制程序转移指令(共34条) 控制程序转移类指令的功能是改变程序执行的顺序,可划分为6类: 跳转指令 (共6条) 调用和返回指令(共11条) 中断指令 (共2条) 堆栈操作指令(共5条) 重复指令(共3条) 其它程序控制指令(共7条)

3.3.4 控制程序转移指令(共34条) 1. 跳转指令 (共6条)无条件转移和条件转移 跳转指 令分类 指令 操作 字数 周期数 近程无 B[D] pmad PC = pmad(15~0) 2 4/[2] BACC[D] src PC = src(15~0) 1 6/[4] 远程无 条件转移 FB[D] extpmad PC = pmad(15~0), XPC = pmad(22~16) 2 4/[2] FBACC[D] src PC = src(15~0), XPC = src(22~16) 1 6/[4] 近程条 件转移 BC[D] pmad, cond [ , cond [ , cond ] ] 若条件(cond(s))满足, 则PC = pmad(15~0) 2 5/3/ /[3] BANZ[D] pmad, Sind 若(Sind≠0) 则 PC = pmad(15~0) 2 4/2/ /[2]

条件转移指令的条件如表所示: 条件 指令中 的表示 说明 BIO*低 BIO BIO引脚电平为低 BIO*高 NBIO BIO引脚电平为高 C = 1 C 状态位C置位 C = 0 NC 状态位C清0 TC = 1 TC 测试位TC置位 TC = 0 NTC 测试位TC清0 (A) = 0 AEQ 累加器A等于0 (B)=0 BEQ 累加器B等于0 (A)≠0 ANEQ 累加器A不等于0 (B)≠0 BNEQ 累加器B不等于0 (A)﹥0 AGT 累加器A大于0 (B)﹥0 BGT 累加器B大于0 (A)≥0 AGEQ 累加器A大于等于0 (B)≥0 BGEQ 累加器B大于等于0 (A)﹤0 ALT 累加器A小于0 (B)﹤0 BLT 累加器B小于0 (A)≤0 ALEQ 累加器A小于等于0 (B)≤0 BLEQ 累加器B小于等于0 OVA=1 AOV 累加器A溢出 OVB=1 BOV 累加器B溢出 OVA=0 ANOV 累加器A无溢出 OCB=0 BNOV 累加器B无溢出

1. 跳转指令 条件组合的规律如下: 两组之间是或的关系) 第1组(累加器) A类 B类 EQ OV NEQ NOV LT LEQ GT 1. 跳转指令 条件组合的规律如下: 两组之间是或的关系) 第1组(累加器) A类 B类 EQ OV NEQ NOV LT LEQ GT GEQ 第2组(TC, C, BIO) A类 B类 C类 TC C BIO NTC NC NBIO 第1组最多可选2个条件,且必须针对同一个累加器。 第2组最多可选3个条件。每组每类中只能选择一个条件。 在一条指令中,2~3个条件是与的关系;或关系用多条指令实现。

例3-24 检测数据单元0060h中的数据若为负数,则转移至LP1位置。 跳转指令举例 例3-24 检测数据单元0060h中的数据若为负数,则转移至LP1位置。 实现的程序段如下: STM #0060h, AR2; 赋地址指针0060h→AR2 STM #0, T ; 0→T,令T(3~0)=0 BITT *AR2 ; 检测0060h的D15位 BC LP1, TC ; 当0060h的D15位为1 时转移至LP1 BIT Xmem, BITC TC = Xmem(15 – BITC) BIT *AR2, 15-15 BITT Smem; TC = Smem(15 – T(3~0)) 测试由T指定的位

例3-25 编程,将数据单元0060h~006Fh清0 跳转指令举例 实现的程序段如下: 代替? ST #0, *AR1+; 双字双周期 STM #0060h, AR1 ;赋地址指针060h→AR1 STM #15, AR2 ;赋循环次数15→AR2 LD #0, A ;A清0 LOOP1: STL A, *AR1+ ;(A)→AR1所指出的数据 单元,(AR1)+1→AR1 代替? BANZ LOOP1, *AR2- ;AR2的内容非0则循环至LOOP1, AR2的内容减1 ST #0, *AR1+; 双字双周期 BANZ[D] pmad, Sind 若(Sind≠0) 则PC=pmad(15~0)

跳转指令说明 无延迟转移和有延迟转移 BD 1000h ANDM 4444h, *AR1+;执行此双字双周期指令后 PC = 1000h BACC[D] src; PC = src(15~0) 近程转移和远程转移 FB[D] extpmad;(extpmad(15–0)) → PC (extpmad(22–16)) → XPC FBACC[D] src ; PC = src(15~0), XPC = src(22~16)

2. 调用和返回指令 (共11条) /delayed 指令 操作 近程无条件调用 CALA[D] src 调用指令分类 指令 操作 字 数 周期数 近程无条件调用 CALA[D] src – –SP, PC + 1[3] → TOS, PC = src(15~0) 1 6/ 4 CALL[D] pmad – –SP, PC + 2[4] → TOS, PC=pmad(15~0) 2 4/2 远程无条件调用 FCALA[D] src – –SP, PC + 1[3] → TOS, – –SP, XPC → TOS , PC = src(15~0), XPC = src(22~16) 1 6/4 FCALL[D] extpmad – –SP, PC + 2[4] → TOS, – –SP, XPC → TOS , PC=pmad(15~0), XPC = pmad(22~16) 2 4/2 近程条件调用 CC[D] pmad, cond [ , cond [ , cond ]] 若(cond(s))满足, 则– –SP, PC + 2[4] → TOS, PC = pmad(15~0) 2 5/3/ /[3] true condition /false condition /delayed

2. 调用和返回指令 (共11条)续 操作 近程 无条件返回 RET[D] 子程序返回 PC = TOS, ++SP 1 5/[3] 返回指令分类 指令 操作 字 数 周期 近程 无条件返回 RET[D] 子程序返回 PC = TOS, ++SP 1 5/[3] RETE[D] 中断返回 PC = TOS, ++SP, INTM = 0 1 5/[3] RETF[D] 快速中断返回 PC = RTN, ++SP, INTM = 0 1 3/[1] 远程 无条件 返回 FRET[D] 子程序返回 XPC = TOS, ++ SP, PC = TOS,++SP 1 6/[4] FRETE[D] 中断返回 XPC = TOS, ++ SP, PC = TOS, ++SP, INTM = 0 1 6/[4] 近程条件返回 RC[D] cond [, cond [, cond ] ] 若(cond(s))满足, 则PC = TOS, ++SP 1 5/3/ /[3]

3.3 C54x系列DSP的指令系统 3. 中断指令 (共2条) 指令 操作 字数 周期数 INTR K (SP)-1→SP, (PC) +1→TOS, PC = IPTR(15~7) + K << 2, INTM = 1,清零IFR相应位 1 3 TRAP K (SP)-1→SP, (PC) +1→TOS, PC = IPTR(15~7) + K << 2 1 3

3.3 C54x系列DSP的指令系统 4. 堆栈操作指令(共5条) 指令 操作 FRAME K SP = SP + K PSHD Smem 4. 堆栈操作指令(共5条) 堆栈操作指令有5条,都是单字单周期指令。 指令 操作 FRAME K SP = SP + K PSHD Smem – –SP, (Smem) → TOS POPD Smem Smem = (TOS), ++SP PSHM MMR – –SP, (MMR) → TOS POPM MMR MMR = (TOS), ++SP 累加器A, B不好用 PSHD

5. 其它程序控制指令(共7条) 指令 操作 IDLE K 省电模式,K=1或2或3 1 4 MAR Smem 如 MAR *ARx+ 字数 周期数 IDLE K 省电模式,K=1或2或3 1 4 MAR Smem 如 MAR *ARx+ 若CMPT = 0,则更新ARx,ARP不变 若CMPT=1且ARx≠AR0, 则更新ARx, ARP = x;若CMPT = 1 且ARx = AR0, 则更新AR(ARP), ARP不变 1 NOP 空操作 1 3 RESET 软件复位 1 RSBX N, SBIT STN (SBIT) = 0,N指出ST0或 ST1, SBIT指出某位,位清0 1 SSBX N, SBIT STN (SBIT) = 1,N指出ST0或 ST1, SBIT指出某位,位置1 1 XC n, cond [, cond [, cond]] 若(cond(s))满足,则执行下 面的n条指令; n = 1或2 1

3.3 C54x系列DSP的指令系统 3.3.5 重复操作指令 (共3条) C54x的重复操作指令共3条 ,包括: RPTB 单条指令重复执行指令 (共2条) RPT,RPTZ 程序块重复执行指令 (共1条): RPTB

3.3.5 重复操作指令 (共3条) 单条指令重复执行指令(共2条) 单条指令重复执行指令 指令 操作 字数 周期数 RPT Smem RC = Smem 1 3 RPT #K RC = #K (8-bit) RPT #lk RC = #lk(16-bit) 2 RPTZ dst, #lk RC = #lk, dst = 0 2 比较 执行块重复指令前,块重复计数器BRC 须先赋值! 程序块重复执行指令 RPTB[D] pmad 0 ≤pmad≤65 535 1→BRAF; 若D则 (PC)+4→RSA 否则(PC)+2→RSA pmad → REA 2 4/2

可以通过重复机制由多周期变为单周期的指令如下: 说明 周期 FIRS 对称FIR滤波 3 MACD 带延迟的乘法并将结果送累加器 3 MACP 乘并将结果送累加器 MVDK 数据空间到数据空间的数据传送 2 MVKD MVDM 数据空间到MMR的数据传送 2 MVMD MMR到数据空间的数据传送 MVDP 数据空间到程序空间的数据传送 4 MVPD 程序空间到数据空间的数据传送 3 READA 从程序空间到数据空间的数据读 5 WRITA 从数据空间到程序空间的写

3.3.5 重复操作指令 (共3条) 单条指令重复 例3-27 计算Y=10X1+10X2+……10X100 1) 采用RPT指令,用106个周期。 STM #X1,AR2 ;2周期 LD #0,A ;1周期 RPT #99 ;1周期 MAC *AR2+,#10,A ;(A) +((AR2))×10→A, ((AR2))→T,(AR2)+1→AR2, (1+100)周期 STL A,@Y ;1周期 双字双周期

3.3.5 重复操作指令 (共3条) 例3-27 计算Y=10X1+10X2+……10X100 2) 采用BANZ指令,要用604(600-2+6)个周期。 STM #99,AR1 ;2周期 STM #X1,AR2 ;2周期 LD #0,A ;1周期 LP:MAC *AR2+,#10,A ;2×100周期 BANZ LP,*AR1- ;4×100周期(条件真) STL A,@Y ;1周期 ;2个机器周期(条件假)

程序块重复执行指令 程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 块重复计数器BRC STM #215, BRC RPTB #TABLE ;卷积算法 STM #16,BK RPTZ A,#15 MAC *AR4+0%,*AR5+0%,A STH A,*AR2+ TABLE: MVDD *AR3+,*AR4+0% 块重复计数器BRC 块重复起始地址RSA 块结束地址REA 用存储器映像寄存器: block-Repeat Start Address register (RSA) End REA 执行操作: ① 1→BRAF(重复块操作标志位在ST1中); ② 若延迟则(PC)+4→RSA;否则 (PC)+ 2→RSA ; ③ pmad → REA; ④ 每执行一遍程序块BRC 减1直至为0,重复结束, BRAF清零。程序重复执行(BRC)+1次

3.3 C54x系列DSP的指令系统 3.3.6 并行操作指令(共8条) (13小条) 并行操作指令可分为四类: 并行存储和装载指令(1条) (2小条) 并行装载和乘法指令(2条) (4小条) 并行存储和加/减指令(2条)(2小条) 并行存储和乘法指令(3条) (5小条) 并行操作指令特点: (AR2)= B << (ASM – 16) || A = (AR4) << 16 单字单周期; 都工作在累加器高位(LD); 某些并行操作(ST)与ASM有关; 只能采用Xmem或Ymem寻址。 ST B, *AR2- || LD *AR4+, A

3.3.6 并行操作指令(共8条) 并行存储和装载指令(1条) (2小条) 指令 操作 字数 周期数 ST src, Ymem || LD Xmem, dst Ymem = src << (ASM – 16) || dst = Xmem << 16 1 ST src, Ymem || LD Xmem, T Ymem = src << (ASM – 16) || T = Xmem 1 If src is equal to dst, the value stored in Ymem is the value of src before the execution.

3.3.6 并行操作指令(共8条) 2. 并行装载和乘法指令(2条) (4小条) 指令 操作 字数 周期数 LD Xmem, dst || MAC Ymem, dst_ dst = Xmem << 16 || dst_ = dst_ + T * Ymem 1 LD Xmem, dst || MACR Ymem, dst_ dst = Xmem << 16 || dst_ = rnd(dst_ + T * Ymem) 1 LD Xmem, dst || MAS Ymem, dst_ dst = Xmem << 16 || dst_ = dst_ – T * Ymem 1 LD Xmem, dst || MASR Ymem, dst_ dst = Xmem << 16 || dst_ = rnd(dst_ – T * Ymem) 1

3.3.6 并行操作指令(共8条) 3. 并行存储和加/减指令(2条) 指令 操作 字数 周期数 ST src, Ymem 3. 并行存储和加/减指令(2条) 指令 操作 字数 周期数 ST src, Ymem ||ADD Xmem, dst Ymem= src<< (ASM–16) || dst = dst_ +Xmem<<16 1 ST src, Ymem ||SUB Xmem, dst Ymem= src <<(ASM–16) || dst = dst_ ﹣(Xmem<<16) 1

3.3.6 并行操作指令(共8条) 4. 并行存储和乘法指令 (3条) (5小条) 指令 操作 字数 周期数 ST src, Ymem 4. 并行存储和乘法指令 (3条) (5小条) 指令 操作 字数 周期数 ST src, Ymem || MAC Xmem, dst Ymem = src << (ASM – 16) || dst = dst + T * Xmem 1 || MACR Xmem, dst || dst = rnd(dst + T * Xmem ST src, Ymem || MAS Xmem, dst Ymem = src << (ASM – 16) || dst = dst – T * Xmem 1 || MASR Xmem, dst || dst = rnd(dst – T * Xmem) ST src, Ymem || MPY Xmem, dst Ymem = src << (ASM – 16) || dst = T * Xmem 1

3.3 C54x系列DSP的指令系统 3.3.6 并行操作指令 (AR2)= B << (ASM – 16) || A = (AR4) << 16 例3-29 ST B, *AR2- || LD *AR4+, A 指令执行前 指令执行后 –4的补码 B <<-20 A 00 0000 001C B FF 8421 1234 SXM 1 ASM 1C AR2 01FF AR4 0200 数据存储器 01FFH XXXX 0200H 8001 A FF 8001 0000 B FF 8421 1234 SXM 1 ASM 1C AR2 01FE AR4 0201 数据存储器 01FFH F842 0200H 8001

作业 习题3.2, 3.6, 3.7,3.8, 3.11, 3.17, 3.19,3.21