dsPIC30F/33F程序员参考手册 注 DS70157B_CN第2-14页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 2-14 页 初稿 2006 Microchip Technology Inc. 注:
MICROCHIP 第3章指令集概述 目录 本章主要包括以下内容: 3.1 简介 3-2 3.2指令集概述, 3-2 3.3 指令集汇总表 3-3 3 2006 Microchip Technology Inc. 初稿 DS70157B_CN第3-1页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 3-1 页 指令集概述 3 第 3 章 指令集概述 目录 本章主要包括以下内容: 3.1 简介................................................................................................................................3-2 3.2 指令集概述.....................................................................................................................3-2 3.3 指令集汇总表 ................................................................................................................. 3-3
dsPIC30F/33F程序员参考手册 3.1 简介 dsPIC30F33F指令集提供了一整套支持传统单片机应用的指令,以及一类支持数学密集型应用 的指令。由于保留了几乎所有PICmicro MCU指令集的功能,该混合指令集使得已熟悉PICmicro 单片机的用户可以很容易地移植到dsPIC DSC器件. 3.2 指令集概述 dsP1C30F33F指令集包含84条指令,如表3-1所示可分为十个不同的功能组。表1-2对表3-2至 表311指令汇总表中使用的符号进行了定义。这些表对每一条指令的语法、说明、存储以及执行 要求进行了定义。存储要求以24位指令字的方式来表征,而执行要求以指令周期的方式来表征。 表3-1: dsP1C30F/33F指令组 功能组 汇总表 页码 传送指令 表3-2 3-3 数学指令 表3-3 34 逻辑指令 表3-4 3-5 循环/移位指令 表3-5 3-6 位操作指令 表3-6 3-7 比较/跳过指令 表3-7 3-8 程序流指令 表3-8 3-9 影子/堆栈指令 表3-9 3-10 控制指令 表3-10 3-10 DSP类指令 表3-11 3-10 多数指令具有多种不同的寻址模式以及执行流,这需要不同的指令形式。例如,共有6种不同的 ADD指令,而每一种指令形式都具有其自身的指令编码。第3章“指令集概述”提供了指令格式 的说明以及特定指令的操作。除此之外,第6章“参考信息”给出了一个以阿拉伯字母顺序排列 的指令集总表。 3.2.1 多周期指令 如指令汇总表所示,大多数指令的执行时间为一个指令周期,但存在以下例外: ·指令DO、MOV.D、POP.D、PUSH.D、TBLRDH、TBLRDL、TBLWTH和TBLWTL的执行时 间为2个指令周期。 ·指令DIV.S、DIV.U和DIVF为单周期指令,应该作为REPEAT指令的目标被连续执行18 次。 ·改变程序计数器的指令执行时间同样需要2个指令周期,但需要额外的一个指令周期来执行 NOP指令。对于SKIP指令,当跳过双字指令时需要3个指令周期来执行,其中2个周期执行 NOP指令。 ·RETFIE、RETLW和RETURN是改变程序计数器的特殊指令。这些指令的执行时间为3个指令 周期。如果有异常等待处理时,将执行2个周期。 注: 当指令使用程序空间可视性以访问数据空间的方式访问程序存储空间时将导致一个或两 个周期的延时。然而,当REPEAT循环的目标指令以访问数据空间的方式访问程序储空 间时,只有目标指令的第一次执行会发生延时。有关具体内容可参阅sP1C30F系列参 考手册》(DS70046D_CN)。 DS70157BCN第3-2页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 3-2 页 初稿 2006 Microchip Technology Inc. 3.1 简介 dsPIC30F/33F 指令集提供了一整套支持传统单片机应用的指令,以及一类支持数学密集型应用 的指令。由于保留了几乎所有 PICmicro MCU 指令集的功能,该混合指令集使得已熟悉 PICmicro 单片机的用户可以很容易地移植到 dsPIC DSC 器件。 3.2 指令集概述 dsPIC30F/33F指令集包含84条指令,如表 3-1所示可分为十个不同的功能组。表 1-2 对表 3-2至 表 3-11 指令汇总表中使用的符号进行了定义。这些表对每一条指令的语法、说明、存储以及执行 要求进行了定义。存储要求以 24 位指令字的方式来表征,而执行要求以指令周期的方式来表征。 表 3-1: dsPIC30F/33F 指令组 多数指令具有多种不同的寻址模式以及执行流,这需要不同的指令形式。例如,共有 6 种不同的 ADD 指令,而每一种指令形式都具有其自身的指令编码。第 3 章“指令集概述”提供了指令格式 的说明以及特定指令的操作。除此之外,第 6 章“参考信息”给出了一个以阿拉伯字母顺序排列 的指令集总表。 3.2.1 多周期指令 如指令汇总表所示,大多数指令的执行时间为一个指令周期,但存在以下例外: • 指令 DO、MOV.D、POP.D、PUSH.D、TBLRDH、TBLRDL、TBLWTH 和 TBLWTL 的执行时 间为 2 个指令周期。 • 指令 DIV.S、 DIV.U 和 DIVF 为单周期指令,应该作为 REPEAT 指令的目标被连续执行 18 次。 • 改变程序计数器的指令执行时间同样需要 2 个指令周期,但需要额外的一个指令周期来执行 NOP指令。对于SKIP指令,当跳过双字指令时需要3个指令周期来执行,其中 2个周期执行 NOP 指令。 • RETFIE、RETLW和RETURN是改变程序计数器的特殊指令。这些指令的执行时间为3个指令 周期。如果有异常等待处理时,将执行 2 个周期。 功能组 汇总表 页码 传送指令 表 3-2 3-3 数学指令 表 3-3 3-4 逻辑指令 表 3-4 3-5 循环 / 移位指令 表 3-5 3-6 位操作指令 表 3-6 3-7 比较 / 跳过指令 表 3-7 3-8 程序流指令 表 3-8 3-9 影子 / 堆栈指令 表 3-9 3-10 控制指令 表 3-10 3-10 DSP 类指令 表 3-11 3-10 注: 当指令使用程序空间可视性以访问数据空间的方式访问程序存储空间时将导致一个或两 个周期的延时。然而,当 REPEAT 循环的目标指令以访问数据空间的方式访问程序储空 间时,只有目标指令的第一次执行会发生延时。有关具体内容可参阅《dsPIC30F 系列参 考手册》(DS70046D_CN)
第3章指令集概述 3.2.2 多字指令 如表3-2:“传送指令”所定义,几乎所有的指令都占用一个指令字(24位),但表3-8中所列 的程序流指令CA工L、D0和G0TO例外。因为这些指令的操作码中包含较大的立即数操作数,因 此这些指令需要两个字的存储空间。 3.3 指令集汇总表 表3-2: 传送指令 汇编语法 说明 宇数圆期邀页码 EXCH Wns,Wnd 将Wns和Wnd中的内容进行交换 1 1 5-115 MOV f{,WREG见注) 将f中内容传送到目的寄存器 1 5-145 MOV WREG,f 将WREG中内容传送到f 1 1 5-146 MOV f,Wnd 将f中内容传送到nd 1 1 5-147 MOV Wns.f 将Wns中内容传送到f 1 1 5-148 MOV.B #lit8.Wnd 将8位立即数传送到Whd 1 1 5-149 MOV #lit16,Wnd 将16位立即数传送到Wnd 1 1 5-150 MOV [Ws+Slit101.Wnd 将Ws+有符号10位偏移量】中的内容 1 5-151 传送到Wnd MOV Wns,[Wd+Slit10] 将Wns中的内容传送到Wd+有符号10 5-152 位偏移量】 MOV Ws,Wd 将Ws中的内容传送到Wd 1 1 5-153 MOV.D Ws.Wnd 将Ws:Ws+1中的内容传送到 1 2 5-155 3 Wnd:Wnd+1 MOV.D Wns.Wd 将Vns:Wns+1中的内容传送到 2 5-157 Wd:Wd+1 SWAP Wn Wn=对Wn进行字节或半字节交换 5-249 TBLRDH Ws.Wd 将高程序字读入Wd 2 5-250 TBLRDL Ws.Wd 将低程序字读入Wd 2 5-252 TBLWTH Ws,Wd 将Ws中的内容写入高程序字 2 5-254 TBLWTL Ws,Wd 将Ws中的内容写入低程序字 1 2 5-256 注: 当指定了可选的操作码【WREG}时,指令的目的寄存器为WREG。当未指定{,WREG) 时,指令的目的寄存器为文件寄存器「。 2006 Microchip Technology Inc. 初稿 DS70157BCN第3-3页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 3-3 页 第 3 章 指令集概述 指令集概述 3 3.2.2 多字指令 如表 3-2:“传送指令”所定义,几乎所有的指令都占用一个指令字 (24 位),但表 3-8 中所列 的程序流指令 CALL、 DO 和 GOTO 例外。因为这些指令的操作码中包含较大的立即数操作数,因 此这些指令需要两个字的存储空间。 3.3 指令集汇总表 表 3-2: 传送指令 汇编语法 说明 字数 周期数 页码 EXCH Wns,Wnd 将 Wns 和 Wnd 中的内容进行交换 1 1 5-115 MOV f {,WREG}( 见注 ) 将 f 中内容传送到目的寄存器 1 1 5-145 MOV WREG,f 将 WREG 中内容传送到 f 1 1 5-146 MOV f,Wnd 将 f 中内容传送到 Wnd 1 1 5-147 MOV Wns,f 将 Wns 中内容传送到 f 1 1 5-148 MOV.B #lit8,Wnd 将 8 位立即数传送到 Wnd 1 1 5-149 MOV #lit16,Wnd 将 16 位立即数传送到 Wnd 1 1 5-150 MOV [Ws+Slit10],Wnd 将 [Ws + 有符号 10 位偏移量 ] 中的内容 传送到 Wnd 1 1 5-151 MOV Wns,[Wd+Slit10] 将 Wns 中的内容传送到 [Wd + 有符号 10 位偏移量 ] 1 1 5-152 MOV Ws,Wd 将 Ws 中的内容传送到 Wd 1 1 5-153 MOV.D Ws,Wnd 将 Ws:Ws+1 中的内容传送到 Wnd:Wnd+1 1 2 5-155 MOV.D Wns,Wd 将 Wns:Wns+1 中的内容传送到 Wd:Wd+1 1 2 5-157 SWAP Wn Wn = 对 Wn 进行字节或半字节交换 1 1 5-249 TBLRDH Ws,Wd 将高程序字读入 Wd 1 2 5-250 TBLRDL Ws,Wd 将低程序字读入 Wd 1 2 5-252 TBLWTH Ws,Wd 将 Ws 中的内容写入高程序字 1 2 5-254 TBLWTL Ws,Wd 将 Ws 中的内容写入低程序字 1 2 5-256 注: 当指定了可选的操作码 {,WREG} 时,指令的目的寄存器为 WREG。当未指定 {,WREG} 时,指令的目的寄存器为文件寄存器 f
dsPIC30F/33F程序员参考手册 表3-3: 数学指令 汇编语法 说明 字数周期数页码 ADD f(.WREG)(1) 目的寄存器=f+WREG 5-7 ADD #lit10,Wn Wn=lit10+Wn 1 5-10 ADD Wb.#lit5.Wd Wd Wb lit5 1 5-9 ADD Wb.Ws.Wd Wd =Wb+Ws 1 5-10 ADDC f(.WREG)(1) 目的寄存器=f+WREG+(C) 5-14 ADDC #lit10.Wn Wn lit10+Wn+(C) 1 7 5-15 ADDC Wb.#lit5.Wd Wd Wb lit5 +(C) 1 1 5-16 ADDC Wb.Ws.Wd Wd Wb Ws +(C) 1 1 5-17 DAW.B Wn Wn=十进制调整Wn 1 1 5-95 DEC f(.WREG)(1) 目的寄存器=f-1 、7 5-96 DEC Ws.Wd Wd=Ws-1 1 5-97 DEC2 f{,WREG而 目的寄存器=f-2 1 1 5-98 DEC2 Ws.Wd Wd=Ws-2 1 5-99 DIV.S Wm.Wn 有符号16/16位整数除法 18☑ 5-101 DIV.SD Wm.Wn 有符号32/16位整数除法 18②阿 5-101 DIV.U Wm,Wn 无符号16/16位整数除法 1 18② 5-103 DIV.UD Wm,Wn 无符号32/16位整数除法 1 18② 5-103 DIVF Wm.Wn 有符号16/16位小数除法 18② 5-105 INC f{.WREG而 目的寄存器=f+1 1 5-124 INC Ws.Wd Wd=Ws+1 、7 5-125 INC2 f{,WREG而 目的寄存器=f+2 1 1 5-126 INC2 Ws,Wd Wd =Ws+2 1 1 5-127 MUL W3:W2=f*WREG 1 5-169 MUL.SS Wb.Ws.Wnd (Wnd+1.Wnd)=sign(Wb)*sign(Ws) 7 5-170 MUL.SU Wb.#it5.Wnd (Wnd+1,Wnd)=sign(Wb)*unsign(lit5) 5-172 MUL.SU Wb.Ws.Wnd (Wnd+1,Wnd)=sign(Wb)*unsign(Ws) 1 5-174 MUL.US Wb.Ws.Wnd (Wnd+1,Wnd)=unsign(Wb)*sign(Ws) 1 5-176 MUL.UU Wb,#it5,Wnd (Wnd+1,Wnd}=unsign(Wb)*unsign(lit5) 5-178 MUL.UU Wb.Ws.Wnd (Wnd+1.Wnd)=unsign(Wb)*unsign(Ws) 7 5-179 SE Ws.Wnd Wnd=符号扩展Ws 5-220 SUB f{,WREG而 目的寄存器=f-WREG 1 1 5-230 SUB #lit10.Wn Wn=Wn-lit10 5-231 SUB Wb.#it5.Wd Wd Wb-lit5 5-232 SUB Wb.Ws.Wd Wd=Wb-Ws 7 5-233 SUBB f(.WREG)(1) 目的寄存器=f-WREG-(C) 1 5-236 SUBB #lit10.Wn Wn Wn -lit10-(C) 1 1 5-237 SUBB Wb.#lit5.Wd Wd Wb-lit5-(C) 1 5-238 SUBB Wb,Ws,Wd Wd Wb-Ws -(C) 1 5-239 SUBBR f(.WREG)(1) 目的寄存器=WREG-f-(C) 5-241 SUBBR Wb.#lit5.Wd Wd lit5-Wb-(C) 1 1 5-242 SUBBR Wb.Ws Wd Wd =Ws-Wb-(C) 1 1 5-243 SUBR f(.WREG)(1) 目的寄存器=WREG-f 7 5-245 SUBR Wb,判it5,Wd Wd lit5-Wb 5-246 SUBR Wb.Ws.Wd Wd=Ws-Wb 1 1 5-247 ZE Ws.Wnd Wnd=零扩展Ws 1 1 5-264 注 1:当指定可选的{,WREG}操作数时,指令的目的寄存器为WREG。当未指定{,WREG}时, 指令的目的寄存器是文件寄存器f。 2: 除法指令前必须加上一条REPEAT#17指令,这样除法指令才能连续执行18次。 DS70157BCN第3-4页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 3-4 页 初稿 2006 Microchip Technology Inc. 表 3-3: 数学指令 汇编语法 说明 字数 周期数 页码 ADD f {,WREG}(1) 目的寄存器 = f + WREG 1 1 5-7 ADD #lit10,Wn Wn = lit10 + Wn 1 1 5-10 ADD Wb,#lit5,Wd Wd = Wb + lit5 1 1 5-9 ADD Wb,Ws,Wd Wd = Wb + Ws 1 1 5-10 ADDC f {,WREG}(1) 目的寄存器 = f + WREG + (C) 1 1 5-14 ADDC #lit10,Wn Wn = lit10 + Wn + (C) 1 1 5-15 ADDC Wb,#lit5,Wd Wd = Wb + lit5 + (C) 1 1 5-16 ADDC Wb,Ws,Wd Wd = Wb + Ws + (C) 1 1 5-17 DAW.B Wn Wn = 十进制调整 Wn 1 1 5-95 DEC f {,WREG}(1) 目的寄存器 = f – 1 1 1 5-96 DEC Ws,Wd Wd = Ws – 1 1 1 5-97 DEC2 f {,WREG}(1) 目的寄存器 = f – 2 1 1 5-98 DEC2 Ws,Wd Wd = Ws – 2 1 1 5-99 DIV.S Wm, Wn 有符号 16/16 位整数除法 1 18(2) 5-101 DIV.SD Wm, Wn 有符号 32/16 位整数除法 1 18(2) 5-101 DIV.U Wm, Wn 无符号 16/16 位整数除法 1 18(2) 5-103 DIV.UD Wm, Wn 无符号 32/16 位整数除法 1 18(2) 5-103 DIVF Wm, Wn 有符号 16/16 位小数除法 1 18(2) 5-105 INC f {,WREG}(1) 目的寄存器 = f + 1 1 1 5-124 INC Ws,Wd Wd = Ws + 1 1 1 5-125 INC2 f {,WREG}(1) 目的寄存器 = f + 2 1 1 5-126 INC2 Ws,Wd Wd = Ws + 2 1 1 5-127 MUL f W3:W2 = f * WREG 1 1 5-169 MUL.SS Wb,Ws,Wnd {Wnd+1,Wnd} = sign(Wb) * sign(Ws) 1 1 5-170 MUL.SU Wb,#lit5,Wnd {Wnd+1,Wnd} = sign(Wb) * unsign(lit5) 1 1 5-172 MUL.SU Wb,Ws,Wnd {Wnd+1,Wnd} = sign(Wb) * unsign(Ws) 1 1 5-174 MUL.US Wb,Ws,Wnd {Wnd+1,Wnd} = unsign(Wb) * sign(Ws) 1 1 5-176 MUL.UU Wb,#lit5,Wnd {Wnd+1,Wnd} = unsign(Wb) * unsign(lit5) 1 1 5-178 MUL.UU Wb,Ws,Wnd {Wnd+1,Wnd} = unsign(Wb) * unsign(Ws) 1 1 5-179 SE Ws,Wnd Wnd = 符号扩展 Ws 1 1 5-220 SUB f {,WREG}(1) 目的寄存器 = f - WREG 1 1 5-230 SUB #lit10,Wn Wn = Wn – lit10 1 1 5-231 SUB Wb,#lit5,Wd Wd = Wb – lit5 1 1 5-232 SUB Wb,Ws,Wd Wd = Wb – Ws 1 1 5-233 SUBB f {,WREG}(1) 目的寄存器 = f – WREG – (C) 1 1 5-236 SUBB #lit10,Wn Wn = Wn – lit10 – (C) 1 1 5-237 SUBB Wb,#lit5,Wd Wd = Wb – lit5 – (C) 1 1 5-238 SUBB Wb,Ws,Wd Wd = Wb – Ws – (C) 1 1 5-239 SUBBR f {,WREG}(1) 目的寄存器 = WREG – f – (C) 1 1 5-241 SUBBR Wb,#lit5,Wd Wd = lit5 – Wb – (C) 1 1 5-242 SUBBR Wb,Ws,Wd Wd = Ws – Wb – (C) 1 1 5-243 SUBR f {,WREG}(1) 目的寄存器 = WREG – f 1 1 5-245 SUBR Wb,#lit5,Wd Wd = lit5 – Wb 1 1 5-246 SUBR Wb,Ws,Wd Wd = Ws – Wb 1 1 5-247 ZE Ws,Wnd Wnd = 零扩展 Ws 1 1 5-264 注 1:当指定可选的 {,WREG} 操作数时,指令的目的寄存器为 WREG。当未指定 {,WREG} 时, 指令的目的寄存器是文件寄存器 f。 2:除法指令前必须加上一条 REPEAT #17 指令,这样除法指令才能连续执行 18 次