dsPIC30F/33F程序员参考手册 表3-9: 影子1堆栈指令 汇编语法 说明 宇数周期数页码 LNK #t14 分配堆栈帧 1 5-135 POP f 栈顶内容弹出到f 1 1 5-186 POP Wd 栈顶内容弹出到Wd 1 1 5-187 POP.D Wnd 从栈顶弹出双字到Vd:Wnd-+1 1 2 5-188 POP.S 将影子寄存器内容弹出到主寄存器 5-189 PUSH f 将f内容压入栈顶 1 1 5-190 PUSH Ws 将Ws内容压入栈顶 5-191 PUSH.D Wns 将Wns:Wns+1的内容压入栈顶 5-192 PUSH.S 将主寄存器内容压入影子寄存器 5-193 ULNK 释放堆栈帧 7 5-258 表3-10: 控制指令 汇编语法 说明 字数周期数页码 CLRWDT 清除看门狗定时器 7 5-79 DISI #it14 在(t14+1)个指令周期内禁止中断 1 5-100 NOP 空操作 1 5-184 NOPR 空操作 1 5-185 PWRSAV #lit1 进入低功耗模式t1 1 5-194 RESET 软件器件复位 1 1 5-200 表3-11: DSP类指令 汇编语法 说明 字数周期数页码 ADD Acc 累加器相加 1 5-11 ADD Ws,#Slit4.Acc 将16位有符号数加到Acc 5-12 CLR Acc.Wx.Wxd.Wy.Wyd.AWB 清零AcC 1 5-77 ED Wm*Wm.Acc,Wx.Wy.Wxd 欧几里德距离 1 1 5-111 (无累加) EDAC Wm*Wm.Acc.Wx.Wy,Wxd 欧几里德距离 1 1 5-113 LAC Ws.#Slit4.Acc 装载Acc 5-133 MAC Wm"Wn.Acc.Wx.Wxd.Wy. 相乘并累加 5-141 Wyd.AWB MAC WmWm,Acc,Wk,kd,Wy,Wyd平方并累加 1 1 5143 MOVSAC Acc.Wx.Wxd.Wy.Wyd,AWB 将Wk中内容传送到Wkd,并将 5-159 WM中内容传送到yd MPY WmWn,Acc,x,Wkd,Wy.Wyd将Wh与Wm相乘,并将结果存 1 1 5-161 入Acc MPY WmWm,Acc,k,Wxd,y.Wyd平方,并将结果存入Acc 5-163 MPY.N WmWh,Acc,k,Wxd,y.yd将Wn与-Wm相乘,并将结果 5-165 存入AcC MSC Wm*Wn,Acc,Wx,Wxd.Wy. 将h与Wm相乘,并将结果从 5-167 Wyd.AWB Acc中减去 NEG Acc 求反Acc 1 1 5-183 SAC Acc,#Slit4,Wd 存储Acc内容 1 1 5-216 SAC.R Acc,#Slit4.Wd 存储舍入后的Acc 1 1 5-218 SFTAC Acc,#Slit6 对Acc进行算术移位SIit6次 1 1 5-223 SFTAC Acc.Wn 对Acc进行算术移位Wn)次 5-224 SUB Acc 累加器相减 5-235 DS70157BCN第3-10页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 3-10 页 初稿 2006 Microchip Technology Inc. 表 3-9: 影子 / 堆栈指令 表 3-10: 控制指令 表 3-11: DSP 类指令 汇编语法 说明 字数 周期数 页码 LNK #lit14 分配堆栈帧 1 1 5-135 POP f 栈顶内容弹出到 f 1 1 5-186 POP Wd 栈顶内容弹出到 Wd 1 1 5-187 POP.D Wnd 从栈顶弹出双字到 Wd:Wnd+1 1 2 5-188 POP.S 将影子寄存器内容弹出到主寄存器 1 1 5-189 PUSH f 将 f 内容压入栈顶 1 1 5-190 PUSH Ws 将 Ws 内容压入栈顶 1 1 5-191 PUSH.D Wns 将 Wns:Wns+1 的内容压入栈顶 1 2 5-192 PUSH.S 将主寄存器内容压入影子寄存器 1 1 5-193 ULNK 释放堆栈帧 1 1 5-258 汇编语法 说明 字数 周期数 页码 CLRWDT 清除看门狗定时器 1 1 5-79 DISI #lit14 在 (lit14 + 1) 个指令周期内禁止中断 1 1 5-100 NOP 空操作 1 1 5-184 NOPR 空操作 1 1 5-185 PWRSAV #lit1 进入低功耗模式 lit1 1 1 5-194 RESET 软件器件复位 1 1 5-200 汇编语法 说明 字数 周期数 页码 ADD Acc 累加器相加 1 1 5-11 ADD Ws,#Slit4,Acc 将 16 位有符号数加到 Acc 1 1 5-12 CLR Acc,Wx,Wxd,Wy,Wyd,AWB 清零 Acc 1 1 5-77 ED Wm*Wm,Acc,Wx,Wy,Wxd 欧几里德距离 ( 无累加 ) 1 1 5-111 EDAC Wm*Wm,Acc,Wx,Wy,Wxd 欧几里德距离 1 1 5-113 LAC Ws,#Slit4,Acc 装载 Acc 1 1 5-133 MAC Wm*Wn,Acc,Wx,Wxd,Wy, Wyd,AWB 相乘并累加 1 1 5-141 MAC Wm*Wm,Acc,Wx,Wxd,Wy,Wyd 平方并累加 1 1 5-143 MOVSAC Acc,Wx,Wxd,Wy,Wyd,AWB 将 Wx 中内容传送到 Wxd,并将 Wy 中内容传送到 Wyd 1 1 5-159 MPY Wm*Wn,Acc,Wx,Wxd,Wy,Wyd 将 Wn 与 Wm 相乘,并将结果存 入 Acc 1 1 5-161 MPY Wm*Wm,Acc,Wx,Wxd,Wy,Wyd 平方,并将结果存入 Acc 1 1 5-163 MPY.N Wm*Wn,Acc,Wx,Wxd,Wy,Wyd 将 Wn 与 -Wm 相乘 , 并将结果 存入 Acc 1 1 5-165 MSC Wm*Wn,Acc,Wx,Wxd,Wy, Wyd,AWB 将 Wn 与 Wm 相乘,并将结果从 Acc 中减去 1 1 5-167 NEG Acc 求反 Acc 1 1 5-183 SAC Acc,#Slit4,Wd 存储 Acc 内容 1 1 5-216 SAC.R Acc,#Slit4,Wd 存储舍入后的 Acc 1 1 5-218 SFTAC Acc,#Slit6 对 Acc 进行算术移位 Slit6 次 1 1 5-223 SFTAC Acc,Wn 对 Acc 进行算术移位 (Wn) 次 1 1 5-224 SUB Acc 累加器相减 1 1 5-235
MICROCHIP 第4章指令集详解 目录 本章主要包括以下内容: 4.1 数据寻址模式… .4-2 4.2 程序空间寻址模式 4-11 4.3 指令停顿… 4-12 4.4 字节操作。 4-13 4.5 字传送操作 4-16 4.6 使用10位立即数操作数 .4-19 4.8 条件转移指令 4-25 4.9 Z状态位 4-26 4.10规定的工作寄存器用法 4-27 4.11DSP数据格式 4-30 4.12累加器的使用. 4-32 4.13累加器访问.…」 4-33 4.14 DSP MAC类指令… 4-33 4.15DSP累加器类指令… 4-37 4.16使用FBCL指令换算数据… 4-37 4.17使用FBCL指令将累加器中内容归一化.4-39 4 2006 Microchip Technology Inc. 初稿 DS70157B_CN第4-1页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 4-1 页 指令集详解 4 第 4 章 指令集详解 目录 本章主要包括以下内容: 4.1 数据寻址模式 ................................................................................................................. 4-2 4.2 程序空间寻址模式 ........................................................................................................ 4-11 4.3 指令停顿....................................................................................................................... 4-12 4.4 字节操作....................................................................................................................... 4-13 4.5 字传送操作...................................................................................................................4-16 4.6 使用 10 位立即数操作数............................................................................................... 4-19 4.8 条件转移指令 ............................................................................................................... 4-25 4.9 Z 状态位....................................................................................................................... 4-26 4.10 规定的工作寄存器用法................................................................................................. 4-27 4.11 DSP 数据格式 .............................................................................................................. 4-30 4.12 累加器的使用 ............................................................................................................... 4-32 4.13 累加器访问...................................................................................................................4-33 4.14 DSP MAC 类指令........................................................................................................4-33 4.15 DSP 累加器类指令....................................................................................................... 4-37 4.16 使用 FBCL 指令换算数据 ............................................................................................. 4-37 4.17 使用 FBCL 指令将累加器中内容归一化........................................................................ 4-39
dsPIC30F/33F程序员参考手册 4.1 数据寻址棋式 dsPIC30F/33F对数据存储器的访问,除几种立即数寻址形式外,还支持三种固有寻址模式。通过 文件寄存器寻址、寄存器直接寻址或寄存器间接寻址模式实现对数据存储器的访问,而立即数寻 址使得指令可以使用固定值作为操作数。 通过文件寄存器寻址模式可实现对存放在数据存储空间低8K存储区(Near RAM)中的数据进 行操作,且可实现工作寄存器和整个64K数据空间之间的数据传送。寄存器直接寻址模式用来对 16个存储区映射的工作寄存器W0:W15进行访问。寄存器间接寻址模式通过使用工作寄存器中内 容作为有效地址,可对存储在整个64K数据存储空间中的数据进行高效操作。立即数寻址模式并 不直接访问数据存储区,但可使用常量值作为指令操作数。表4-1对所有模式的寻址范围进行了 汇总。 表4-1: dsP1C30F133F的寻址模式 寻址模式 寻址范围 文件寄存器寻址 0x0000-0x1FFF(见注) 寄存器直接寻址 0x0000-0x001F(工作寄存器阵列W0:W15) 寄存器间接寻址 0x0000-0xFFFF 立即数寻址 N/A(常量值) 注: 文件寄存器MOV的寻址范围是0x0000-0 xFFFE。 4.1.1 文件寄存器寻址 文件寄存器寻址模式由使用预先确定的数据地址作为操作数的指令使用。大多数支持文件寄存器 寻址模式的指令都可对数字存储空间的低8KB存储区进行访问,该存储区又称为Near RAM。然 而,MOV指令可使用文件寄存器寻址模式对所有64KB存储空间进行访问。这将允许把数据存储 区中任何地址单元中的数据装载到任一工作寄存器,以及将任一工作寄存器的内容存放到数据存 储区的任何地址单元中。应注意,文件寄存器寻址模式支持以字节和字两种方式对数据存储空间 进行访问,而M0V指令则是例外,它以字方式对所有64K存储空间进行访问。例4-1给出了文 件寄存器寻址的指令示例。 支持文件寄存器寻址的大多数指令以指定寄存器和默认工作寄存器WREG为操作对象(见第2.2.2 节“默认工作寄存器(WREG)”)。如果指令中只提供一个操作数,WREG将是一个隐含的操 作数,且操作结果将存回文件寄存器。此时,该指令实际上是一条读一修改一写指令。然而,当 指令中同时指定文件寄存器和WREG时,操作结果将存放在WREG中,而文件寄存器中的内容 将不发生改变。例42中给出了文件寄存器和WREG之间相互作用的指令示例。 注 如第3章“指令集概述”中的指令汇总表所示,支持文件寄存器寻址的指令使采用「 作为操作数。 DS70157BCN第4-2页 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 4-2 页 2006 Microchip Technology Inc. 4.1 数据寻址模式 dsPIC30F/33F 对数据存储器的访问,除几种立即数寻址形式外,还支持三种固有寻址模式。通过 文件寄存器寻址、寄存器直接寻址或寄存器间接寻址模式实现对数据存储器的访问,而立即数寻 址使得指令可以使用固定值作为操作数。 通过文件寄存器寻址模式可实现对存放在数据存储空间低 8K 存储区 (Near RAM)中的数据进 行操作,且可实现工作寄存器和整个 64K 数据空间之间的数据传送。寄存器直接寻址模式用来对 16个存储区映射的工作寄存器W0:W15进行访问。寄存器间接寻址模式通过使用工作寄存器中内 容作为有效地址,可对存储在整个 64K 数据存储空间中的数据进行高效操作。立即数寻址模式并 不直接访问数据存储区,但可使用常量值作为指令操作数。表 4-1 对所有模式的寻址范围进行了 汇总。 表 4-1: dsPIC30F/33F 的寻址模式 4.1.1 文件寄存器寻址 文件寄存器寻址模式由使用预先确定的数据地址作为操作数的指令使用。大多数支持文件寄存器 寻址模式的指令都可对数字存储空间的低 8KB 存储区进行访问,该存储区又称为 Near RAM。然 而,MOV 指令可使用文件寄存器寻址模式对所有 64KB 存储空间进行访问。这将允许把数据存储 区中任何地址单元中的数据装载到任一工作寄存器,以及将任一工作寄存器的内容存放到数据存 储区的任何地址单元中。应注意,文件寄存器寻址模式支持以字节和字两种方式对数据存储空间 进行访问,而 MOV 指令则是例外,它以字方式对所有 64K 存储空间进行访问。例 4-1 给出了文 件寄存器寻址的指令示例。 支持文件寄存器寻址的大多数指令以指定寄存器和默认工作寄存器WREG为操作对象(见第2.2.2 节 “默认工作寄存器 (WREG)”)。如果指令中只提供一个操作数,WREG 将是一个隐含的操 作数,且操作结果将存回文件寄存器。此时,该指令实际上是一条读-修改-写指令。然而,当 指令中同时指定文件寄存器和 WREG 时,操作结果将存放在 WREG 中,而文件寄存器中的内容 将不发生改变。例 4-2 中给出了文件寄存器和 WREG 之间相互作用的指令示例。 寻址模式 寻址范围 文件寄存器寻址 0x0000 - 0x1FFF (见注) 寄存器直接寻址 0x0000 - 0x001F (工作寄存器阵列 W0:W15) 寄存器间接寻址 0x0000 - 0xFFFF 立即数寻址 N/A (常量值) 注: 文件寄存器 MOV 的寻址范围是 0x0000 - 0xFFFE。 注: 如第 3 章 “指令集概述”中的指令汇总表所示,支持文件寄存器寻址的指令使采用 f 作为操作数
第4章指令集详解 例4-1: 文件寄存器寻址 DEC 0x1000 ;对存储于0x1000的数据进行递减 指令执行前: 数据存储区0x1000=0x5555 指令执行后: 数据存储区0x1000=0x5554 MOV 0x27FE,WO ;将存储于0x27EE的数据传送到W0 指令执行前: w0=0x5555 数据存储区0x27FE=0x1234 指令执行后: w0=0x1234 数据存储区0x27EE=0x1234 例4-2: 文件寄存器寻址和WREG AND 0x1000 ;将0x1000和wREG的内容相与,结果存入0x1000 指令执行前: W0 (WREG)=0x332C 数据存储区0x1000=0x5555 指令执行后: WO (WREG)=0x332C 数据存储区0x1000=0x1104 AND 0x1000,WREG ;将0x1000和wREG的内容相与,结果存入NREG 指令执行前: WO (WREG)=0x332C 数据存储区0x1000=0x5555 指令执行后: W0(WREG)=0x1104 数据存储区0x1000=0x5555 4 2006 Microchip Technology Inc. DS70157BCN第4-3页
2006 Microchip Technology Inc. DS70157B_CN 第 4-3 页 第 4 章 指令集详解 指令集详解 4 例 4-1: 文件寄存器寻址 例 4-2: 文件寄存器寻址和 WREG DEC 0x1000 ; 对存储于 0x1000 的数据进行递减 指令执行前: 数据存储区 0x1000 = 0x5555 指令执行后: 数据存储区 0x1000 = 0x5554 MOV 0x27FE, W0 ; 将存储于 0x27FE 的数据传送到 W0 指令执行前: W0 = 0x5555 数据存储区 0x27FE = 0x1234 指令执行后: W0 = 0x1234 数据存储区 0x27FE = 0x1234 AND 0x1000 ; 将 0x1000 和 WREG 的内容相与 , 结果存入 0x1000 指令执行前: W0 (WREG) = 0x332C 数据存储区 0x1000 = 0x5555 指令执行后: W0 (WREG) = 0x332C 数据存储区 0x1000 = 0x1104 AND 0x1000, WREG ; 将 0x1000 和 WREG 的内容相与 , 结果存入 WREG 指令执行前: W0 (WREG) = 0x332C 数据存储区 0x1000 = 0x5555 指令执行后: W0 (WREG) = 0x1104 数据存储区 0x1000 = 0x5555
dsPIC30F/33F程序员参考手册 4.1.2 寄存器直接寻址 采用寄存器直接寻址模式对16个工作寄存器(W0W15)的内容进行访问。寄存器直接寻址为 全正交模式,允许为使用寄存器直接寻址的指令指定任何工作寄存器,且支持字节和字访问方 式。采用寄存器直接寻址的指令使用指定工作寄存器中的内容作为数据来执行指令,因此只有当 数据已存入工作寄存器内时才可使用该寻址模式。例43中给出了使用寄存器直接寻址模式的指 令示例。 寄存器直接寻址的另一特点是它可提供动态流控制能力。由于DO和REPEAT指令的不同形式支 持寄存器直接寻址,因此可使用这些指令实现灵活的循环结构。 注: 对于那些必须使用寄存器直接寻址模式的指令,需要用到符号Wb、Wn、Ws和 Wd,详见第3章“指令集概述”的汇总表。通常,可使用寄存器间接寻址模式的 场合也可使用寄存器直接寻址。使用寄存器间接寻址的指令使用第3章“指令集概 述”汇总表中的符号Wd和Ws。 例4-3: 寄存器直接寻址 EXCH w2,N3 :将w2和W3中的内容进行交换 指令执行前: w2=0x3499 w3=0x003D 指令执行后: w2=0x003D w3=0x3499 IOR #0x44,N0 ;将0x44和w0的内容相或 指令执行前: WO =0x9C2E 指令执行后: WO =0x9C6E SL 6,W7,W8 :将6左移W7位,并将结果存入W8 指令执行前: W6=0x000C w7=0x0008 w8=0x1234 指令执行后: w6=0x000C w7=0x0008 w8=0x0C00 DS70157BCN第4-4页 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 4-4 页 2006 Microchip Technology Inc. 4.1.2 寄存器直接寻址 采用寄存器直接寻址模式对 16 个工作寄存器 (W0:W15)的内容进行访问。寄存器直接寻址为 全正交模式,允许为使用寄存器直接寻址的指令指定任何工作寄存器,且支持字节和字访问方 式。采用寄存器直接寻址的指令使用指定工作寄存器中的内容作为数据来执行指令,因此只有当 数据已存入工作寄存器内时才可使用该寻址模式。例 4-3 中给出了使用寄存器直接寻址模式的指 令示例。 寄存器直接寻址的另一特点是它可提供动态流控制能力。由于 DO 和 REPEAT 指令的不同形式支 持寄存器直接寻址,因此可使用这些指令实现灵活的循环结构。 例 4-3: 寄存器直接寻址 注: 对于那些必须使用寄存器直接寻址模式的指令,需要用到符号 Wb、 Wn、 Wns 和 Wnd,详见第 3 章 “指令集概述”的汇总表。通常,可使用寄存器间接寻址模式的 场合也可使用寄存器直接寻址。使用寄存器间接寻址的指令使用第 3 章 “指令集概 述”汇总表中的符号 Wd 和 Ws。 EXCH W2,W3 ; 将 W2 和 W3 中的内容进行交换 指令执行前: W2 = 0x3499 W3 = 0x003D 指令执行后: W2 = 0x003D W3 = 0x3499 IOR #0x44, W0 ; 将 0x44 和 W0 的内容相或 指令执行前: W0 = 0x9C2E 指令执行后: W0 = 0x9C6E SL W6, W7, W8 ; 将 W6 左移 W7 位,并将结果存入 W8 指令执行前: W6 = 0x000C W7 = 0x0008 W8 = 0x1234 指令执行后: W6 = 0x000C W7 = 0x0008 W8 = 0x0C00