首页 “DSP控制器及其应用”第四章指令系统

“DSP控制器及其应用”第四章指令系统

举报
开通vip

“DSP控制器及其应用”第四章指令系统nullnullTMS320X240x 的指令系统 DSP 控制器及其应用 Digital Signal Processor自动化及电气工程专业选修课第四章 TMS320X240x 指令系统 第四章 TMS320X240x 指令系统 引 言引 言 DSP 控制器的硬件有着独特的优点:采用多组总线结构实现并行机制,极大地加快了处理的速度;独特的乘法器、输入与输出移位器、辅助寄存器算术单元以及微堆栈等硬件模块为实现丰富的寻址方式,构成强大的指令系统提供了物质基础。TMS32...

“DSP控制器及其应用”第四章指令系统
nullnullTMS320X240x 的指令系统 DSP 控制器及其应用 Digital Signal Processor自动化及电气工程专业选修课第四章 TMS320X240x 指令系统 第四章 TMS320X240x 指令系统 引 言引 言 DSP 控制器的硬件有着独特的优点:采用多组总线结构实现并行机制,极大地加快了处理的速度;独特的乘法器、输入与输出移位器、辅助寄存器算术单元以及微堆栈等硬件模块为实现丰富的寻址方式,构成强大的指令系统提供了物质基础。TMS320X240x 的寻址方式TMS320X240x 的寻址方式 在介绍指令系统以前,首席介绍 DSP 控制器的寻址方式。 无论单片机还是 DSP 控制器,其基本任务都是:从某个地方取数,然后运算,再将运算结果放到某个地方。因此,在指令中如何表达数据的地址就是指令系统的核心。 DSP 240x 控制器的寻址方式分为三种:立即寻址、直接寻址和间接寻址。 立即寻址:即需要寻找的数据就包含在指令中; 直接寻址:即指令给出了需要寻找的数据的地址; 间接寻址:即指令给出的既不是立即数也不是直接地址,而是 需要寻找的数据地址的地址。立 即 寻 址(1)立 即 寻 址(1) 在 DSP 控制器中立即寻址方式分为两种: 短立即寻址 长立即寻址 短立即寻址的指令把一个 8、9 或 13 位的常数作为操作数。这种寻址方式的指令是单字指令,立即数包含在指令中,而且在立即数前加 # 以示与直接地址的区别。例:采用短立即寻址的 RPT 指令,需要重复执行的次数直接跟在 指令操作码后。 RPT #99 ;将紧跟该指令后的那条指令执行 100 次。 立 即 寻 址(2)立 即 寻 址(2) 长立即寻址的指令把一个 16 位的常数作为操作数,这时为双字指令,第二个字即为该操作常数。这个 16 位的数值可以是个绝对值常数,也可以是一个二进制补码值。例:采用长立即寻址的 ADD 指令。 ADD #16384,2 ;将数值16384左移2位后与累加 器内容相加,结果在累加器中。直 接 寻 址(1)直 接 寻 址(1) 直接寻址可以访问 64K 字数据存储器。在DSP 控制器中,数据存储器按页进行管理,整个 64K 字数据存储器分为 512 个数据页,每个数据页含有 128 个字。 在访问数据存储器时,首先确定当前数据页(通过LDP等指令),它由状态寄存器ST0中的九位数据页面指针(DP)值确定,如 DP 值为000000010b,即当前数据页为 2。确定当前数据页后,该数据页 128 个字中的哪个字则由指令寄存器的低 7 位偏移量指定。 DSP 控制器的直接寻址指令中的直接地址就是该低 7 位偏移量。中央处理单元将当前 DP 值与偏移量拼接,就变成 16 位的存储器地址。直 接 寻 址(2)直 接 寻 址(2) 8 MSB:位 15 至位 8 指出指令类型(例如ADD), 并包含该指令所访问的数据值的移位信息。 0 :直接/间接寻址指示符,0为直接寻址。 7 LSB :位 6 至位 0给出该指令所访问的数据寄存器地 址的偏移量。 直 接 寻 址(3)直 接 寻 址(3) 使用直接寻址方式时,应特别注意当前数据页。一方面,DP 值在复位时并没有初始化,所以在程序之前应注意初始化 DP;二方面,若有一程序段中的所有指令都访问同一个数据页,只需在该程序段前装载 DP 一次;三方面,若在程序中需访问不同的数据页,则每当访问新的数据页前,都需修改 DP 值,以确保使用正确的数据页。 设置数据页可利用 LDP 指令或任何能将数值加载到状态寄存器 ST0 的指令。LDP 指令直接加载 DP ,不影响 ST0 的其它位。 设置偏移量,只需在指令的操作数的位置上写上该 7 位偏移量即可(数值前不能加 # )。直 接 寻 址(4)直 接 寻 址(4)例:采用直接寻址的ADD指令,将数据存储器地址 0209H 中的内容左移 5 位后与累加器的内容相加。 数据存储器地址0209H的页面地址是4H,偏移量是9H,因此采用如下指令即可完成任务。 LDP #4 ;将数据页面设置为 4。 ADD 9H,5 ;将数据存储器地址0209H中 的内容左移 5 位后与累加器的 内容相加。直 接 寻 址(5)直 接 寻 址(5)0000 0010 0000 100116 位数据存储器地址 0209H间 接 寻 址(1)间 接 寻 址(1) 间接寻址的能力在很大程度上反映了指令系统的灵活性和方便性。DSP控制器内含8个辅助寄存器(AR0-AR7)和辅助寄存器算术单元(ARAU),专用于间接寻址的操作,不但提供了灵活而强大的间接寻址能力,而且使得间接寻址的速度非常快。 DSP 控制器用 16 位辅助寄存器的内容作为间接的地址,因此 DSP 控制器的间接寻址可以访问 64K 数据存储器空间的任一单元,不受当前数据页的限制。 8 个辅助寄存器(AR0-AR7)都可以参与间接寻址,但是每次寻址只能使用其中的一个,它由状态寄存器 ST0 中的 3 位辅助寄存器指针(ARP)来指定。ARP 指定的辅助寄存器称为当前辅助寄存器或当前 AR。 由于在 DSP 控制器中设置了辅助寄存器算术单元(ARAU),因此在进行间接寻址操作的同时可以对辅助寄存器的内容进行运算,甚至修改ARP值,为下次间接寻址作准备,极大地提高间接寻址的速度。间 接 寻 址(2)间 接 寻 址(2)对辅助寄存器的内容进行运算有四种选择: 不增不减:指令使用当前辅助寄存器的内容作为数据存储器地址,同 时不增加也不减少当前辅助寄存器的内容。 增 1 或减 1:指令使用当前辅助寄存器的内容作为数据存储器地址, 指令执行后将当前辅助寄存器的内容增 1 或减 1。 增或减一个变址量:将 AR0 中的值作为变址量。指令使用当前辅助 寄存器的内容作为数据存储器地址,指令执行后将当前辅助寄存器的 内容增加或减去这个变址量。 按反向进位方式增或减一个变址量:将 AR0 中的值作为变址量。指 令使用当前辅助寄存器的内容作为数据存储器地址,指令执行后将当 前辅助寄存器的内容按反向进位方式增加或减去这个变址量。反向进 位方式的加或减是从最高位开始运算,有进位(或借位)给低位。 上述四种运算均由 ARAU 在流水线中指令译码的同一周期内完成!间 接 寻 址(3)间 接 寻 址(3)8 MSB:位 15 至位 8 指出指令类型及与数据移位有关的信息。 1 :直接/间接指示。为 1 时定义间接寻址方式。 ARU : 辅助寄存器更新代码。确定是否对辅助寄存器进行更新以及将 其增加还是减少。(见表4-2) N :下一辅助寄存器指示。指明该指令是否改变 ARP 之值。 N = 0 则 ARP 的内容保持不变 N = 1 则(NAR) ARP,而(ARP) ARB。 NAR :下一辅助寄存器。指出下一辅助寄存器(共有 8 个可选)。间 接 寻 址(4)间 接 寻 址(4) TMS320C240x 中八个辅助寄存器(AR0-AR7) 提供了灵活而强大的间接寻址能力,使用时,包括: 1、设置辅助寄存器指针(ARP); 2、指明间接寻址选项(*,*± , *0±,*BR0±); 3、指明下一个辅助寄存器(可选)。 例如: MAR *,AR1 ADD *+,AR4 句法格式及分类(1)句法格式及分类(1)汇编句法格式: DSP 指令的汇编句法格式如下:操作码 [ 操作数 ] ;[ 注释 ]操作码——由可描述指令特征的助记符表示, 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 了指令的操作功能。 操作数——在操作数中定义了该句法表达式中所用的变量及寻址方式。 注释 ——为便于阅读,对指令作的说明。例如,加法指令的句法有:ADD dma [,shift ] 直接寻址 ADD dma ,16 左移 16 位直接寻址 ADD ind [,shift[,ARn]] 间接寻址 ADD ind ,16 [,ARn] 左移 16 位间接寻址 ADD # k 短立即寻址 ADD # lk [,shift] 长立即寻址句法格式及分类(2)句法格式及分类(2)指令的分类:DSP 控制器的指令集共有 86 条,可分为四大类: 数据传送类指令:共 30 条 算术运算类指令:共 22 条 逻辑运算类指令:共 13 条 分支转移类指令:共 21 条第四章 TMS320X240 的指令系统 第四章 TMS320X240 的指令系统 数据传送类指令(1)数据传送类指令(1) 数据传送类指令一共有 30 条,既可以将数据传送到累加器,也可将数据传送到寄存器;有数据存储器间的传送指令,也有程序存储器和数据存储器间的传送指令;还有对 I/O 单元的数据输入输出指令。有的数据传送指令不仅仅传送数据,还有移位及累加功能。数据传送类指令(2)数据传送类指令(2) BLDD #lk,dma ;源地址为长立即数,直接寻址 BLDD #LK,ind[,Arn] ;源地址为长立即数,间接寻址 BLDD dma,#lk ;目的地址为长立即数,直接寻址 BLDD ind,#lk[,ARn] ;目的地址为长立即数,间接寻址数据存储器至数据存储器之间的块传送:(1) 该指令将数据存储器中的一块源数据字连续地复制到指定的目的数据存储单元中。指令中的长立即数 #lk 是源(目的)的首地址!,而块的长度放在重复计数器 RPTC 中(由 RPT 指令设置)。 该指令执行前,会将 PC 加 1 并保存到微堆栈,让出 PC 装源(目的)地址;随后将源数据复制到目的地址规定的单元中,并且 PC 自动加1,RPTC 自动减 1;前面这一步的操作持续到 RPTC=0 为止;当RPTC=0 时,保存在微堆栈的 PC 值会自动弹回到 PC 中,使得下一条指令能正常运行。 对于第一条指令,是将一个(串)数据存放到一个固定地址上;对于第三条指令是将一个固定地址的数据存放到一个(串)目的地址的单元中。 对于间接寻址,按规定修改当前 AR 和 ARP。故可实现将一串数据 放到一串目的地址中。 对于专用寄存器(存储器映射的寄存器)之间数据传送不能用此命令。 当进入到重复运行时,即启动了RPT流水线,该指令成为单周期指令。 该指令不影响任何状态位。数据传送类指令(2)数据传送类指令(2)例1:BLDD #300h,20h ;此时设 DP=6数据存储器至数据存储器之间的块传送:(2)例2:BLDD *+,#321h,AR3 ;0h01h01h数据传送类指令(3)数据传送类指令(3)程序存储器至数据存储器之间的块传送:(1) BLPD #pma,dma ;源地址为长立即数,直接寻址 BLPD #pma,ind[,Arn] ;源地址为长立即数,间接寻址 该指令将程序存储器中的一块源数据字连续地复制到指定的目的数据 存储单元中。指令中的长立即数 #pma 是源(目的)的首地址!, 而块的长度放在重复计数器 RPTC 中(由 RPT 指令设置)。 该指令执行前,会将 PC 加 1 并保存到微堆栈,让出 PC 装源首地址;随后将源数据复制到目的地址规定的单元中,并且 PC 自动加1,RPTC 自动减 1;前面这一步的操作持续到 RPTC=0 为止;当RPTC=0 时,保存在微堆栈的 PC 值会自动弹回到 PC 中,使得下一条指令能正常运行。 对于间接寻址,按规定修改当前 AR 和 ARP。故可实现将一串程序 存储器的数据存放到一串数据存储器的目的地址单元中。 对于直接寻址,是将一串数据放到一个固定的数据存储器地址上。 当进入到重复运行时,即启动了RPT流水线,该指令成为单周期指令。 该指令不影响任何状态位。数据传送类指令(3)数据传送类指令(3)程序存储器至数据存储器之间的块传送:(2)例1:BLPD #800h,00h ;此时设 DP=6例2:BLPD #800h,*,AR7 ;0Fh1111h1111h数据传送类指令(4)数据传送类指令(4)片内数据存储器中的数据传送:(1) DMOV dma ;直接寻址 DMOV ind[,Arn] ;间接寻址 该指令把指定的数据存储器内容复制到该地址加 1 的地址中,原单元 的内容保持不变。 该指令只工作于片内数据 RAM 块。若某块 RAM 被配置为数据存储 器,则该指令就可在该数据块内工作。另外,数据传送功能可连续通 过块间的边界。 该指令不能用于外部数据存储器。 该指令对于 DSP 中的Z –1 延迟很有效。当然也可由其它指令来实现。 该指令受 CNF 状态位影响。数据传送类指令(4)数据传送类指令(4)片内数据存储器中的数据传送:(2)例1:DMOV DAT8 ;此时设 DP=6例2:DMOV *,AR1 ;43h40h40h数据传送类指令(5)数据传送类指令(5)从端口输入数据:(1) IN dma,PA ;直接寻址 IN ind,PA[,ARn] ;间接寻址 该指令从 I/O 单元读入 16 位值到指定的数据存储单元。引脚 IS 变为低电平,表示访问 I/O 口。控制引脚 STRB、W/R 和 READY 的时序与读外部数据存储器一样。 重复指令 RPT 同 IN 指令一起使用时,可从 I/O 空间连续读入多 个字至数据空间。 该指令不受任何状态位影响。数据传送类指令(5)数据传送类指令(5)从端口输入数据:(2)例1:IN 7,1000h ;设 DP = 6 从口地址为 1000h 的外设读数据,并将数据存放在数据存储 器单元 307h 中。例2:IN *,5h ; 从口地址为 5h 的外设读数据,并将数据存放在当前辅助寄存 器所指定的数据存储器单元中。数据传送类指令(6)数据传送类指令(6)左移后装入累加器:(1) LACC dma [,shift] ;直接寻址 LACC dma,16 ;直接寻址并左移 16 位 LACC ind[,shift[,ARn]] ;间接寻址 LACC ind,16[,ARn] ;间接寻址并左移 16 位 LACC #lk[, shift] ;长立即寻址 第一条到第四条指令将指定的数据存储器地址的内容左移后送入累加器。 第五条指令中的 #lk 是一个 16 位长的数据,不是地址。该指令将数据左移 后送入累加器。 移位时,低位填零;高位受状态位 SXM 的影响。若 SXM=1 则进行符号扩 展;若 SXM=0 则不进行符号扩展,填零即可。数据传送类指令(6)数据传送类指令(6)左移后装入累加器:(2)例1:LACC 6,4 ;设 DP = 8,SXM = 0例2:LACC *,4 ;设 SXM = 010h0FFh0FF0h数据传送类指令(7)数据传送类指令(7)装载累加器低位并清累加器高位:(1) LACL dma ;直接寻址 LACL ind[,ARn] ;间接寻址 LACL #k ;短立即寻址 第一条和第二条指令将被寻址数据存储器单元的内容装入累加器的低 16 位, 累加器的高位填零。 第三条指令将 8 位短立即数 #k 扩展为 16 位(高位补0)并装入累加器的 低 16 位,累加器的高位填零。 无论 SXM 为何状态,该指令都不进行符号扩展。数据传送类指令(7)数据传送类指令(7)装载累加器低位并清累加器高位:(2)例1:LACL 1 ;设 DP = 6例2:LACL * -,AR4 ;0h0FFh0FFh数据传送类指令(8)数据传送类指令(8)按 TREG 规定的左移后装入累加器低位:(1) LACT dma ;直接寻址 LACT ind[,ARn] ;间接寻址 该指令将数据存储器单元中的值左移后装入累加器。左移位数由寄存 器 TREG 最低 4 位决定,可左移 0 ~ 15 位。 该指令受状态位 SXM 的影响。移位时,若 SXM = 1,则累加器高 位进行符号扩展;若SXM = 1,则高位填零。数据传送类指令(8)数据传送类指令(8)按 TREG 规定的左移后装入累加器低位:(2)例1:LACT 1 ;设 DP = 6, TREG = 14h例2:LACT * -,AR3 ;设 SXM = 1, TREG = 11h13760h0FF00h0FFFFFE00h数据传送类指令(9)数据传送类指令(9)装载辅助寄存器:(1) LAR ARx,dma ;直接寻址 LAR ARx, ind[,ARn] ;间接寻址 LAR ARx,#k ;短立即数 LAR ARx,#lk ;长立即数 第1、2条指令将指定的数据存储器单元中的内容装入指定的辅助寄存 器地址( ARx )。 第3、4条指令将8/16位常量装入指定的辅助寄存器地址。无论 SXM为何值,该常量均作为无符号正数处理。 该指令可在子程序调用或中断处理时用来装载辅助寄存器。数据传送类指令(9)数据传送类指令(9)装载辅助寄存器:(2)例1:LAR AR0,16 ;设 DP = 6例2:LAR AR4,* -, ;指定的 AR 与 ARP 相同则不减18h32h32h数据传送类指令(10)数据传送类指令(10)装载数据页指针:(1) LDP dma ;直接寻址 LDP ind[,ARn] ;间接寻址 LDP #k ;短立即数 第1、2条指令将指定的数据存储器单元中的低 9 位装入状态寄存器 ST0 的数据存储页指针(DP)。 第3条指令将9位立即数装入状态寄存器的数据存储页指针(DP)。 DP 也可由 LST 指令装入。 在直接寻址中,DP 提供 9 位页面地址(位于高端),指令中指定的 7 位数为偏移地址(位于低端),以形成 16 位数据存储器地址。数据传送类指令(10)数据传送类指令(10)装载数据页指针:(2)例1:LDP 127 ;设 DP = 511(1FFh)例2:LDP * , AR5 ;0DCh06h06h数据传送类指令(11)数据传送类指令(11)装载乘积寄存器高位:(1) LPH dma ;直接寻址 LPH ind[,ARn] ;间接寻址 这两条指令将指定的数据存储器地址的内容装入P寄存器的高 16 位。 P寄存器的低位不受影响。 该指令对于中断和子程序调用后恢复P寄存器的高位内容特别有用。数据传送类指令(11)数据传送类指令(11)装载乘积寄存器高位:(2)例1:LPH DAT0 ;设 DP = 4例2:LPH * , AR6 ;0F79C9834h0F79Ch0F79C9834h数据传送类指令(12)数据传送类指令(12)装载状态寄存器:(1) LST #m,dma ;直接寻址 LST #m,ind[,ARn] ;间接寻址 该指令是向状态寄存器 ST0 或 ST1 装载指定数据存储器的内容。若 m=0,选择 ST0;若m=1,选择 ST1。 该指令对 ST0 中的 INTM 位无用(该位有特定指令对其操作)。 虽然指令 LST #0 向 ARP 装入新值,但不影响 ST1 中的 ARB。 在间接寻址方式下用操作数来指定下一AR值时,该值是不起作用的。 在 LST #1 操作中,送入 ARB 的值也被送入 ARP。 状态寄存器中的保留位读出总为1,这些位对写入不起作用。 该指令用于子程序调用和中断后恢复状态寄存器。数据传送类指令(12)数据传送类指令(12)装载状态寄存器:(2)例1:LST #0, 60h ;设 DP = 0例2:LST #0,* -, AR1 ;2604h0EE04h0EE04h数据传送类指令(13)数据传送类指令(13)装载 T 寄存器:(1) LT dma ;直接寻址 LT ind[,ARn] ;间接寻址 这两条指令将指定的数据存储器的内容装入 TREG 寄存器,为乘法 运算作准备。 该指令不影响任何状态位。 与乘法相关的指令还可参见 LTA、LTD、LTP、LTS、MPY、 MPYA、MPYS 和 MPYU 指令。数据传送类指令(13)数据传送类指令(13)装载 T 寄存器:(2)例1:LT 24 ;设 DP = 8例2:LT * , AR3 ;62h62h62h数据传送类指令(14)数据传送类指令(14)装载 T 寄存器并累加前次乘积:(1) LTA dma ;直接寻址 LTA ind[,ARn] ;间接寻址 这两条指令将指定的数据存储器的内容装入 TREG 寄存器。同时, 乘积寄存器的内容按 PM 状态位所定义的值移位后与累加器的内容相 加,结果保留在累加器中。 若结果产生进位,则进位位被置位(C=1);否则进位位被清零。 LTD 指令的功能包括了 LTA 指令的功能。 受 PM 和 OVM 的影响,并影响 C 和 OV 状态位。数据传送类指令(14)数据传送类指令(14)装载 T 寄存器并累加前次乘积:(2)例1:LTA 36 ;设 DP = 6,PREG = 0Fh,ACC = 5h例2:LTA * , AR5 ;设 PM = 062h62h62h数据传送类指令(15)数据传送类指令(15)装载 T 寄存器,累加前次乘积并移动数据:(1) LTD dma ;直接寻址 LTD ind[,ARn] ;间接寻址 该指令要完成三个动作。首先将指定的存储器地址的内容装入 TREG 寄存器。 然后,PREG 的内容按 PM 状态位所规定的值移位后加到累加器中。同时, 指定的数据存储器地址的内容被复制到地址加 1 的数据存储器中。 该指令适用于所有被配置为数据存储器的片内 RAM 块。数据传送功能可通过 连续存储块的边界,但不能用于外部数据存储器和存储器映像寄存器。 若 LTD 被用于外部数据存储器,则功能与 LTA 相同,即前次结果被累加, TREG 寄存器从外部数据存储器装入数,但不会发生数据移动。 该指令受 PM 和 OVM 的影响,并影响 C 和 OV 状态位。数据传送类指令(15)数据传送类指令(15)装载 T 寄存器,累加前次乘积并移动数据:(2)例1:LTD 126 ;设 PM = 0,DP = 762h62h0Fh数据传送类指令(15)数据传送类指令(15)装载 T 寄存器,累加前次乘积并移动数据:(3)例2:LTD *,AR3 ;设 PM = 062h62h3FEh62h0Fh数据传送类指令(16)数据传送类指令(16)装载 T 寄存器并将 P 寄存器存至累加器:(1) LTP dma ;直接寻址 LTP ind[,ARn] ;间接寻址 该指令先将被寻址数据存储器单元的内容装入 TREG 寄存 器。 再将移位后的 PREG 寄存器的值存入累加器。 移位受 PM 状态位的控制。数据传送类指令(16)数据传送类指令(16)装载 T 寄存器并将 P 寄存器存至累加器:(2)例1:LTP 36 ;设 PM = 0,DP = 6数据传送类指令(16)数据传送类指令(16)装载 T 寄存器并将 P 寄存器存至累加器:(3)例2:LTP *,AR5 ;设 PM = 0数据传送类指令(17)数据传送类指令(17)装载 T 寄存器并减去前次乘积:(1) LTS dma ;直接寻址 LTS ind[,ARn] ;间接寻址 该指令先将被寻址数据存储器单元的内容装入 TREG 寄存 器,同时 PREG 的内容按 PM 所规定的值进行移位,然 后从累加器的内容中减去 PREG 移位后的值,结果保存在 累加器中。 若减的结果产生借位,则进位位被清零(C=0);否则进 位位被置位(C=1) 。数据传送类指令(17)数据传送类指令(17)装载 T 寄存器并减去前次乘积:(2)例1:LTS DAT36 ;设 PM = 0,DP = 6数据传送类指令(17)数据传送类指令(17)装载 T 寄存器并减去前次乘积:(3)例2:LTS *,AR2 ;设 PM = 0数据传送类指令(18)数据传送类指令(18)修改辅助寄存器:(1) MAR dma ;直接寻址 MAR ind[,ARn] ;间接寻址 在直接寻址方式下,该指令为空操作,不影响任何状态位。对所指向的 存储器不起作用。 在间接寻址方式下,执行该指令可以修改辅助寄存器和 ARP 的值,当 该指令修改 ARP 的值时,ARP 原有之值被复制到 ARB 中。 任何 MAR 所能实现的间接寻址操作,用其它任何支持间接寻址的指令 也能实现。 ARP 也可由 LST 指令装入。 其它与辅助寄存器操作有关的指令如 LAR 和 SAR 等。数据传送类指令(18)数据传送类指令(18)例1:MAR *,AR1 ;ARP 装入 1例2:MAR * +, AR5 ;当前AR 增 1,并送 5 入 ARP修改辅助寄存器:(2)数据传送类指令(19)数据传送类指令(19)从端口输出数据:(1) OUT dma,PA ;直接寻址 OUT ind,PA[,ARn] ;间接寻址 该指令将数据存储器单元的 16 位数值写到指定的 I/O 单元。 引脚 IS 变低,用以指示访问 I/O 空间。 STRB、R/W 和 READY 的时序与写外部数据存储器的时序相同。 RPT 指令可以同 OUT 指令一起使用,用来将连续多个字从数据存储 器写到 I/O 空间。 该指令不影响状态位。数据传送类指令(19)数据传送类指令(19)例1:OUT DAT0,100h ;设 DP = 4例2:OUT * , 100h ;从端口输出数据:(2) 该指令将数据存储器单元 200h 处的数据写到口地址为 100h 的外设上。 该指令将当前辅助寄存器所指的数据存储器单元中的数据写到口地址为 100h 的外设上。数据传送类指令(20)数据传送类指令(20)将乘积寄存器装入累加器: PAC 该指令将 PREG 乘积寄存器中的内容按 PM 状态位所规定的值移位后,送入累加器。例:PAC ;PM = 0数据传送类指令(21)数据传送类指令(21)栈顶弹出至累加器低位:(1) POP 该指令执行后,栈顶(TOS)内容复制到累加器低位中,栈中各值均 上弹一级,累加器高位填零。 硬件堆栈有 8 个先进后出的单元。每发生一次弹出时,每个堆栈中的 值均被复制到上一级栈单元,栈顶内容被移出。栈底的最后两个字具有 相同的值。如果在任何入栈前有 7 次出栈,则栈中各级含有相同的值。 没有提供对堆栈下溢的检查。 该指令不影响状态位。数据传送类指令(21)数据传送类指令(21)栈顶弹出至累加器低位:(2)例:POP ;数据传送类指令(22)数据传送类指令(22)栈顶弹出至数据存储器:(1) POPD dma ;直接寻址 POPD ind[,ARn] ;间接寻址 该指令将栈顶(TOS)的数值传送到指令规定的数据存储 器单元。堆栈弹出一级,栈顶以下的七级堆栈单元也依次 上弹一级。 堆栈的其它操作与 POP 指令相同。数据传送类指令(22)数据传送类指令(22)栈顶弹出至数据存储器:(2)例:POPD DAT10 ;DP = 8数据传送类指令(23)数据传送类指令(23)数据存储器值进栈:(1) PSHD dma ;直接寻址 PSHD ind[,ARn] ;间接寻址 该指令将指令规定的数据存储器单元的内容送入栈顶 (TOS)。堆栈中低 7 个单元的值都下推一级,栈低单元 的内容将丢失。 该指令不影响状态位。数据传送类指令(23)数据传送类指令(23)数据存储器值进栈:(2)例:PSHD 127 ;DP = 3数据传送类指令(24)数据传送类指令(24)累加器低位值进栈:(1) PUSH 该指令执行后堆栈内容下推一级,累加器低位字复制到硬 件堆栈的顶部。 硬件堆栈是一个 8 单元的先进后出堆栈。如果在一次弹出 前,发生 8 次入栈,则第一个写入栈中的数值将由于连续 入栈而丢失。数据传送类指令(24)数据传送类指令(24)累加器低位值进栈:(2)例:PUSH数据传送类指令(25)数据传送类指令(25)存储辅助寄存器:(1) SAR ARx,dma ;直接寻址 SAR ARx,ind[, ARn] ;间接寻址 该指令将指定的辅助寄存器内容存入被寻址数据存储器单 元中。 在间接寻址方式中,该指令同时也要对当前辅助寄存器内 容进行修改,但在修改前会先把辅助寄存器值存入数据存 储器。数据传送类指令(25)数据传送类指令(25)存储辅助寄存器:(2)例1:SAR AR0,DAT30 ;DP = 6例2:SAR AR0,* + ;数据传送类指令(26)数据传送类指令(26)存储 PREG 寄存器高位:(1) SPH dma ;直接寻址 SPH ind[, ARn] ;间接寻址 该指令将 PREG 寄存器内容按 PM 位所规定的方式移位后,数值的高 16 位存入被寻址数据存储器单元中。 执行时先将 32 位 PREG 复制到乘积移位器中,然后在此按 PM 位所 规定的值进行移位。若是右移 6 位方式,则高位进行符号扩展,低位 丢失;若是左移方式,则高位丢失,低位填零;若 PM=00,则移位 不发生。移位后数值的高 16 位存入数据存储器。 PREG 值和累加器值都不受本指令影响。数据传送类指令(26)数据传送类指令(26)存储 PREG 寄存器高位:(2)例1:SPH DAT3 ;DP = 4,PM = 0例2:SPH *,AR7 ;设 PM = 2,左移 4 位数据传送类指令(27)数据传送类指令(27)存储 P 寄存器低位:(1) SPL dma ;直接寻址 SPL ind[, ARn] ;间接寻址 该指令将 PREG 按 PM 位所规定的方式移位后数值的低 16 位存储到数据存储器中。 执行时先将 32 位 PREG 复制到乘积移位器中,然后在此按 PM 位所 规定的值进行移位。若是右移 6 位方式,则高位进行符号扩展,低位 丢失;若是左移方式,则高位丢失,低位填零;若 PM=00,则移位 不发生。移位后数值的低 16 位存入数据存储器。 PREG 值和累加器值都不受本指令影响。数据传送类指令(27)数据传送类指令(27)存储 P 寄存器低位:(2)例:SPL DAT5 ;DP = 4;PM = 2,左移 4 位数据传送类指令(28)数据传送类指令(28)存储长立即数值至数据存储器:(1) SPLK #lk,dma ;直接寻址 SPLK #lk,ind[, ARn] ;间接寻址 该指令允许将一个 16 位的数值写入任何一个数 据存储器单元。 该指令不影响状态位。数据传送类指令(28)数据传送类指令(28)存储长立即数值至数据存储器:(2)例1:SPLK #7FFFh,DAT3 ;DP = 6例2:SPLK #4567h,*,AR7 ;数据传送类指令(29)数据传送类指令(29)存储状态寄存器:(1) SST #m,dma ;直接寻址 SST #m,ind[, ARn] ;间接寻址 该指令将指定的状态寄存器内容存入被寻址数据存储器单元中。若 m=0 则选择 ST0; m=1 则选择 ST1。 在直接寻址方式中,不管 ST0 中的数据页指针为何值,指定的状态寄 存器总是被存入第0页。虽然处理器自动访问第0页,但 DP 不会被修 改。这就允许在 DP 不被修改的情况下存储ST0。在第0页内的特定存 储单元由指令给出。 在间接寻址中,存储地址从被选的辅助寄存器获得。从而,指定的状态 寄存器内容可被存储至数据存储器中任一页的地址。数据传送类指令(29)数据传送类指令(29)存储状态寄存器:(2)例1:SST #0,96 ;直接寻址,自动访问数据页0例2:SST #1,*,AR7 ;间接寻址数据传送类指令(30)数据传送类指令(30)表读:(1) TBLR dma ;直接寻址 TBLR ind[, ARn] ;间接寻址 该指令把程序存储器单元中的一个字传送到由指令指定的数据存储器单元。 程序存储器单元地址由累加器的低 16 位定义。该操作执行完从程序存储器读 后,紧接着向数据存储器写。 当与重复指令 RPT 一同使用时,该指令便成为单周期指令。该指令执行前, 会将 PC 加 1 并保存到微堆栈,然后将由累加器的低 16 位定义的表的首址装 入到 PC,以后每个周期 PC 自动加 1, RPTC 自动减 1,该操作持续到 RPTC=0 为止;当 RPTC=0,保存在微堆栈 PC 值会自动弹回到 PC 中, 使得下一条指令能正常运行。 该指令不影响状态位。数据传送类指令(30)数据传送类指令(30)表读:(2)例1:TBLR DAT6 ;设 DP = 4数据传送类指令(30)数据传送类指令(30)表读:(3)例2:TBLR *,AR7 ;设 PM = 0,DP = 6数据传送类指令(31)数据传送类指令(31)表写:(1) TBLW dma ;直接寻址 TBLW ind[, ARn] ;间接寻址 该指令把数据存储器单元中的一个字传送到程序存储器单元。 数据存储器单元地址由指令给出,程序存储器地址由累加器的低 16 位指定。 该指令首先从数据存储器中读,紧接着向程序存储器写。 当与重复指令 RPT 一同使用时,该指令便成为单周期指令。该指令执行前, 会将 PC 加 1 并保存到微堆栈,然后将由累加器的低 16 位定义的表的首址装 入到 PC,以后每个周期 PC 自动加 1, RPTC 自动减 1,该操作持续到 RPTC=0 为止;当 RPTC=0,保存在微堆栈 PC 值会自动弹回到 PC 中, 使得下一条指令能正常运行。 该指令不影响状态位。数据传送类指令(31)数据传送类指令(31)表写:(2)例1:TBLW DAT5 ;设 DP = 32数据传送类指令(31)数据传送类指令(31)表写:(3)例2:TBLW * ;算术操作类指令(1)算术操作类指令(1) 算术操作类指令一共有 22 条,可以完成 4 种基本的算术运算,即加减乘除。 除法没有直接的操作指令,可以利用条件减指令来完成。 对于不同的算术运算指令,执行时会受到一些状态位的影响,如PM、OVM 和 SXM,也会影响状态位,如 OV 和 C。算术操作类指令(2)算术操作类指令(2)累加器取绝对值:(1) ABS 该指令将累加器的内容取绝对值后放回累加器,指令执行 前后的内容均以二进制补码解释。 执行该指令后,进位位被清零。 要注意 8000 0000h 是一特殊情况。当溢出方式 OVM 为 0,8000 0000h 在 ABS 指令执行后仍为 8000 0000h;当溢出方式 OVM 为1,则 8000 0000h 在 ABS 指令执行后为 7FFF FFFFh。以上任一情况,OV 状态位均置 1。算术操作类指令(2)算术操作类指令(2)累加器取绝对值:(2)例1:ABS ACC算术操作类指令(3)算术操作类指令(3)加至累加器:(1) ADD dma[,shift] ;直接寻址 ADD ind,[,shift[,ARn]] ;间接寻址 ADD dma,16 ;直接寻址并左移 16 位 ADD ind,16[,ARn] ;间接寻址并左移 16 位 ADD #k ;短立即寻址 ADD #lk,[,shift] ;长立即寻址算术操作类指令(3)算术操作类指令(3)加至累加器:(2) 第1、2条指令将被寻址数据存储器单元的内容左移后加到累加器中。移位时,低位填零, 高位在 SXM = 1 时进行符号扩展,在 SXM = 0 时填零。结果存储在累加器中。 第3、4条指令将被寻址数据存储器单元的内容左移 16 位后加到累加器中。 第5条指令将一个短立即常数加到累加器中,不进行移位,也不受 SXM 影响。 第6条指令将一个长立即常数左移后加到累加器中。移位时,低位填零,高位在 SXM = 1 时进行符号扩展,在 SXM = 0 时填零。结果存储在累加器中。 若使用间接寻址并更新 ARP,则必须指定一个移位操作数。若并不要求移位发生,则该 操作数以 0 代替。 正常情况下,若结果产生进位,则进位位被置1;否则进位位被清零。然而,当进行 16 位移位加法时,若结果产生进位,则进位位被置1,否则进位位被清零。这可使累加器在 加一个 32 位数时,产生正确的符号进位。 该指令都受 OVM 的影响,并且相加的结果会影响状态位 OV。 在进行二进制补码加法时,状态位 OV 反映了相加结果是否溢出。对于无符号的加法, 通过进位位来判断是否溢出。算术操作类指令(3)算术操作类指令(3)加至累加器:(3)例1:ADD 1,1 ;DP = 6例2:ADD * +,0,AR0 ;算术操作类指令(4)算术操作类指令(4)带进位位加至累加器:(1) ADDC dma ;直接寻址 ADDC ind[,ARn] ;间接寻址 该指令将被寻址数据存储器单元的内容及进位位值加到累 加器,抑制符号扩展。 进位位按正常方式置位:若结果产生进位,则进位位被置1, 否则进位位被清零。 可利用该指令实现高精度的运算。 该指令不受 SXM 影响,但受 OVM 的影响。 相加结果要影响 C 和 OV。算术操作类指令(4)算术操作类指令(4)带进位位加至累加器:(2)例1:ADDC DAT300 ;DP = 6例2:ADDC * -,AR4 ;设 OVM = 0算术操作类指令(5)算术操作类指令(5)抑制符号扩展加至累加器:(1) ADDS dma ;直接寻址 ADDS ind[,ARn] ;间接寻址 该指令将指定的数据存储器单元的内容加到累加器中,抑制符号扩展。 无论 SXM 为何值,数据均被作为 16 位无符号数处理,累加器内容被 视为无符号数。 该指令所产生的结果与执行 SXM 为零且移位为0时的ADD 指令结果 一样。 若结果产生进位,则进位位置 1,否则进位位清零。 该指令不受 SXM 的影响,但受 OVM 的影响。相加的结果要影响 C 和 OV。算术操作类指令(5)算术操作类指令(5)抑制符号扩展加至累加器:(2)例1:ADDS 0 ;DP = 6例2:ADDS *算术操作类指令(6)算术操作类指令(6)按 T 寄存器内容移位后加至累加器:(1) ADDT dma ;直接寻址 ADDT ind[,ARn] ;间接寻址 该指令将指定的数据存储器单元的内容左移后加到累加器 中,其结果取代累加器中原来的内容。左移量由 TREG 低 4 位(0-15)决定。 若结果产生进位,则进位位置 1,否则进位位清零。 该指令受 SXM 和 OVM 的影响。相加的结果要影响 C 和 OV。算术操作类指令(6)算术操作类指令(6)按 T 寄存器内容移位后加至累加器:(2)例:ADDT 127 ;DP = 4,SXM = 0算术操作类指令(7)算术操作类指令(7)短立即数加至辅助寄存器: ADRK #k ;短立即寻址 该指令将 8 位立即数值靠右对齐加到当前辅助寄存器(由当前 ARP 值指定),其结果替代该辅助寄存器的内容。 加操作在 ARAU 中执行,且立即数值被作为 8 位正整数处理。在辅 助寄存器上的所有算术运算都是无符号的。例:ADRK #80h 算术操作类指令(8)算术操作类指令(8)P 寄存器加至累加器: APAC 该指令先将 PREG 中的内容按照 ST1 中 PM 位所规定的值进行移位,然后 将移位后的值加到累加器中。 无论 SXM 为何值,PREG 始终要符号扩展。 该指令受 PM、OVM 的影响。相加结果要影响 C 和 OV。 该指令具有LTA、LTD、MAC、MACD、MPTA 和 SQRA 指令的部分功能。例:APAC ;PM = 01,即左移 1 位,低位填零算术操作类指令(9)算术操作类指令(9)乘且累加:(1) MAC pma,dma ;直接寻址 MAC pma,ind[,ARn] ;间接寻址 该指令可一次完成多步操作,并可与重复计数器实现块的操作。基本功能是把 程序存储器中的一串数与数据存储器中的一串(间接寻址)或一个(直接寻址) 数分别相乘再累加。 该指令操作的具体步骤是:将当前 PC 加 1 保存到微堆栈;将块首地址 pma 装入 PC;将前次乘积的结果按 PM 状态位所规定的值移位;然后加到累加器 中;若加的结果产生进位,则进位位被置 1,否则进位位被清零;将指定的数 据存储器地址中的内容装入 TREG;将存放在 TREG 中的数据存储器值乘以 PC 指定的程序存储器地址中的内容;PC 加 1,重复计数器减 1(第一次不 做),如果重复计数器等于零则停止,否则继续上述操作。算术操作类指令(9)算术操作类指令(9)乘且累加:(2)(PC)+ 1  PC;(PC)  MSTACK pma  PC (ACC)+ 移位后的(PREG)  ACC (dma)或(ind[,ARn])  TREG (TREG)╳ (PC)  PREG (PC)+ 1  PC (RPTC)- 1  RPTC(第一次不做) 如果(RPTC)不等于零,继续上述操作。 否则 (MSTACK)  PC算术操作类指令(9)算术操作类指令(9)乘且累加:(3) 数据和程序存储器单元可以是任何非保留的片内或片外存储器单元。若 程序存储器是片内的 RAM 的 B0 块,则 CNF 必须置 1。 当重复执行该指令时,包含在 PC 中的程序存储器地址在每次循环中增 1,这样就可访问程序存储器中的一串操作数。若使用间接寻址来指定 数据存储器地址,则在每次循环中可以访问一新的数据存储器地址。若 使用直接寻址方式,则指定的数据存储器地址为一常量,在循环中该常 量不能被修改。 该指令在有大量的乘加操作时非常有用,因为一旦流水线启动后,在循 环中 MAC 指令将变为单周期指令。 该指令受 PM、OVM 的影响。结果要影响 C 和 OV。算术操作类指令(9)算术操作类指令(9)乘且累加:(4)例:MAC 0FF00h, 02h ;DP = 6,PM = 0,CNF = 1算术操作类指令(10)算术操作类指令(10)乘且累加,其数据存储器的内容下移一步:(1) MACD pma,dma ;直接寻址 MACD pma,ind[,ARn] ;间接寻址 该指令的操作与 MAC 指令基本类似,不同点只是要将当前数据存储器地址中 的内容复制到地址加 1 的数据存储器单元中,即执行一次 DMOV 指令。 该指令操作的具体步骤是:将当前 PC 加 1 保存到微堆栈;将块首地址 pma 装入 PC;将前次乘积的结果按 PM 状态位所规定的值移位;然后加到累加器 中;若加的结果产生进位,则进位位被置 1,否则进位位被清零;将指定的数 据存储器地址中的内容装入 TREG;将存放在 TREG 中的数据存储器值乘以 PC 指定的程序存储器地址中的内容;将当前数据存储器地址中的内容复制到 地址加 1 的数据存储器单元中;PC 加 1,重复计数器减 1(第一次不做), 如果重复计数器等于零则停止,否则继续上述操作。算术操作类指令(10)算术操作类指令(10)乘且累加,其数据存储器的内容下移一步:(2)(PC)+ 1  PC;(PC)  MSTACK pma  PC (ACC)+ 移位后的(PREG)  ACC (dma)或(ind[,ARn])  TREG (TREG)╳ (PC)  PREG (PC)+ 1  PC (RPTC)- 1  RPTC(第一次不做) 如果(RPTC)不等于零,继续上述操作。 否则 (MSTACK)  PC(数据存储器地址)  数据存储器地址 + 1算术操作类指令(10)算术操作类指令(10)乘且累加,其数据存储器的内容下移一步:(3) 数据和程序存储器单元可以是任何非保留的片内或片外存储器单元。若 程序存储器是片内的 RAM 的 B0 块,则 CNF 必须置 1。 当重复执行该指令时,包含在 PC 中的程序存储器地址在每次循环中增 1,这样就可访问程序存储器中的一串操作数。若使用间接寻址来指定 数据存储器地址,则在每次循环中可以访问一新的数据存储器地址。若 使用直接寻址方式,则指定的数据存储器地址为一常量,在循环中该常 量不能被修改。 该指令在有大量的乘加操作时非常有用,因为一旦流水线启动后,在循 环中 MAC 指令将变为单周期指令。 该指令受 PM、O
本文档为【“DSP控制器及其应用”第四章指令系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_521706
暂无简介~
格式:ppt
大小:2MB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2010-10-19
浏览量:26