DSP汇编指令总结
DSP汇编指令总结
DS P汇编指令总结 一、寻址方式: 1、立即寻址:短立即寻址(单指令字) D1D14 D13 D12 D 1D 1D9 D8 D7 D6 D5 D4 D3 D2D1 D0长立即数寻址(双指令字) 第一指令字 D 1D14 D13 D12 D 1D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0第二指令字 D 1D14 D 1D12 D11 D10 D 9 D 8 D7 D6 D 5 D4 D3 D2 D1 D0 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汇编指令学习笔记
Knowledge问题谁在DSP的汇编语言中加入了NOP指令?NOP指令加入的条件是什么?About DSP1.DSP是实时数字信号处理的核心和标志。
2.DSP分为专用和通用两种类型。
专用DSP一般采用定点数据结构(一般不支持小数),数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。
3.DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了运行速率。
DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每秒)。
4.DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换)具有哈弗结构把指令空间与数据空间隔离的存储方式。
这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。
传统哈弗结构:两个独立的存储空间,还使用独立总线。
让取指与执行存储独立,加快执行速度。
改进型哈弗结构:指令与数据的存储空间还是独立的。
但是使用公共的总线(地址总线与数据总线)。
这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE 总线承接了,所以总线冲突的情况会大大减少。
同时让总线的结构与控制变得简单,CACHE 存储的速度也明显快于外设存储器。
冯诺依曼结构:是指令空间与数据空间共享的存放方式。
它不能实现pipeline的执行过程。
Pipeline(流水线)技术是把指令的取指-译码和指令的执行独立开来的技术。
虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。
但是多个指令同时并行先后进行,保证总体的指令吞吐速率理想情况下可以保证在每个指令只要一个CPU CYCLE。
Pipeline技术必须要有哈弗结构支持,即必须把指令空间与数据空间隔离存放。
流水线阻断流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。
第五章 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汇编指令
dsp中的汇编伪指令伪指令分类伪指令及其表示格式具体描述段定义伪指令 .asect “段名” , 地址汇编到一以绝对地址为起始的段中.bss 符号,字数[,块标号] 在未初始化数据段bss中保留空间.data 汇编到已初始化数据段data中.sect “段名”汇编到一已命名(已初始化)的段中.text 汇编到可执行代码段text中符号 .usect “段名”,字数[,块标号] 在一已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) .bes 位数在当前段中保留位数(标号指向所保留空间的尾部).bfloat 数值初始化一个32位,IEEE单精度的浮点常数;禁止有跨页的初始化对象。
.blong 数值1[,…,数值n] 初始化一个或多个32位整数;禁止有跨页的初始化对象。
.byte 数值1[,…,数值n] 初始化当前段中一个或多个连续字节.field 数值1[,…,数值n] 初始化一个可变长度的字段.float 数值初始化一个32位,IEEE单精度的浮点常数.int 数值1[,…,数值n] 初始化一个或多个16位整数.long 数值1[,…,数值n] 初始化一个或多个32位整数.space 位数在当前段中保留位数(标号指向所保留空间的头部).string “字符串1”[,…,“字符串n”] 初始化一个或多个文本字符串.word 数值1[,…,数值n] 初始化一个或多个16位整数对准段程序计数器的伪指令 .align 在一页的边缘对准SPC(段程序计数器).even 在一偶数的边缘对准SPC定义输出列表格式的伪指令 .drlist 使所有伪指令行都被列出(缺省方式).drnolist 禁止某些伪指令行的列出.fclist 允许列出错误的条件代码块(缺省方式).fcnolist 禁止列出错误的条件代码块.length 页的长度定义源文件列表的页长.list 从头开始源文件的列表.mlist 允许宏列表和循环块(缺省方式).mnolist 禁止宏列表和循环块定义输出列表格式的伪指令 .nolist 停止源文件列表.option{B/D/F/L/M/T/X} 选择输出列表文件的参数.page 在源文件列表中生成一页.sslist 允许扩展子程序符号列表.ssnolist 禁止扩展子程序符号列表(缺省方式).tab 大小设置表的大小.title “字符串”在列表页头显示一个标题.width 页宽设置源文件列表的页宽外部文件定位的指伪令 .copy [“]文件名[”] 包含其他文件中的源语句.def 符号1[,…,符号n] 标明一个或多个在当前模块中定义而在其他模块中要用到的符号.global 符号1[,…,符号n] 标明一个或多个全局(外部)符号.include [“]文件名[”] 包含其他文件中的源语句.mlib [“]文件名[”] 定义宏定义库.ref符号1[,…,符号n] 标明一个或多个在另一模块中定义而在当前模块中要用到的符号条件汇编伪指令.break [确切定义的表达式] 如果条件满足,就结束.loop汇编。
DSP常用汇编语言指令简介
5. 控制指令举例
Example1:BIT0h,15 ;(DP = 6)把内存地址=300h 单元内容的最低位(BIT0)送给TC。 Example2:LDP #0h;使用立即数方式装载 数据页,也可以采用直接寻址和间接寻址方式装 载。 Example3:PUSH ;把累加器的低16位压入堆 栈。 Example4:SETC C;置进位C=1,也可以设置 以下的控制位为1或者为0,例如:CNF、INTM、 OVM、SXM、TC和XF。类似的指令还有: CLRC。
2. 工作寄存器等指令举例
Example4:ADRK #80h ;把当前工作寄存器内容 加一个立即数80h(注意立即数范围:00~FFh)。类 似的指令还有SBRK。 Example5:BANZ指令使用举例。例: MAR *, AR0 ;当前ARP=AR0 LAR AR1, #03h ;AR1内容赋值为03h LAR AR0, #60h ;AR0内容赋值为60h ZAC ; 累加器ACC清零 loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1 BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。 南航自动化学院DSP技术应用实验 返回到第10页 室
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
Example 1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 Example 2:LACC *,4; (与SXM有关) Example 3:ROL;把累加器内容循环左移 Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器
DSP指令一览表
DSP指令一览表附录6 TMS320C54x 指令系统一览表按指令功能排列
一、算术运算指令
1. 加法指令
2. 减法指令
3. 乘法指令
4. 乘法累加/减指令
5. 双精度32位操作数指令
6. 专用指令
二、逻辑运算指令
1. 与逻辑运算指令
2. 或逻辑运算指令
3. 异或逻辑运算指令
4. 移位指令
5. 测试指令
三、程序控制指令
1. 分支转换指令
2. 调用指令
注:条件“真”,§条件“假”,※延迟指令;
3. 中断指令
4. 返回指令
注:条件“真”,§条件“假”,※延迟指令;
5. 重复指令
注:条件“真”,§条件“假”,※延迟指令;
6. 堆栈管理指令
7. 其他程序控制指令
注:条件“真”,§条件“假”,※延迟指令;
四、加载和存储指令
1. 加载指令
2. 存储指令
3. 条件存储指令
4. 并行加载和存储指令
5. 并行加载和乘法指令
6. 并行存储和加 / 减法指令
7. 并行存储和乘法指令
8. 其他加载和存储指令。
dsp汇编指令
dsp中的汇编伪指令伪指令分类伪指令及其表示格式具体描述段定义伪指令 .asect “段名” , 地址汇编到一以绝对地址为起始的段中.bss 符号,字数[,块标号] 在未初始化数据段bss中保留空间.data 汇编到已初始化数据段data中.sect “段名”汇编到一已命名(已初始化)的段中.text 汇编到可执行代码段text中符号 .usect “段名”,字数[,块标号] 在一已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) .bes 位数在当前段中保留位数(标号指向所保留空间的尾部).bfloat 数值初始化一个32位,IEEE单精度的浮点常数;禁止有跨页的初始化对象。
.blong 数值1[,…,数值n] 初始化一个或多个32位整数;禁止有跨页的初始化对象。
.byte 数值1[,…,数值n] 初始化当前段中一个或多个连续字节.field 数值1[,…,数值n] 初始化一个可变长度的字段.float 数值初始化一个32位,IEEE单精度的浮点常数.int 数值1[,…,数值n] 初始化一个或多个16位整数.long 数值1[,…,数值n] 初始化一个或多个32位整数.space 位数在当前段中保留位数(标号指向所保留空间的头部).string “字符串1”[,…,“字符串n”] 初始化一个或多个文本字符串.word 数值1[,…,数值n] 初始化一个或多个16位整数对准段程序计数器的伪指令 .align 在一页的边缘对准SPC(段程序计数器).even 在一偶数的边缘对准SPC定义输出列表格式的伪指令 .drlist 使所有伪指令行都被列出(缺省方式).drnolist 禁止某些伪指令行的列出.fclist 允许列出错误的条件代码块(缺省方式).fcnolist 禁止列出错误的条件代码块.length 页的长度定义源文件列表的页长.list 从头开始源文件的列表.mlist 允许宏列表和循环块(缺省方式).mnolist 禁止宏列表和循环块定义输出列表格式的伪指令 .nolist 停止源文件列表.option{B/D/F/L/M/T/X} 选择输出列表文件的参数.page 在源文件列表中生成一页.sslist 允许扩展子程序符号列表.ssnolist 禁止扩展子程序符号列表(缺省方式).tab 大小设置表的大小.title “字符串”在列表页头显示一个标题.width 页宽设置源文件列表的页宽外部文件定位的指伪令 .copy [“]文件名[”] 包含其他文件中的源语句.def 符号1[,…,符号n] 标明一个或多个在当前模块中定义而在其他模块中要用到的符号.global 符号1[,…,符号n] 标明一个或多个全局(外部)符号.include [“]文件名[”] 包含其他文件中的源语句.mlib [“]文件名[”] 定义宏定义库.ref符号1[,…,符号n] 标明一个或多个在另一模块中定义而在当前模块中要用到的符号条件汇编伪指令 .break [确切定义的表达式] 如果条件满足,就结束.loop汇编。
第三章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汇编指令总结
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汇编伪指令总结
[转载]DSP汇编伪指令总结原⽂地址:DSP汇编伪指令总结作者:慕慕1.定义段的伪指令助记符和语法说明.asect"section name",address汇编⾄绝对命名(初始化)段(此段已过时).bss symbol, size in words [, blocking flag]在.bss段(未被初始化数据段)保留size个字.data汇编⾄数据(初始化数据)段.sect ”section name”汇编⾄⼀个命名(已初始化)段.text汇编⾄.text可执⾏代码)段symbol .usect “section name”, size in words,[blocking flag]在1个命名段(未被初始化)保留.size个字2.初始化常数(数据和存储器)的伪指令助记符号和语法说明.bes size in bits 在当前段保留size位;标号指向保留间的末尾.bfloat value 初始化⼀个32位,IEEE单精度浮点常数;不允许⽬标跨越业界..blong value1 [, ... , valuen ]初始化⼀个或多个32位的整数;不允许⽬标跨越页边界.byte value1 [, ... ,valuen ]在当前段初始化⼀个或多个连续字节 .field value [, size inbits]初始化可变长度域.float value初始化⼀个32位,IEEE单精度浮点数 .int value1 [, ... ,valuen ]初始化1个或多个16位整数.long value1 [, ... ,valuen ]初始化个或多个32位整数.space size in bits在半前段保留.size位;标号指向保留空间的末尾.string ”string1” [, ... ,”stringn”]初始化—个或多个.text串.word value1 [, ... ,valuen ]初始化⼀个或多个16位整数3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令.drlist允许所有伪指令⾏的列出(默认) .drnolist禁⽌特定的伪指令⾏的列出 .fclist允许列出度假条件代码块(默认) .fcnolist禁⽌列出虚假条件代码块.length page length设置源列表的页长度.list重启源列表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.其他伪指令.emsg string 把⽤户定义的错误信息送到输出器件.end 结束程序.label symbol 在段中定义装载时可重定位标号.mmregs 把存储器映射寄存器输⼊到符号表中.mmsg string 把⽤户定义信息送到输出设备.port 打开汇编器移植开关.sblock ”section name” [,”section name”, . . . ] 为块指定段.version generation #number 为块指定段.wmsg string 将⽤户定义的警告信息送到输出设备。
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汇编指令3-典型指令
3.3 典型指令说明指令 1、数据存储器至数据存储器间的块传送: BLDD # lk,dma;源地址为长立即数,直接寻址 BLDD # lk,ind[,ARn];源地址为长立即数,间接寻址 BLDD dma, # lk;目标地址为长立即数,直接寻址 BLDD ind,# lk [,ARn];目标地址为长立即数,间接寻址 该指令将数据存储器中的一块源数据字连续地复 制到指定的目的数据存储单元中。
指令执行前 指令执行后
ARP AR1 数据存储器
3FEh
1 3FEh
ARP AR1
数据存储器
3 3FEh
62h 0h 3h 0Fh X C 5h
3FEh
62h 62h 62h 0Fh 0 C 14h
数据存储器
3FFh TREG PREG ACC
数据存储器
3FFh TREG PREG ACC
AR4
数据存储器 300h DP
0300h
AR4
数据存储器
0300h
06h 1FFh
300h DP
06h 06h
7、装载状态寄存器: LST # m,dma;直接寻址 LST # m,ind[,ARn];间接寻址 LST指令时向状态寄存器ST0或ST1装载指定数据存储器的内容。 若m=0,则选择ST0;若m=1,则选择ST1。 用LST指令装载ST0时,不影响ST0的INTM位。该位是可屏蔽中 断的总屏蔽位,通过指令SETC INTM和CLRC INTM对其操作。 虽然LST #0操作向ARP装入新值,但并不影响ST1寄存器中的 ARB字段。 在LST #1操作中,送入ARB中的值也被送入ARP。 若在间接寻址方式下用一操作数来指定下一AR值,则该操作数 将被忽略,而将被寻址数据存储器单元所含值的3位最高有效位 送入ARP。 状态寄存器中的保留位读出总为1,这些位对写入不起作用。 LST指令用于自程序调用和中断恢复状态寄存器。 该指令影响ARB、ARP、OV、OVM、DP、CNF、TC、SXM、 C、XF和PM状态位,但不影响INTM。
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—使汇编语言文件中大小没有区别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP汇编指令总结
一、寻址方式:
1、立即寻址:
短立即寻址(单指令字)
长立即数寻址(双指令字)
第一指令字
第二指令字
16位常数=16384=4000h
2、直接寻址
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并减去上次乘积指令)
▲ L TD(装载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(暂停)
返回。