第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指令系统与特点 第一节 数据寻址方式 第二节 程序存储器地址的生成方式 第三节 流水线 第四节 指令系统概述.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
‘C54x寻址方式 ‘C54x特殊寻址方式说明 ‘C54x指令集 ‘C54x特殊指令使用说明
逆向工程-汇编语言
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 掌握无条件转移指令格式及应用
第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
College of Computer Science & Technology
学习目标 1、了解基本运算符 2、运算符优先级.
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
第二章:‘C5000 DSP硬件结构 在这一章中,我们介绍: TMS320C54XX硬件结构特点 ★
得技通电子 问题 三 判断题:.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
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.

3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符 指令系统中采用的符号和缩写如下列表中所示 BIT Xmem, BITC 3.1.1 指令系统中的符号、缩写及操作符 指令系统中采用的符号和缩写如下列表中所示 序号 符 号 含 义 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

3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 11 C16 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 11 C16 ST1中的双16位/双精度算术运算方式位 12 C ST0中的进位位 13 CC 2位条件码(0CC3) 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章 汇编语言指令系统 序号 符 号 含 义 21 Dmem 数据存储器操作数 22 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 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) 累加器的高阶位(AH或BH) 30 HM ST1中的保持方式位

3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 31 IFR 中断标志寄存器 32 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 31 IFR 中断标志寄存器 32 INTM ST1中的中断屏蔽位 33 K 少于9位的短立即数 34 k3 3位立即数(0k37) 35 k5 5位立即数(-16k515) 36 k9 9位立即数(0k9511) 37 lk 16位长立即数 38 Lmem 利用长字寻址的32位单数据存储器操作数 39 mmr,MMR 存储器映像寄存器 40 MMRx,MMRy 存储器映像寄存器,AR0~AR7或SP

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

3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 51 PC 程序计数器 52 pmad 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 51 PC 程序计数器 52 pmad 16位立即数程序存储器地址(0pmad65535) 53 pmem 程序存储器操作数 54 PMST 处理器工作方式状态寄存器 55 prog 56 [R] 舍入选项 57 rnd 舍入 Round 58 RC 重复计数器 59 RTN 快速返回寄存器 60 REA 块重复结束地址寄存器

3.1.1 指令系统中的符号、缩写及操作符(续) 第3章 汇编语言指令系统 RSBX N, SBIT 序号 符 号 含 义 61 RSA 第3章 汇编语言指令系统 RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续) 序号 符 号 含 义 61 RSA 块重复起始地址寄存器 62 SBIT 用于指定状态寄存器位的4位地址(0~15) 63 SHFT 4位移位值(0~15) 64 SHIFT 5位移位值(-16~15) 65 Sind 间接寻址的单数据存储器操作数 66 Smem 16位单数据存储器操作数 67 SP 堆栈指针寄存器 68 src 源累加器(A或B) 69 ST0,ST1 状态寄存器0,状态寄存器1 70 SXM ST1中的符号扩展方式位

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

指令系统中的运算符号及优先级如下列表中所示 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序 1 + - ~ ! 取正、取负、按位求补、 逻辑非 从右至左 2 * / % 乘法、除法、求模 从左至右 3 + - 加法、减法 4 ^ 指数 从左到右 5 << >> 左移、右移 6 <  小于、小于等于 7 >  大于、大于等于 8  != 不等于

指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序 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

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 寻址方式 3.2.1 立即寻址 立即寻址是指指令中的操作数是一个立即数,用#表示 l    短立即数—3位(k3)、5位(k5) 、8位(K)或9位(k9) l    长立即数—16(lk)位 使用短立即数的指令代码通常为一个字长 使用长立即数的指令代码通常为两个字长 例3-3 LD #4, DP ;4→DP 指令代码:EA04H LD #7850H,A ;7850H→A; 指令代码:F020H 7850H

3.2 寻址方式 3.2.1 立即寻址 可使用立即寻址的指令及立即数的位数如下表所示: 3位或5位立即数 8位 立即数 9位 16位 LD FRAME RPT 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

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)寻址 FIRS Xmem, Ymem, pmad MACD Smem, pmad, src 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指令功能) pmad→PAR, (Smem)×(Pmem addressed by PAR) +(src)→src, (Smem)→T, (Smem)→Smem+1, If (RC)≠0, (PAR)+1→PAR (MACD指令功能)

3.2 寻址方式 3.2.2 绝对寻址 绝对寻址方式 相关指令 程序存储器 (pmad)寻址 MACP Smem, pmad, src MVDP Smem, pmad MVPD pmad, Smem I/O端口(PA)寻址 PORTR PA, Smem PORTW Smem, PA *(lk)寻址 可用于所有支持单数据操作数(Smem) 的指令

3.2 寻址方式 3.2.3 累加器寻址 有两条指令采用这种寻址方式 :A(22-0)→PAR , 累加器寻址指令 解释 READA Smem A中内容为程序存储器地址,将 该地址中的数据送入Smem指定 的数据存储器中 WRITA Smem 将Smem指定的数据存储器中的内容送入A所指出的程序存储器中 (Smem) (Pmem addressed by PAR), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR

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

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

3.2 寻址方式 3.2.4 直接寻址 CPL=0时 直接寻址 指 令 15~8 7 6~0 操作码 I=0 dma 页指针DP 指 令 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时 直接寻址 指 令 15~8 7 6~0 操作码 I=0 dmad 16位堆栈指针SP 指 令 15~8 7 6~0 操作码 I=0 dmad 16位堆栈指针SP 堆栈指针SP + dmad 16位数据 存储器地址 16位: SP + dmad 低7位

3.2.4 直接寻址 @常省略。 例3-8 下列程序段实现的功能是:将两个数据存储单元01E0h和01E1h中的内容相加,然后把结果送入A。 第3章 汇编语言指令系统 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 0000 0001 1110 0000 16位数据 存储器地址 0 1 E 0 h DP @60h @常省略。

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

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位I=1,表示指令的寻址方式为间接寻址;6~3位为方式(MOD),定义了间接寻址的类型(表3-4);2~0位定义寻址所使用的辅助寄存器(如AR0~AR7)。

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

3.2.5 间接寻址 单操作数寻址 操作句法 功 能 说 明 *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=Circ(ARx-1) 寻址结束后,ARx中的地址值按循环减的方法减1 *ARx+% ARx=Circ(ARx+1) 寻址结束后,ARx中的地址值按循环加的方法加1 *ARx-0% ARx=Circ(ARx-AR0) 寻址结束后,按循环减的方法从ARx中减去AR0中的值

3.2.5 间接寻址 单操作数寻址 $不用于MMR 操作句法 功 能 说 明 *ARx+0% 地址=ARx 功 能 说 明 *ARx+0% 地址=ARx ARx=Circ(ARx+AR0) 寻址结束后,按循环加的方法将AR0中的值加到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位无符号数作为地址,寻址数据存储器$

3.2.5 间接寻址 单操作数寻址: 单操作数寻址结构图如下所示. 操作数 操作 无lk, 写操作地址范围64k

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

3.2.5 间接寻址 位反向寻址:4位二进制数的原始地址与位反向地址的对应关系如下表所示: 正常顺序 原始地址 位反向地址 位反向顺序 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 间接寻址 位反向寻址 正常顺序 原始地址 位反向地址 位反向顺序 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﹥20 循环寻址 循环寻址示意图如下: 例如: *AR1+% 循环缓冲区长度20,因为2 5﹥20,所以N=5,取基地址EFB的低5位为5个0,设EFB=1000h。在初始化编程中将20→BK 地址指针为AR1, 1000h→AR1 假设step = +1,当index变化到19(13h)时,再做index = index + step时就会使index等于BK里的值20,因此应该进行index = index + step – BK的操作,使得index=0,也就是使AR1=1000h,又回到基地址EFB的位置,从而形成了循环寻址。 2 N﹥20 循环寻址 循环寻址示意图如下: EFB EOB

3.2.5 间接寻址 循环寻址, 例 *ARx+0% 在循环寻址中,有下列几个关键的参量: 循环缓冲区的长度R:在编程中,用户应将R值赋给循环缓冲区长度寄存器BK (circular-buffer size register) 。 循环缓冲区的基地址EFB (EFfective Base Address):该值必须从N位地址的边界开始,其中,N是满足2N﹥R的最小整数,即循环缓冲区的基地址EFB的低位必须有N个0,其余的高位由用户指定。通常用ARx作地址指针,在初始化中将EFB赋给ARx作初始指针。end of buffer address (EOB) 由BK内容决定。 调整步长step:step是每做一次运算循环缓冲区地址的变化情况,也就是加至ARx或从ARx中减去的值。 相对位置index:index是被访问元素在循环缓冲区内的相对位置,也就是循环缓冲区地址每变化一次后ARx的低N位。

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。

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

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

3.2.5 间接寻址 ②双操作数寻址 双操作数寻址有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中去

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.5 间接寻址 –特别实例 第3章 汇编语言指令系统 又是 存储器映像寄存器寻址 又是 存储器映像寄存器寻址 第3章 汇编语言指令系统 3.2.5 间接寻址 –特别实例 TMS320C54x DSP Reference Set Volume 2 Mnemonic Instruction Set--spru172c.pdf 又是 存储器映像寄存器寻址 AR0, AR7的数据存储器的地址分别是0x0010, 0x0017 又是 存储器映像寄存器寻址

3.2 寻址方式 3.2.6 存储器映像寄存器寻址 存储器映像寄存器寻址是一种直接访问存储器映像寄存器MMR的方式,可以用来修改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.3 C54x系列DSP的指令系统 3.3.1 数据存取指令 (表3-7 共28条) 1. 加载指令 (6条细分为21条) 本节只介绍非并行的数据存取指令,包括 : 1. 加载指令 (6条细分为21条) 2. 存储指令 (10条细分为18条) 4. 混合加载和存储指令(12条) 3.以上包括32位长操作数的加载、存储指令(2条)

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

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

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时,进行无符号数的加载 指令执行前 指令执行后 第3章 汇编语言指令系统 1. 加载指令 (共6条) 例3.11 LD *AR3, A 1)当SXM=0时,进行无符号数的加载 指令执行前 指令执行后 A 00 0000 0000 SXM 0 AR3 0200 数据存储器 0200H 95A6 A 00 0000 95A6 SXM 0 AR3 0200 数据存储器 0200H 95A6

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

3.3 C54x系列DSP的指令系统 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

1. 加载指令 (共6条) 例3.12 LD A, 4, B 2)当OVM=1时,对溢出进行处理 指令执行前 指令执行后 第3章 汇编语言指令系统 1. 加载指令 (共6条) 例3.12 LD A, 4, B 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

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) (表3-7 ) 1: ST T, Smem 2: ST TRN, Smem 3: ST #lk, Smem; #有时可省略

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

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) 例 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.

第3章 汇编语言指令系统 2. 存储指令 (共10条) STM #lk, MMR; #有时可省略

3.3 C54x系列DSP的指令系统 2. 存储指令 例 3.15 STM #1357H, *AR4+ 指令执行前 指令执行后 例 3.16 STM #2468H, 60H 指令执行前 指令执行后 0060H 0000 0060H 2468

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) STH src, Smem STH src, ASM, Smem 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

3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) 例 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.

2. 存储指令 (共10条)条件存储指令: CMPS src, Smem;比较选择累加器(src)的高、低字 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 例: SACCD A, *AR3+, ALT A=FF FE00 C321 ASM=01 AR3=0202 *(0202)=0101 A=FF FE00 C321 ASM=01 AR3=0202 *(0202)=FC01

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

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

3.3 C54x系列DSP的指令系统 3. 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

3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DST B, *AR3+ 指令执行前 指令执行后 B 00 6CAC BD90 AR3 0101 数据存储器 0100H 0000 0101H 0000 B 00 6CAC BD90 AR3 0103 数据存储器 0100H BD90 0101H 6CAC

3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 例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

3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DLD *AR3+, B 3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DLD *AR3+, B 指令执行前 指令执行后 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 MVDM dmad, MMR MVKD dmad, Smem 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 ADD Xmem ,Ymem ,dst dst=Xmem<<16+Ymem<<16 ADD #lk,[,SHFT],src[,dst] dst=src+#lk<< SHFT ADD #lk,16,src[,dst] dst=src+#lk<< 16 ADD src,[,SHIFT][,dst] dst=dst+src<< SHIFT ADD src,ASM[,dst] dst=dst+src<< ASM ADDC Smem , src src=src+Smem+C ADDM #lk, Smem Smem=Smem+#lk ADDS Smem , src src=src+uns(Smem)

基本算术运算指令(共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 SUB Xmem ,Ymem ,dst dst=Xmem<<16-Ymem<<16 SUB #lk,[,SHFT],src[,dst] dst=src-#lk<< SHFT SUB #lk,16,src[,dst] dst=src-#lk<< 16 SUB src,[,SHIFT][,dst] dst=dst-src<< SHIFT SUB src,ASM[,dst] dst=dst-src<< ASM SUBB Smem , src src=src-Smem-C SUBC Smem,src (用于除法) If(src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1 Else src=src<<1 SUBS Smem , src src=src-uns(Smem)

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

基本算术运算指令 例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

3.3 C54x系列DSP的指令系统 2. 特殊运算指令(共15条) 特殊运算指令 操作 字数 周期数 ABDST Xmem , Ymem B = B + |A(32-16)|, A = (Xmem-Ymem)<<16 1 ABS src [,dst ] dst = |src | CMPL src [,dst ] dst = src DELAY Smem (Smem)→Smem +1 EXP src T = 冗余符号位数(src)-8 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

2. 特殊运算指令(共15条)(续) 第3章 汇编语言指令系统 特殊运算指令 功 能 字数 周期数 MAX dst 第3章 汇编语言指令系统 2. 特殊运算指令(共15条)(续) 特殊运算指令 功 能 字数 周期数 MAX dst dst = max(A,B) 1 MIN dst dst = min(A,B) NEG src [,dst ] dst = -src NORM src [,dst ] dst = src<<TS, dst = norm (src ,TS) POLY Smem B = Smem<<16,(Smem系数,T未知数) A = rnd(A (32–16)*T + B ) RND src [,dst ] dst = src +215 SAT src Saturate(src) SQDST Xmem ,Ymem B = B + A(32-16)*A(32-16) A = (Xmem-Ymem)<<16

3. 双字(32位)算术运算指令(共6条) 双字指令 操作 字 数 C16 = 0 C16 = 1 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 DADST Lmem, dst dst=Lmem+ (T << 16 +T) Lmem(31~16) + T Lmem(15~0) – T DRSUB Lmem, src src = Lmem – src src(39~16) = Lmem(31~16) –src(31~16) src(15~0) = Lmem(15~0) –src(15~0)

3. 双字(32位)算术运算指令(共6条)(续) 第3章 汇编语言指令系统 双字指令 操作 字 数 C16 = 0 C16 = 1 第3章 汇编语言指令系统 3. 双字(32位)算术运算指令(共6条)(续) 双字指令 操作 字 数 周 期 C16 = 0 C16 = 1 DSADT Lmem, dst dst = Lmem – (T << 16 + T) dst(39~16) = Lmem(31~16) –T dst(15~0)= Lmem(15~0) + T 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) DSUBT Lmem, dst Lmem(31~16) – T dst(15~0) = Lmem(15~0) – T

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 MAC Xmem, Ymem, src [ , dst ] dst = src + Xmem * Ymem, T = Xmem MACR Xmem, Ymem, src [ , dst ] dst = rnd(src + Xmem * Ymem), T = Xmem MACA Smem [ , B ] B = B + Smem * A(32~16), MACAR Smem [ , B ] B=B+rnd( Smem*A(32~16)), T = Smem

4. 乘累加和乘累减指令(共9条)(续) 指令 操作 MACA T,src [ , dst ] 4. 乘累加和乘累减指令(共9条)(续) 指令 操作 字数 周期数 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 MACSU Xmem, Ymem, src src=src+ uns(Xmem)*Ymem, T = Xmem MAS Smem, src src = src – T * Smem MASR Smem, src src = rnd(src – T * Smem)

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

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

MACD Smem, pmad, src 的操作框图 4. 乘累加和乘累减指令(共9条)(续)

(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 0100 TABLE 0064 FRCT AR1 程序存储器 0100h 数据存储器 0101h 1234h×64h=71C50h 0111 0001 1100 0101 0000b (2)当FRCT=1时,执行指令后,A= 00 000E 4AD4, FRCT=1, 其他相同。 1110 0011 1000 1010 0000b E 3 8 A 0 h

3.3 C54x系列DSP的指令系统 3.3.3 逻辑运算指令(共17条) 逻辑运算指令包括: 布尔型指令(共6条) 移位指令 (共6条) 第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 AND src[,SHIFT][,dst] dst=dst &src<<SHIFT ANDM #lk, Smem Smem = Smem&#lk

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

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

dst = src << SHIFT {算术移位} SFTC src {条 件移位} 2. 移位指令(共6条) 移位指令共6条,都是单字单周期指令。 指令 操作 ROL src 带进位位C的循环左移 ROLTC src 带测试位TC的循环左移 ROR src 带进位位C的循环右移 SFTA 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 SFTL src, SHIFT [, dst] dst = src << SHIFT {逻辑移位}

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

带测试位TC的循环左移ROLTC移位示意图如下: 39 ~ 32 31 0 累加器src 保护位 TC 第3章 汇编语言指令系统 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的操作示意图 : 39 累加器src 0﹤SHIFT≤15时 C

算术移位指令SFTA src,SHIFT的操作示意图 : 39 累加器src C -16≤ SHIFT<0,且SXM=0 累加器 39 Src C -16≤ SHIFT<0,且SXM=1

(1)当SXM=1时,执行算术移位指令,结果进行符号扩展。SFTA A, -5, B 例3-22 移位指令举例。 (1)当SXM=1时,执行算术移位指令,结果进行符号扩展。SFTA A, -5, B 指令执行前 FF 8765 0055 00 4321 1234 A B 1 C x SXM 指令执行后 FF 8765 0055 FF FC3B 2802 A T 1 C SXM 指令执行后 FF 8765 0055 FF FC3B 2802 A T 1 C SXM 指令执行前 FF 8765 0055 00 4321 1234 A B 1 C x SXM (2)当SXM=0时,执行算术移位指令,结果不进行符号扩展。SFTA A, -5, B 指令执行前 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

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

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条)

1. 跳转指令 (共6条)无条件转移和条件转移 第3章 汇编语言指令系统 跳转指 令分类 指令 操作 字数 周期数 近程无 条件转移 第3章 汇编语言指令系统 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) FBACC[D] src PC = src(15~0), XPC = src(22~16) 近程条 件转移 BC[D] pmad, cond [ , cond [ , cond ] ] 若条件(cond(s))满足, 则PC = pmad(15~0) 5/3/ /[3] BANZ[D] pmad, Sind 若(Sind≠0) 则 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组 第2组 A类 B类 C类 EQ OV TC C BIO NEQ NOV NTC NC NBIO LT LEQ GT GEQ 第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 BITT Smem; TC = Smem(15 – T(3~0)) 测试由T指定的位

例3-25 编程,将数据单元0060h~006Fh清0 跳转指令举例 实现的程序段如下: 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

跳转指令说明 无延迟转移和有延迟转移 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条) 指令 操作 近程无条件调用 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) FCALL[D] extpmad – –SP, PC + 2[4] → TOS, – –SP, XPC → TOS , PC=pmad(15~0), XPC = pmad(22~16) 近程条件调用 CC[D] pmad, cond [ , cond [ , cond ]] 若(cond(s))满足, 则– –SP, PC + 2[4] → TOS, PC = pmad(15~0) 5/3/ /[3]

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 RETF[D] 快速中断返回 PC = RTN, ++SP, 3/[1] 远程 无条件 返回 FRET[D] 子程序返回 XPC = TOS, ++ SP, PC = TOS,++SP 6/[4] FRETE[D] 中断返回 PC = TOS, ++SP, INTM = 0 近程条件返回 RC[D] cond [ , cond [ , cond ] ] 若(cond(s))满足, 则PC = TOS, ++SP 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

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

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

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

比较:程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 第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 比较:程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535

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

单条指令重复 例3-27 计算Y=10X1+10X2+……10X100 1) 采用RPT指令,要用106个周期。 第3章 汇编语言指令系统 第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周期

2) 采用BANZ指令,要用604(600-2+6)个周期。 第3章 汇编语言指令系统 单条指令重复 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个机器周期(条件假)

2. 程序块重复 程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 块重复计数器BRC 2. 程序块重复 程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 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 (End) Address register (RSA, REA) 执行操作: ① 1→BRAF(重复块操作标志位在ST1中); ② 若延迟则(PC)+4→RSA;否则 (PC)+ 2→RSA ; ③ pmad → REA; ④ 每执行一遍程序块BRC 减1直至为0,重复结束, BRAF清零。程序重复执行(BRC)+1次

3.3.6 并行操作指令(共8条) (13小条) 并行操作指令可分为四类: 并行存储和装载指令(1条) (2小条) 第3章 汇编语言指令系统 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

Ymem = src << (ASM – 16) || dst = Xmem << 16 1 第3章 汇编语言指令系统 并行存储和装载指令(1条) (2小条) 指令 操作 字数 周期数 ST src, Ymem || LD Xmem, dst Ymem = src << (ASM – 16) || dst = Xmem << 16 1 || LD Xmem, T || T = Xmem If src is equal to dst, the value stored in Ymem is the value of src before the execution.

2. 并行装载和乘法指令(2条) (4小条) 第3章 汇编语言指令系统 指令 操作 字数 周期数 LD Xmem, dst 第3章 汇编语言指令系统 2. 并行装载和乘法指令(2条) (4小条) 指令 操作 字数 周期数 LD Xmem, dst || MAC Ymem, dst_ dst = Xmem << 16 || dst_ = dst_ + T * Ymem 1 || MACR Ymem, dst_ || dst_ = rnd(dst_ + T * Ymem) || MAS Ymem, dst_ || dst_ = dst_ – T * Ymem || MASR Ymem, dst_ || dst_ = rnd(dst_ – T * Ymem)

Ymem= src<< (ASM–16) || dst = dst_ +Xmem<<16 1 第3章 汇编语言指令系统 3. 并行存储和加/减指令(2条) 指令 操作 字数 周期数 ST src, Ymem ||ADD Xmem, dst Ymem= src<< (ASM–16) || dst = dst_ +Xmem<<16 1 ||SUB Xmem, dst Ymem= src <<(ASM–16) || dst = dst_ ﹣(Xmem<<16)

4. 并行存储和乘法指令 (3条) (5小条) 第3章 汇编语言指令系统 指令 操作 字数 周期数 ST src, Ymem 第3章 汇编语言指令系统 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 || MAS Xmem, dst || dst = dst – T * Xmem || MASR Xmem, dst || dst = rnd(dst – T * Xmem) || MPY Xmem, dst || dst = T * Xmem

(AR2)= B << (ASM – 16) || A = (AR4) << 16 第3章 汇编语言指令系统 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 00 0000 001C B FF 8421 1234 SXM 1 ASM 1C AR2 01FF AR4 0200 数据存储器 01FFH XXXX 0200H 8001 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 A FF 8001 0000 B FF 8421 1234 SXM 1 ASM 1C AR2 01FE AR4 0201 数据存储器 01FFH F842 0200H 8001

Table 5–3. Indirect-Addressing Instruction Bit Summary – Single Data-Memory Operand (Continued) CMPT = 1 Compatibility mode. In compatibility mode, ARP selects the auxiliary register if ARF = 0. Otherwise, ARF selects the auxiliary register and the ARF value is loaded into ARP when the access is completed. *AR0 in the assembly instruction indicates the auxiliary register selected by ARP in compatibility mode.

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