资源描述
DSP汇编指令总结
一、寻址方式:
1、立即寻址:
短立即寻址(单指令字)
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
1
0
1
1
0
1
1
0
0
0
1
1
采用立即寻址方式的PRT的操作码
8位常数=99
长立即数寻址(双指令字)
第一指令字
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
1
1
1
1
1
0
0
1
0
0
1
0
采用长立即寻址方式的ADD指令的操作码
(12位)
位移次数=2(4位)
第二指令字
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
16位常数=16384=4000h
2、直接寻址
状态寄存器(ST0)
指令寄存器(IR)
D15~D13
D12
D11
D10
D9
D8 ~ D0
D15 ~ D8
D7
D6 ~ D0
ARP
OV
OVM
1
INTM
数据页面指针DP
8MSB
0
7 LSB
指令操作码
页 面(9MSB)
偏移量(7LSB)
3、间接寻址
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
8MSBs
1
ARU
N
NAR
ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进行增或减。
N规定是否改变ARP值,(N=0,不变)
NAR下一个辅助寄存器值
ARU
执行的算术运算
6
5
4
0
0
0
*
0
0
1
*-
0
1
0
*+
0
1
1
1
0
0
*BR0-
1
0
1
*0-
1
1
0
*0+
1
1
1
*BR0+
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(暂停)
返回
展开阅读全文