dsp汇编指令系统介绍(精)
第五章 DSP的汇编指令..
第五章 TMS320C55x系列DSP的汇编指令
(2) 用户自定义的双指令的并行
这两条指令的并行是通过用户或C编译器定义的。两条指令 同时执行两个操作,用并行符“||”区分并行执行的两条指令。 例:
MPYM *AR1+, *CDP, AC1 ;D单元的一个MAC来完成
||XOR AR2,T1
;A单元的ALU来完成
第五章 TMS320C55x系列DSP的汇编指令
1、高速数字信号处理中常采用汇编语言编程。 2、汇编语言中的两种指令集 (1) 助记符指令集:有助于记忆的符号来表示指令。 (2) 代数指令集:类似于代数表达式,运算关系清楚明了。 注意:DSP的软件开发工具只支持单一的指令形式,不支持助记
符指令和代数指令的混合形式。 3、术语、符号和缩写见P93的表5-1 4、运算符见表5-2
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
说明: NO:不能并行执行 3:指令的长度为3字节 1:周期为1 X:在X(执行)流水线阶段处理
D – ALU:在D单元ALU执行。 执行结果:AC0=(*AR3)+CARRY+AC1 状态位: Affected by CARRY,C54CM,M40等
dsp汇编指令系统介绍(精)
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
第五章 DSP的汇编指令..
令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
▪ M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩
展和移位操作都以第31比特为准。
▪ M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40 ; Clear M40
BSET M40 ; Set M40
第五章 TMS320C55x系列DSP的汇编指令
第五章 TMS320C55x系列DSP的汇编指令
一、算术运算指令 用于完成加减乘除等运算,按照功能可分成以下几类:
▪ 加法指令 ▪ 减法指令:减法,条件减法,条件加/减 ▪ 乘法指令:乘法,乘加,乘减,双乘加/减 ▪ 双16比特算术指令 ▪ 比较运算指令:比较并求极值,最大/最小值,存储单元比较,寄存器比较 ▪ 移位指令:条件移位、带符号的移位。 ▪ 寄存器修改:辅助寄存器修改、堆栈指针SP修改 ▪ 隐含的并行指令 ▪ 专用指令:绝对值、归一化、有限冲激响应滤波FIR、最小均方LMS等
✓ M40=0时: 溢出位在第31位检测
DSP课件第五章TMS320LF240x汇编指令系统 共121页
dma
数据存储器地址的低7位,与数据页面指针(DP)构成一个完
整的16位数据存储器地址。
shift
左移0~15位。
ARn
n为0~7, ARn指定下次的辅助寄存器。
Ind
选择*、*+、*-、*0+、*0-、*BR0+、*BR0- 7中符号之一。
# 一
立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为
AND ind [,ARn] AND #lk [,shift] AND #lk ,16 功能:如果使用直接或间接寻址,累加器的低16位和被寻址的数据存储器 单元的内容进行逻辑与操作,结果送累加器的低16位,累加器的高16位 清0。如果使用长立即数寻址,则16位长立即数左移0~16位后和32位的 累加器相与,结果送累加器。 操作:①(PC)+1→PC; ②(ACC(15~0) ) AND (数据存储器地址)→ ACC(15~0);
双字操作码的第2个字。包含16位常数。根据指令不同该
常数可能是长立即数、程序存储器地址、I/O端口或I/O映
射的寄存器地址。
4.2 指令句法描述
4.2.1语法
指令助记符 指令助记符 dma [,shift] 指令助记符 dma,16 指令助记符 ind[,shift[,ARn]] 指令助记符 ind,16[,ARn] 指令助记符 #k 指令助记符 #lk[,shift]
储器地址(pma),只要有一个条件不满足就顺序执行下面的指令。 操作: 如果cond1,cond2,…均满足,则pma→PC,否则PC+2→PC。 注意: 有些条件是不能组合在一起使用的。 例20: BCND PGM191,LEQ,C
13、测试指令BIT
DSP 课件 第五章 TMS320LF240x汇编指令系统
DSP课件第五章:TMS320LF240x汇编指令系统 概述 DSP汇编指令系统简介 TMS320LF240x系列简介
架构与指令系统
1
五段流水线架构
TMS320LF240x采用了高效的五段流水线架构,实现高处理性能与并行计算能力。
2
TMS320LF240x指令集概述
介绍实验所需的器材和软件环境,确保实验 能够顺利进行。
3 实验内容
展示实验的具体内容,包括使用 TMS320LF240x汇编指令系统进行的实验操作 过程。
4 实验报告的要求
提醒学生在实验完成后编写完整的实验报告, 详细记录实验过程和结果。
总结
TMS320LF240x汇编指 系统的优缺点
总结TMS320LF240x汇编指令 系统的优点和缺点,帮助学 生全面了解系统特性。
DSP编程的优势和局限 性
探讨DSP编程的优势和局限 性,展示DSP技术在实际应 用中的作用和限制。
学习和使用 TMS320LF240x指令系统 的建议
提供学习和使用 TMS320LF240x指令系统的建 议,帮助学生提高学习效果 并应用于实际项目。
指令集包含多种数据传输、逻辑运算、算术运算、移位和控制指令,提供了丰富 的功能以满足不同的应用需求。
3
程序设计
了解程序的格式和组织,掌握存储器映像、变量和常量的定义,以及程序的构造 和设计方法。
实验
1 实验要求
2 实验器材和软件环境
掌握TMS320LF240x汇编指令系统的实验要求, 包括实验目标、操作步骤等。
DSP汇编语言指令系统
第三章第三节 TMS320C54xTM DSP汇编语言与混合编程
例3.1 DLD *AR3+,B
Before Instruction
B 00 0000 0000 0100 B AR3
After Instruction
00 6666 5555 0102
Data Memory
0100H 0101H 6666 5555 0100H 0101H 6666 5555
无符号数 ST1 中的外部标志状态位 程序计数器的扩展寄存器 在双操作数和一些单操作数指令中 使用的 16 位双访问数据存储器操作数 在双操作数指令中使用的 16 位双访 问数据存储器操作数 立即数寻址时常数的前缀 并行指令
第三章第三节 TMS320C54xTM DSP汇编语言与混合编程
1.数据传送指令 数据传送指令把源操作数从源存储器中传送到目的操作数 指定的存储器中。C54x DSP的数据传送指令包括装载指令、 存储指令、条件存储指令、并行装载和存储指令、并行装载 和乘法指令、并行存储和加/减法指令、并行存储和乘法指令、 混合装载和存储指令。
第三章第三节 TMS320C54xTM DSP汇编语言与混合编程
3.2 汇 编 语 言
4.2.1 汇编语言源程序格式
汇编语言是DSP应用软件的基础。编写汇编语言必须要符合
相应的格式,这样汇Leabharlann 器才能将源文件转换为机器语言的目标
文件。C54x DSP汇编语言源程序由源说明语句组成,包含汇编
语言指令、汇编伪指令、宏伪指令和注释等,一般一句程序占 据编辑器的一行。由于汇编器每行最多只能读200个字符,因此
表达式方式 ① dst =dbl(Lmem) dst =dual(Lmem) ② dst = Smem << TS ③ dst = Smem << 16 ④ dst = Smem [<<SHIFT] ⑤ dst = Xmem [<<SHIFT] ⑥ dst = # K ⑦ dst = # 1k [<<SHIFT] ⑧ dst = # 1k << 16 ⑨ dst = src <<ASM ⑩ dst = src [<<SHIFT]
DSPC2000汇编指令汇编
第六章 DSP的寻址方式和汇编指令当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。
在本章节当中将主要以基于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代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。
第三章DSP汇编指令
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
只有8条指令能使用存储器映射寄存器寻址:
LDM MMR, dst MVDM dmad, MMR MVMD MMR, dmad MVMM MMRx, MMRy POPM MMR PSHM MMR STLM src, MMR STM #lk, MMR
7. 堆栈寻址
系统堆栈用来在中断和子程序期间自动存放程序计数器。 它也能用来存放额外的数据项或传递数据值。处理器使用一 个16-bit的存储器映射寄存器—堆栈指针来对堆栈寻址,它 总是指向存放在堆栈中的最后一个元素。
2、调用与中断指令
3、返回指令
4、重复指令和堆栈操作指令
四、装入和存储指令
装入和存储指令包括:
一般的装入和存储指令 条件存储指令 并行装入和存储指令 并行装入和乘法指令 并行存储和加件乘指令 混合装入和存储指令
1、一般的装入指令
2、存贮指令
3 并行装入和存储指令 4、条件存储指令
共有四条使用堆栈寻址方பைடு நூலகம்访问堆栈的指令:
PSHD 把一个数据存储器的值压入堆栈。 PSHM 把 一 个 存 储 器 映 射 寄 存 器 的 值 压 入 堆 栈 。 POPD 把一个数据存储器的值弹出堆栈。 POPM 把一个存储器映射寄存器的值弹出堆栈。
§3-2 特殊寻址方式说明
DSP课件第5章 汇编指令系统
k lk [,x] [x1[,x2]]
2、操作
操作部分提供了指令完成的操作序列,即描述当指令执行时所进行 的处理过程。 (r) x→y r(n:m) 寄存器或存储单元r的内容 数值x被赋予寄存器或存储单元y 寄存器或存储单元r中的位n到位m 指出nn表示一个十六进制数
器。PREG的移位方式由ST1中PM为确定。
操作: ①(PC)+1→PC; ②(ACC) +移位后的(PREG)→ ACC 状态位:影响C和OV位,受OVM 和PM状态位影响。不受SXM 状态位影响。 例16:APAC
9 、无条件转移指令B 句法: 功能: 操作: 例17: B pma [,ind[,ARn]] 程序无条件转移到指令指定的程序存储器地址(pma),并按指 令要求修改当前辅助寄存器和ARP的内容. ①pma→PC (pma可以是符号地址或数值地址); ②按指令要求修改当前AR和ARP。 B 16
例6:ADDC DAT300 例7:ADDC *-,AR4 ;(设OVM=0),将当前AR指定的数据存储 单元的内容与累加器的内容及进位位相加 后送累加器,并将当前AR的内容减1,然 后将AR4指定为下次的辅助寄存器。
4、加法指令ADDS 句法: ADDS dma ADDS ind[,ARn] 功能:将被寻址的数据存储器单元的内容与累加器的内容相加,结果送至 累加器。 操作:①(PC)+1→PC;
第5章 TMS320LF240x汇编指令系统
4.1 汇编指令集概述
1、指令集分类
(1)累加器、算术和逻辑指令(26条) (2)辅助寄存器和数据页面指针指令(6条) (3)TREG、PREG和乘法指令(20条) (4)转移指令(12条) (5)控制指令(15条) (6)I/O和存储器操作指令(8条)
第六章_DSP的汇编语法寻址及指令系统1
语句标号
由字母、数字、_、$组成,最多不超过 32个字符,对大小写敏感,第一个字符 不能是数字。后跟 :,但分号不是语句 标号的组成部分。
助记符
1.助记符不允许从第一列开始,否则被认为是语 句标号。 2.助记符可以是机器指令 (如ABS,MPYU,SPH 等)、伪指令(如.data, .list, .set等)、宏 指令(如.macro, .var, .mexit等)和宏调用。
的 位 描 述 ST1
C 移的ADD或SUB指令的执行,在这种情况下,ADD仅可设置进位位,而SUB仅能清 除进位位,不能对进位位产生其他影响。移位和循环移位指令以及SETC、CLRC 和LST指令也影响该位。条件转移、调用和返回指令可根据C状态作为执行的条 件。复位时,C被设置为1 XF引脚状态位。该位决定XF引脚的状态。XF是一个通用输出引脚。可由SETC XF指令设置,并由CLRC XF指令来清除。XF还可通过LST指令来修改。复位时, XF被置为1 乘积移位方式位。PM决定PREG寄存器的值在送至CALU或数据存储器前在乘积移 位器中进行移位的方式。移位过程中,PREG寄存器的内容保持不变,其值被复 制到乘积移位器中进行移位。PM可由SPM或LST指令修改。复位时,PM位被清除。 PM=00,32位乘积不经移位被送至CALU或数据存储器;PM=01,REG的输出在送 至CALU或数据存储器前被左移1位,其最低有效位填0;PM=10,PREG的输出在 送至CLAU或数据存储器前被左移4位,其最低有效位填0;PM=11,PREG的输出 在送至CLAU或数据存储器前被右移6位,且进行符号扩展 保留位。读访问时返回1,写访问对该位没有影响
MPY
乘法器
第六章 汇编语法,寻址及指令系统
• 1.汇编语法 • 2.寻址方式 • 3.指令系统
DSP汇编指令总结
DSP汇编指令引言DSP是指数字信号处理器,是一种专门用于数字信号处理的微处理器。
DSP汇编指令是在DSP芯片上执行操作的命令。
这篇文档将常见的DSP汇编指令及其使用方法。
通用指令MOVMOV是Move的缩写,指将数据从一个寄存器移动到另一个寄存器或内存地址中。
它有很多不同的格式,例如:MOV R1, #0 ; 将0存储在R1寄存器中MOV R2, R1 ; 将R1寄存器中的值复制到R2寄存器中MOV @R3, R2 ; 将R2寄存器中的值存储在R3指向的内存地址中ADD和SUBADD和SUB分别表示加法和减法运算。
它们也有不同的格式,例如:ADD R1, R2 ; 将R2寄存器中的值加到R1寄存器中ADD R1, #2 ; 将2加到R1寄存器中SUB R1, R2 ; 将R2寄存器中的值从R1寄存器中减去AND和ORAND和OR分别表示按位与和按位或运算。
它们也有不同的格式,例如:AND R1, R2 ; 将R1寄存器和R2寄存器中的值按位与后存储在R1寄存器中OR R1, R2 ; 将R1寄存器和R2寄存器中的值按位或后存储在R1寄存器中CMPCMP是Compare的缩写,用于比较两个值。
它会将两个操作数相减,并设置相关的标志位。
它的格式如下:CMP R1, R2 ; 比较R1和R2寄存器中的值跳转指令JMPJMP是Jump的缩写,用于无条件跳转到目标地址。
它的格式如下:JMP label ; 跳转到标签为label的位置JNZ和JZJNZ和JZ分别表示如果结果不为零则跳转和如果结果为零则跳转。
它们的格式如下:JNZ label ; 如果前一条CMP指令比较结果不为零,则跳转到标签为label的位置JZ label ; 如果前一条CMP指令比较结果为零,则跳转到标签为label的位置JGE和JLEJGE和JLE分别表示如果大于或等于则跳转和如果小于或等于则跳转。
它们的格式如下:JGE label ; 如果前一条CMP指令比较结果大于或等于,则跳转到标签为label的位置JLE label ; 如果前一条CMP指令比较结果小于或等于,则跳转到标签为label的位置循环指令DJNZDJNZ是Decrement and Jump if Not Zero的缩写,表示如果操作数不为零则减1并跳转到目标地址。
DSP常用汇编语言指令简介
;指定当前工作寄存器
MAR *+,AR1 ;把当前寄存器AR0的内容加
间接寻址方式 TMS320LF240X中八个辅助寄存器(AR0-AR8) 提供了灵活而强大的间接寻址能力,在使用时,包 括: (1)设置辅助寄存器指针(ARP) 例如: MAR *,AR1 LDP #04H LAR AR1,0 ;指明当前寄存器为AR1 ;指明当前数据页码 ;把地址为200H单元内容 ;装载入AR1寄存器
南航自动化学院DSP技术应用实验 室
直接寻址方式 使用直接寻址方式时,包括: (1)设置数据页 例如:LDP #4 ; 指向第4个数据页 (2)指明偏移量 例如: LDP #4 ;指向第4个数据页 ADD 1 ; 把地址为204h的数据单元内 ; 容加到累加器内
南航自动化学院DSP技术应用实验 室
2. 工作寄存器等指令举例
Example1:MAR *+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。 Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。 LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。 Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 南航自动化学院DSP技术应用实验 指向的内存单元。 室
4. 转移指令举例
南航自动化学院DSP技术应用实验 室
EQ NEQ LT LEQ GT GEQ NC C NOV BIO NTC TC UNC
ACC = 0 ACC <>0 ACC < 0 ACC <=0 ACC > 0 ACC >=0 C=0 C=1 OV = 0 BIO_ low TC = 0 TC = 1
DSP汇编指令总结
DSP汇编指令总结DSP汇编指令总结⼀、寻址⽅式:1、⽴即寻址:短⽴即寻址(单指令字)长⽴即数寻址(双指令字)第⼀指令字第⼆指令字16位常数=16384=4000h2、直接寻址ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进⾏增或减。
N规定是否改变ARP值,(N=0,不变)4.3.1、算术逻辑指令(28条)4.3.1.1、加法指令(4条);4.3.1.2、减法指令(5条);4.3.1.3、乘法指令(2条);4.3.1.4、乘加与乘减指令(6条);4.3.1.5、其它算数指令(3条);4.3.1.6、移位和循环移位指令(4条);4.3.1.7、逻辑运算指令(4条);4.3.2、寄存器操作指令(35条)4.3.2.1、累加器操作指令(6条)4.3.2.2、临时寄存器指令(5条)4.3.2.3、乘积寄存器指令(6条)4.3.2.4、辅助寄存器指令(5条)4.3.2.5、状态寄存器指令(9条)4.3.2.6、堆栈操作指令(4条)4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条)4.3.3.2、程序存储器读写指令(2条)4.3.3.3、I/O操作指令(2条)4.3.4、程序控制指令(15条)4.3.4.1、程序分⽀或调⽤指令(7条)4.3.4.2、中断指令(3条)4.3.4.3、返回指令(2条)4.3.4.4、其它控制指令(3条)4.3.1、算术逻辑指令(28条)4.3.1.1、加法指令(4条);▲ADD▲ADDC(带进位加法指令)▲ADDS(抑制符号扩展加法指令)▲ADDT(移位次数由TREG指定的加法指令)4.3.1.2、减法指令(5条);★SUB(带移位的减法指令)★SUBB(带借位的减法指令)★SUBC(条件减法指令)★SUBS(减法指令)★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条);★MPY(带符号乘法指令)★MPYU(⽆符号乘法指令)4.3.1.4、乘加与乘减指令(6条);★MAC(累加前次积并乘)(字数2,周期3)★MAC(累加前次积并乘)★MPYA(累加-乘指令)★MPYS(减-乘指令)★SQRA(累加平⽅值指令)★SQRS(累减并平⽅指令)4.3.1.5、其它算数指令(3条);★ABS(累加器取绝对值指令)★NEG(累加器取补码指令)★NORM(累加器规格化指令)返回4.3.1.6、移位和循环移位指令(4条);▲ SFL(累加器内容左移指令)▲ SFR(累加器内容右移指令)▲ROL(累加器内容循环左移指令)▲ROR(累加器内容循环右移指令)返回4.3.1.7、逻辑运算指令(4条);▲ AND(逻辑与指令)▲ OR(逻辑或指令)▲ XOR(逻辑异或指令)▲ CMPL(累加器取反指令)返回4.3.2、寄存器操作指令(35条)4.3.2.1、累加器操作指令(6条)▲ LACC(装载累加器指令)▲ LACT(装载累加器)*按TREG低4位指定的次数移位▲ LACL(装载累加器低16位指令)▲ ZALR(装载累加器指令)▲ SACL(移位并存储累加器低半部)▲ SACH(移位并存储累加器⾼半部)返回4.3.2.2、临时寄存器指令(5条)▲ LT(装载TREG指令)▲ LTA(装载TREG并累加上次乘积指令)▲ LTS (装载TREG并减去上次乘积指令)▲ LTD(装载TREG并累加上次乘积及数据移动指令)▲LTP(装载TREG和累加器指令)返回4.3.2.3、乘积寄存器指令(6条)▲ PAC (乘积寄存器内容载⼊累加器)▲ APAC (PREG与累加器相加)▲ SPAC(累加器和乘积寄存器相减)▲ LPH(装载PREG⾼16位指令)▲ SPL(存储PREG低16位指令)▲ SPH(存储PREG⾼16位指令)返回4.3.2.4、辅助寄存器指令(5条)★LAR(装载当前辅助寄存器AR)★SAR(存储辅助寄存器指令)★MAR(修改当前辅助寄存器)★SBRK(从当前辅助寄存器减去短⽴即数)返回4.3.2.5、状态寄存器指令(9条)★LST(装载状态寄存器)★SST(存储状态寄存器)★SETC(控制位置“1”指令)★SETC(控制位置“1”指令)★LDP(装载数据指针DP指令)★BIT(位测试指令)★BITT(测试由TREG指定bit code指令)★CMPR(⽐较当前辅助寄存器AR和AR0)返回4.3.2.6、堆栈操作指令(4条)★PUSH(累加器低16位进栈指令)★POP(栈顶内容弹出⾄累加器低16位指令)★POP(栈顶内容弹出⾄累加器低16位指令)★POPD(弹栈⾄数据存储器指令)返回4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条)▲DMOV(数据存储器内部数据移动指令)▲SPLK(存储长⽴即数⾄数据存储器指令)▲BLDD(数据存储器内部的数据块移动)▲ BLPD(从程序存储器到数据存储器的数据块传送)4.3.3.2、程序存储器读写指令(2条)★TBLR(读程序存储器数据到数据存储器)★TBLW(写程序存储器)4.3.3.3、I/O操作指令(2条)★IN(数据输⼊指令)★OUT(数据输出指令)4.3.4、程序控制指令(15条)4.3.4.1、程序分⽀或调⽤指令(7条)★B(⽆条件转移指令)★BANZ(辅助寄存器内容不等于零转移)★CALL(⽆条件⼦程序调⽤指令)★BACC(按累加器内容转移指令)★CALA(由累加器指定地址的⼦程序调⽤指令)★CC(条件调⽤指令)4.3.4.2、中断指令(3条)★INTR(软中断指令)★TRAP(软件陷阱中断)★NMI(⾮屏蔽中断)4.3.4.3、返回指令(2条)★RET(⽆条件从⼦程序或中断返回)★RETC(条件返回指令)4.3.4.4、其它控制指令(3条)★RPT(重复执⾏下条指令)★NOP(空操作)★IDEL(暂停)返回。
DSP第五章 DSP的汇编指令
展和移位操作都以第31比特为准。
M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40
; Clear M40
BSET M40
; Set M40
第五章 TMS320C55x系列DSP的汇编指令
2、累加器溢出状态(ACOVx)
当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。 以下情况会清零ACOVx位
复位; CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令; 通过BCLR指令清除; 溢出位检测受ST1_55中的M40位影响,即:
第五章 TMS320C55x系列DSP的汇编指令
(3)内置并行指令与用户自定义并行指令的混合形式 在不引起资源冲突的情况下,将隐含并行的指令按用户自定义 方式与另一条指令并行执行。例:
MPY *AR0, *CDP, AC0 ;隐含的或内置的并行指令 :: MPY *AR1, *CDP, AC1 ||MOV #5, AR1
பைடு நூலகம்
在实际编程时,只要指令满足这三条基本规则,即可写成并行
方式,然后进行编译。如果编译有错,则可参照书上详细规则进 行检测。
第五章 TMS320C55x系列DSP的汇编指令 5.4 TMS320C55x DSP的汇编指令
TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 一条指令的属性包括: 语法(Syntax) 执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size) 执行周期(Cycles) 在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed) 是否可以重复执行等
DSP指令集.doc(精)
C2的指令集C2xx DSP中共有汇编语言指令88条,分成6类:①累加器、算术和逻辑指令26条如:ADD、LACC、AND②辅助寄存器和数据页面指针指令7条如:MAR、LAR等③TREG、PREG和乘法指令20条如:LT、MTY、PAC等④分支、调用指令12条如:B、BCND、INTR等⑤控制指令15条如:SPM、POP、BIT等⑥存储器和I/O操作指令8条如:BLDD、SPLK、TBLR等注:有些指令助记符是增强性指令,对应于几条简单指令(机器码),如:ADD 可完成ADD,ADDH,ADDK和ADLK等功能,这样做可使程序更简洁并易读。
累加器,算术与逻辑指令助记符指令描述指令的中英文指令字周期ABSACC的绝对值Absolute Value of Accumulator(累加器内容取绝对值11ADD 加给ACC,带0~15-bit移位,直接或间接Add to Accumulator(加入累加器)11加给ACC,带0~15-bit移位,长立即数22加给ACC,带16-bit移位,直接或间接1 1加给ACC,短立即数1 1ADDC 加给ACC,带进位,直接或间接Add to Accumulator With Carry(带进位位加至累加器)1 1ADDS加给ACC低段,带符号展开抑制,直接或间接Add to Accumulator With Sign ExtensionSuppressed(抑制符号扩展加至累加器)1 1ADDT加给ACC,由TREG决定移位,直接或间接Add to Accumulator With Shift Specifiedby TREG(按TREG寄存器内容移位后加至累加器)1 1AND ACC与数据值,直接或间接AND With Accumulator(和累加器逻辑“与”)1 1ACC与长立即数,带0~15-bit移位2 2ACC与长立即数,带16-bit移位2 2CMPLACC取补Complement Accumulator(累加器求反(补)1 1LACC 带移位0~15-bit装入ACC,直接或间接Load Accumulator With Shift(数据左移后装入累加器)1 1带移位0~15-bit装入ACC,长立即数2 2带移位16-bit装入ACC,直接或间接1 1LACL 装入ACC的低段,直接或间接Load Low Accumulator and Clear HighAccumulator(装载累加器低位并清累加器高位)1 1装入ACC的低段,短立即数1 1LACT 装入ACC,由TREG低4位(0~3bit)决定移位(0~15bit),直接或间接Load Accumulator With Shift Specifiedby TREG(按TREG规定的移位后装入累加器)1 1NEG ACC取负Negate Accumulator(累加器求负) 1 1NORMACC内容归一化,间接Normalize Contents of Accumulator(规格化累加器)1 1OR ACC或数据值,直接或间接OR With Accumulator(与累加器逻辑“或” )1 1ACC或长立即数,带0~15-bit移位2 2ACC或长立即数,带16-bit移位2 2ROLACC循环左移Rotate Accumulator Left(累加器逻辑循环左移)1 1RORACC循环右移Rotate Accumulator Right(累加器逻辑循环右移)1 1SACH 存高段ACC,带移位0~7-bit,直接或间接Store High Accumulator With Shift(移位并存储累加器高位)1 1SACL 存低段段ACC,带移位0~7-bit,直接或间接Store Low Accumulator With Shift(移位并存储累加器低位)1 1SFLACC左移Shift Accumulator Left(累加器算术左移)1 1SFRACC右移Shift Accumulator Right(累加器算术右移)1 1SUB 从ACC减,带移位0~15 - bit,直接或间接Subtract From Accumulator (从累加器减 1 1从ACC减,带移位 0~15-bit,长立即数2 2从ACC减,带移位 16- bit,1 1直接或间接从ACC减,短立即数1 1SUBB 从ACC带借位减,直接或间接Subtract From Accumulator With Borrow(带借位从累加器减1 1SUBC 条件减,直接或间接Conditional Subtract(条件减法 1 1SUBS从ACC减,抑制符号展开,直接或间接Subtract From Accumulator With SignExtension Suppressed (抑制符号扩展从累加器减1 1SUBT 从ACC减,由 TREG决定的移位( 0~15-bit),直接或间接Subtract From Accumulator With ShiftSpecified by TREG (按TREG指定的值进行移位后从累加器减1 1XOR ACC异或数据值,直接或间接Exclusive OR With Accumulator (与累加器逻辑“异或”1 1ACC异或长立即数,带0~15-bit移位2 2ACC异或长立即数,带16-bit移位2 2ZALR ACC低段置0,舎入后装入ACC高段,直接或间接Zero Low Accumulator and Load HighAccumulator With Rounding(累加器低位清零并四舍五入装载累加器高位1 1辅助寄存器指令助记符指令描述指令的中英文指令字周期ADRK 常数加给AR,短立即数Add Short-Immediate Value toAuxiliary Register(短立即数加至当前辅助寄存器1 1BANZ 当前AR非0转移,间接Branch on Auxiliary RegisterNot Zero(辅助寄存器不等于2 2零转移CMPR 当前AR与AR0比较Compare Auxiliary RegisterWith AR0 (比较当前辅助寄存器和AR0,并把比较结果放在ST1的TC位1 1LAR 从指定的数据位置装入指定的AR,直接或间接Load Auxiliary Register(装载辅助寄存器1 2常数装入指定的AR,短立即数1 2常数装入指定的AR,长立即数2 2MAR 修改当前AR和/或ARP,间接(直接时无操作)Modify Auxiliary Register(修改辅助寄存器1 1SAR 存指定的AR至指定位置,直接或间接Store Auxiliary Register(存储辅助寄存器1 1SBRK 从当前AR减去常数,短立即数Subtract Short-ImmediateValue From AuxiliaryRegister(从当前辅助寄存器减去短立即数1 1暂时寄存器(TREG)、乘积寄存器(PREG)和乘法指令助记符指令描述指令的中英文指令字周期APAC PREG加到ACC Add PREG to Accumulator(P寄存器加至累加器1 1LPH 装入PREG高位Load Product Register HighWord(装载乘积寄存器高位1 1LT 装入TREG,直接或间接Load TREG(装载TREG寄存器1 1LTA 装入TREG,累加前次乘积,直接或间接Load TREG and AccumulatePrevious Product(装载TREG寄存器并累加前次乘积1 1LTD 装入TREG,累加前次乘积,搬移数据,直接或间接Load TREG, AccumulatePrevious Product, and MoveData(装载TREG寄存器、累加前次乘积并移动数据1 1LTP 装入TREG,存PREG入ACC,直接或间接Load TREG and Store PREG inAccumulator(装载TREG寄存器并存储PREG寄存器到累计器1 1LTS 装入TREG,减去前次乘积,直接或间接Load TREG and SubtractPrevious Product(装载TREG寄存器并减去前次乘积1 1MAC 乘且累加,直接或间接Multiply and Accumulate(乘且累加2 3MACD 乘且累加,数据转移,直接或间接Multiply and Accumulate WithData Move(乘且累加并带数据移动2 3MPY TREG乘数据值,直接或间接Multiply(乘 1 1TREG乘13-bit常数,短立即数1 1MPYA 乘且累加前次乘积,直接或间接Multiply and AccumulatePrevious Product(乘且累加前次乘积1 1MPYS 乘且减去前次乘积,直接或间接Multiply and Subtract PreviousProduct(乘且减去前次乘积 1 1MPYU 乘无符号数,直接或间接Multiply Unsigned(无符号乘法 1 1 PAC PREG装入ACC Load Accumulator With ProductRegister(将乘积寄存器装入累加器1 1SPAC 从ACC减去PREG Subtract PREG FromAccumulator(从累加器减去PREG寄存器1 1 SPH 存高段PREG,直接或间接Store High PREG(存储PREG 1 1高位SPL 存高段PREG,直接或间接Store Low PREG(存储PREG低位1 1SPM 设置乘积移位方式Set PREG Output ShiftMode(设置PREG移位方式1 1SQRA 平方且累加前次乘积,直接或间接Square Value and AccumulatePrevious Product(平方并累加前次乘积1 1SQRS 平方且减去前次乘积,直接或间接Square Value and SubtractPrevious Product(平方并减去前次乘积1 1转移指令助记符指令描述指令的中英文指令字周期B 无条件转移,间接Branch Unconditionally(无条件转移 2 4 BACC 转移至ACC指定的地址Branch to Location Specified byAccumulator(按累加器内容转移1 4BANZ 当前AR非0时转移,间接;判断(AR,(AR-1→(ARBranch on Auxiliary Register NotZero(当前辅助寄存器不等于零转移 2 4BCND 条件转移Branch Conditionally(条件转移 2 4CALA 调用ACC指定位置的子程序,间接Call Subroutine at Location Specifiedby Accumulator(调用累加器低16位指定地址处的子程序2 4CALL 调用子程序,间接Call Unconditionally(无条件调用指令2 4 CC 条件调用Call Conditionally(条件转移指令 2 4 INTR 软中断Software Interrupt(软中断 1 4NMI 不可禁止的中断Nonmaskable Interrupt(不可屏蔽中断转移到程序存储器1 4 RET 从子程序返回Return From Subroutine(子程序返回 1 4 RETC 条件返回Return Conditionally(条件返回 1 4 TRAP 软件中断Software Interrupt(软件陷阱中断 1 4 控制指令助记符指令描述指令的中英文指令字周期BIT 位测试,直接或间接Test Bit(位测试 1BITT 由TREG指定的位测试,直接或间接Test Bit Specified byTREG(测试TREG寄存器规定的位1CLRC 清除C位Clear Control Bit(状态位清零1清除INTM位 1 1 清除OVM位 1 1 清除SXM位 1 1 清除TC位 1 1 清除XF位 1 1IDLE 停止执行,直至中断Idle Until Interrupt(空闲直至中断发生1LDP 装入数据页指针,直接或间接Load Data PagePointer(装载数据页指针 1装入数据页指针,短立即数1 2LST 装入状态寄存器ST0,直接或间接Load Status Register(装载状态寄存器1装入状态寄存器ST0,直接或间接1 2NOP 无操作No Operation(空操作 1POP 将堆栈顶弹出至ACC低段Pop Top of Stack to Low Accumulator(栈顶弹出至累加器的低位1POPD 将堆栈顶弹出至数据存储器,直接或间接Pop Top of Stack to DataMemory(栈顶弹出至数据存储器1PSHD 将数据存储器的值压入堆栈,直接或间接Push Data-Memory ValueOnto Stack(数据存储器值进栈1PUSH 将ACC低段压入堆栈Push Low AccumulatorOnto Stack(累加器低位进栈1RPT 重复执行下一条指令,直接或间接Repeat NextInstruction(重复执行下条指令1重复执行下一条指令,短立即数1 1SETC 设置SXM位Set Control Bit(置位 1 设置TC位 1 1设置XF位 1 1设置C位 1 1设置CNF位 1 1设置INTM位 1 1设置OVM位 1 1SPM 设置乘积移位模式Set PREG Output ShiftMode(设置PREG移位输出方式1SST 存状态寄存器ST0,直接或间接Store Status Register(存储状态寄存器1存状态寄存器ST1,直接或间接1 1I/O和存储器指令助记符指令描述指令的中英文指令字周期BLDD 数据块从数据存储器搬移至数据存储器,直接或间接,长立即数作源存储器地址Block Move From Data Memory toData Memory(数据存储器到数据存储器的块传送2 3BLPD 数据块从程序存储器搬移至数据存储器,直接或间接,长立即数作源存储器地址Block Move From Program Memoryto Data Memory(程序存储器到数据存储器的块传2 3DMOV 数据在数据存储器中搬移,直接或间接Data Move in Data Memory(在数据存储器内传送数据1 1IN 从I/O输入数据,直接或间接Input Data From Port(端口地址送数据地址总线2 2OUT 输出数据至口,直接或间接Output Data to Port(端口地址送数据地址总线2 3SPLK 存长立即数至数据存储器,直接或间接Store Long-Immediate Value to DataMemory(存储长立即数值至数据存储器2 2TBLR 读数据表,直接或间接Table Read(读表 1 3TBLW 写数据表,直接或间接 Table Write(写数据表 1 31. 指令格式(即语法)不带进位加法指令格式: ADD dma [,shift] ;直接寻址 ADD dma ,16 ;16位左移直接寻址 ADD ind [,shift [,ARn ] ] ;间接寻址 ADD ind ,16[,ARn ] ;16位左移的间接寻址 ADD #k ;短立即寻址ADD #lk [,shift ] ;长立即寻址2.操作数dma;直接寻址时,数据存储器地址低7位shift:;左移值从0 到 15(默认值为0)n;指示下一个辅助寄存器n= 0~ 7 k: ;8位短立即数值lk: ;16位短立即数值ind;选择下列7种间接寻址方式中的一种* *+ *- *0+ *0- *BR0+ *BR0-3.操作码.执行4(1 (Smem+(src→src(2 (Smem<<(TS)+(src)→src(3 (Smem<<16+(src)→dst(4 (Smem[ <<SHIFT]+(src)→dst(5 (Xmem <<SHIFT+(src)→src(6( (Xmem+ (Ymem <<16→dst(7 lk<<SHFT+(src)→dst(8 lk<<16+(src)→dst(9 (src or[dst]+(src)<<SHIFT→dst(10 (src or[dst]+(src)<<ASM→dst5.状态位指令执行受SXM和OVM的影响,指令执行结果影响C和OV 6.说明把一个16位的数加到选定的累加器中,或一个采用双数据存储器操作数寻址的操作数Xmen。
DSP指令大全(最全)
DSP指令大全(最全)附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件―真‖,§条件―假‖,※延迟指令。
四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif 条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。
DSP常用语言指令简介
2. 工作寄存器等指令举例
z Example1:MAR
*+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。 z Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。 LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。 z Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 南航自动化学院DSP技术应用实验 指向的内存单元。 室
南航自动化学院DSP技术应用实验 室
z Example1:BCND
xxx, LEQ, C ;如果累加 器<=0并且进位C=1,那么程序就跳转到标 号xxx处执行;否则,程序顺序执行。根据 累加器ACC的内容产生的转移条件如下表格 所示。类似的指令还有:CC xxx。 z Example2:BANZ。第七页举例。
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
z Example
1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 z Example 2:LACC *,4; (与SXM有关) z Example 3:ROL;把累加器内容循环左移 z Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 z Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
Example 6: AND 16 ;(假设DP = 4),把地址 =210H的内存单元内容和ACC相逻辑“与”,结果存 入累加器。 z Example 7:SFL ;把整个的ACC内容左移一位,低 位填0,最高位送入进位位,不受SXM影响。 z Example 8:SFR ;把整个的ACC内容右移一位,高 位根据SXM进行符号位扩展。例如: 1.执行前ACC=B0001234h,SXM=0,执行后ACC= 5800091Ah; 2.执行前ACC=B0001234h,SXM=0,执行后ACC =5800091Ah;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
寻址短立即数时,加操作不受SXM的影响,且不能重复执行。
ADDADDC 1直接/间接该指令抑制符号扩展该指令抑制符号扩展;无论SXM为何值,数据均作无符号16位数看待。
当SXM=0和直接/间接移位次数等于0时,ADDS与ADD指令结果相同。
被寻址的数据寄存器单元的内容左移并加直接/间接到ACC,移位次数由TREG的低4位确定,SXM位的值控制移位时是否作符号扩展。
使用直接/间接寻址,ACC的低位字与数据直接/间接存储器单元的值作与运算,结果存在ACC的低字,ACC的高位字清0。
使用立即数寻址,长立即数可以左移,移位时,32位中长立即数未被长立即操作数填充的位均被清零。
长立即数累加器中的内容用其逻辑反取代指定的数据存储器单元的内容或16位常数直接/间接左移并加载到ACC,低位填0,若SXM= 1,高位用符号位扩展;若SXM=0,则填直接/间接0。
长立即数指定的数据存储器单元的内容或用0扩展直接/间接的8位常数左移并加载到ACC的低16位, ACC的高位填0。
数据作为16位无符号数短立即数处理,无论SXM为何值,本指令都不进行符号扩展。
将数据存储器单元的内容左移后加载到直接/间接ACC。
左移位数由TREG的低4位确定。
SXM的值决定ACC高位是否符号扩展。
将ACC的内容换成其相反数。
当对0000h作NEG操作时,OV置1。
若OVM=1,ACC=7FFFh,若OVM=0,则ACC=8000 0000h,只要ACC不等于0则C=0,当ACC=0,则C=1。
NORM指令将ACC中的有符号数进行规格化。
对定点数进行规格化即将其分成指数和尾数,为此对位31和位30作异或运算间接即可确定位30是数值还是符号。
对当前AR的缺省修改方式是加1。
该指令对正、负二进制补码均适用。
由于该指令在流水53ADDS(ACC)+(数据存储器地址)→ACC (ACC)+(数据存储器地址)左移(TREG(3:0))位→ACC(15:0)1ADDT 1ANDCMPLLACCLACL1(ACC(15:0))AND (数据存储器地址)→ACC(15:0)0→ACC(31:16)shift(ACC(31:16))AND lk ×2→ACC216(ACC(31:16))AND lk ×2→ACC(ACC)的逻辑反→ACC 1shift(数据存储器地址)×2→1ACC16(数据存储器地址)×2→ACC 1shift位→ACC lk×22(数据存储器地址)→ACC(15:0)10→ACC(31:16)k→ACC(7:0)10→ACC(31:16)(数据存储器地址)左移TREG(3:0)位→ACC(15:0)1LACTNEG (ACC)×(-1)→ACC 1NORM若(ACC)=0,则TC→1;否则若(ACC(31))XOR(ACC(30))=0,则TC→0,(ACC)×2 →ACC按指定的方式修改AR否则TC→11OR(ACC(15:0))OR (数据存储器地址)→ACC(15:0)(ACC(31:16))→ACC(31:16)(ACC)OR lk×2shift16→ACC(ACC)OR lk×2→ACC (ACC(31))→C(ACC(30:0))→ACC(31:1)C→ACC(0)C→ACC(31)(ACC(31:1))→A CC((30:0))(ACC(0))→C ((ACC)×2)的高16位→数据存储器地址((ACC)×2)的低16位→数据存储器地址(ACC(31))→C(ACC(30:0))→ACC(31:1)0→ACC(0)若SXM=0,则0→ACC(31)若SXM=1,则ACC(31)→ACC(31)(ACC(31:1))→ACC(30:0)(ACC(0))→Cshiftshift线的第4阶段才完成对AR的操作,而其它指令在流水线的第2阶段完成对AR 的操作,因此紧跟在NORM指令后的两条指令不能对AR值或者ARP值进行修改。
否则NORM指令将不能操作正确的数据存储器单元。
ACC的内容和被寻址的数据地址单元的值或左移后的立即数作或操作,SXM位对OR1直接/间接指令没有影响。
数据操作数没有被占用的位总是填0。
因此在直接或间接寻址或不2长立即数移位的长立即数的情况下ACC的高位是不变的。
当操作数是立即数且移位次数不等2长立即数于0时,操作数左移低位补0。
将ACC内容左移一位,进位位被移入最低位,最高位被移入进位位。
将ACC内容右移一位,进位位被移入最高位,最低位被移入进位位。
ROL1ROR1SACHSACH将整个ACC的32位数左移0-7位,将1直接/间接移位后数值的高16SACH将整个ACC的32位数左移0-7位,将1直接/间接移位后数值的低16 1 1SFL指令使ACC的内容左移一位,ACC的最低位填0,最高位移入进位位C。
SFR指令将ACC的内容右移一位。
若SXM=1,则产生算数右移,ACC的符号位不变,位31复制到位30,位0移入进位位。
若SXM=0,则产生逻辑右移,ACC的所有内容右移一位,位0移入进位位,位31填0 在直接间接和长立即数寻址方式里被寻址的数据存储单元的内容或16位常数左移,然后累加器减去移位后的值。
移位时低位填0。
高位扩展与否由SXM当使用短立即数时累加器减去8位正常数。
此时不可以指定移位值,减法不受SXM的影响,并且是不可重复的。
通常情况下,若减法结果有借位则进位位清0;若减法结果没有借位,则进位位置1。
但若移位次数为16,则当减法结果有借位时进位位清0,减法不产生借位时,进位位不变。
ACC的值减去被寻址的数据寄存单元的内容及进位位的逻辑反值,抑制符号扩展。
若相减结果产生借位进位位清0;若没有借位则进位位置1。
ACC实现条件减,可用于除法:把16位的54SACLSFLSFR(ACC)-(数据存储器地址)×2→ACC(ACC)-(数据存储器地址)×SUB2→ACC (ACC)-k→ACC (ACC)-lk×2shift16shift→ACC1 1 1 2直接/间接直接/间接短立即数长立即数SUBB SUBC(ACC)-(数据寄存器地址)-(C的逻辑反)→ACC 11直接/间接直接/间接若(ACC)>=0 且(数据存储器地址)>=0(ACC)-(数据寄存器地址)×2→ALU输出。
若ALU输出>=0,则(ALU输出)×2+1→ACC否则(ACC)×2→ACC15SUBS1ACCACC)-((数据寄存器地址)×SUBT2 →ACC 若SXM=1,则(数据存储单元)用符号扩展若SXM=0,则(数据存储单元)不用符号扩展ACC(15:0))XOR(数据寄存器地址)→ACC(15:0)(ACC(31:1))→ACC(31:16)或(ACC(31:0))XOR lk×2shift(TREG(3:0))1正被除数放在ACC的低16位,ACC的高位清0;16位的正除数放在数据存储单元中。
执行SUBC指令16次。
;最后一次SUBC指令完成后ACC的低16位是除数的商,ACC的高16为是余数。
若ACC和存储单元的内容为负,则不能用SUBC实现除法。
若16位被除数的有效数字少于16位可将它放在ACC中并左移,左移的位数为前面非有效的0的个数,SUBC指令执行的次数为16减去移位次数。
执行该指令不会因正溢或负溢而饱和。
ACC减去数据存储单元的内容,抑制符号扩展。
不管SXM为何值,数据存储单元的直接/间接内容都作为无符号处理。
ACC还是作为有符号数。
若相减结果有借位清0,若没有借位C置1。
ACC减去左移后的数据存储单元的内容,移位次数由TREG的低4位确定。
SXM控制是否对直接/间接数据存储单元的内容作符号扩展。
XOR→ACC(31:0)16ZALR或(ACC(31:0))XOR lk×2→ACC(31:0)(数据存储器地址)→ACC(31:16)8000h→ACC(15:0)直接和间接寻址时ACC的低16位和被寻址的数据存储单元的内容作异或运算,结果存在ACC的低16位,ACC的高16位不变。
使用长立即数寻址时,长立即数左移,数1直接/间接据操作数没有占用的位填0,然后和ACC 中的32位数作异或运算。
2长立即数1数据存储单元的内容送到ACC的高16位,直接/间接ACC的低15位清0,第15位置1。
55表3 辅助寄存器指令 ADRK指令功能(当前AR)+k→当前AR 若(当前AR)≠ 0,则操作数→PC 否则(PC)+2→PC 按指令要求的方式修改(当前AR)和(ARP)(当前AR)与(AR0)比较,并把结果放在状态寄存器ST1的TC位(数据存储器地址)→ARxk→ARx lk→ARx 按指令指定的方式修改(当前AR)和(ARP)(ARx)→数据寄存器地址(当前AR)-K→当前AR周寻址方式指令说明 8位立即数按右对齐方式与当前辅助寄存器1值相加。