TMS320C55X dsp原理及应用 汪春梅新的第3章.ppt
134页第三章第三章 TMS320C55x的指令的指令系统系统 n n3.1 寻址方式 n n3.2 TMS320C55x的指令系统 3.1 寻址方式寻址方式 n n寻址方式:寻址方式: 是指如何指定指令和操作数所在存储空间是指如何指定指令和操作数所在存储空间 的地址n nC55x DSPC55x DSP支持三种寻址模式支持三种寻址模式 ::n n绝对寻址模式绝对寻址模式: : 指令里有一个地址的全部或者部分指令里有一个地址的全部或者部分, ,指示目的地址指示目的地址; ;n n直接寻址模式直接寻址模式: : 使用偏移地址指示目的地址使用偏移地址指示目的地址; ;n n间接寻址模式间接寻址模式: : 使用指针指示目的地址使用指针指示目的地址 支持寻址模式操作数的指令应具有下表所示的句法元素:支持寻址模式操作数的指令应具有下表所示的句法元素:句法元素句法元素描述描述SmemSmem指令语句里含有指令语句里含有SmemSmem时,该指令可以访问数据存储器、时,该指令可以访问数据存储器、I/OI/O空间或者空间或者MMRMMR中的一个单字(中的一个单字(16bits)16bits)。
写该指令语句写该指令语句时,用一个兼容的寻址模式操作数来代替时,用一个兼容的寻址模式操作数来代替SmemSmemLmemLmem指令语句里含有指令语句里含有LmemLmem时,该指令可以访问数据存储器或时,该指令可以访问数据存储器或者者MMRMMR中的一个长字(中的一个长字(32bits)32bits)写该指令语句时,用一个写该指令语句时,用一个兼容的寻址模式操作数来代替兼容的寻址模式操作数来代替SmemSmemXmem and Xmem and Ymem Ymem 指令语句里含有指令语句里含有Xmem and YmemXmem and Ymem时,该指令可以对数据时,该指令可以对数据存储器同时作两次存储器同时作两次16bits16bits的访问写该指令语句时,用兼的访问写该指令语句时,用兼容的寻址模式操作数来代替容的寻址模式操作数来代替Xmem and Ymem Xmem and Ymem CmemCmem指令语句里含有指令语句里含有CmemCmem时,该指令可以访问数据存储器的时,该指令可以访问数据存储器的单字(单字(16bits)16bits)写该指令语句时,用一个兼容的寻址模式。
写该指令语句时,用一个兼容的寻址模式操作数来代替操作数来代替CmemCmemBaddrBaddr指令语句里含有指令语句里含有BaddrBaddr时,该指令可以访问累加器时,该指令可以访问累加器((AC0~AC3)AC0~AC3)、辅助寄存器(、辅助寄存器(AR0~AR7)AR0~AR7)或或T0~T3T0~T3中的一个中的一个bitbit或者两个或者两个bitbit只有寄存器只有寄存器bitbit测试测试/ /设置设置/ /清除清除/ /取反指令支取反指令支持持BaddrBaddr写任意一条此类指令语句时,用一个兼容的寻写任意一条此类指令语句时,用一个兼容的寻址模式操作数来代替址模式操作数来代替BaddrBaddr 3.1.1 绝对寻址模式寻址模式寻址模式功能功能k16k16绝对寻址绝对寻址用用DPHDPH的的7-bit7-bit寄存器,和一个寄存器,和一个16-bit16-bit无无符号常数构成一个符号常数构成一个23-bit23-bit数据空间地址数据空间地址该模式可以访问存储器或者该模式可以访问存储器或者MMRMMRk23k23绝对寻址绝对寻址指定一个指定一个23-bit23-bit无符号常数作为全地址。
无符号常数作为全地址该模式可以访问存储器或者该模式可以访问存储器或者MMRMMRI/OI/O绝对寻址绝对寻址指定一个指定一个16bit16bit无符号常数作为无符号常数作为I/OI/O地址地址, ,该模式可以访问该模式可以访问I/OI/O空间n nk16k16绝对寻址绝对寻址绝对寻址绝对寻址n n其操作数为其操作数为 *abs16(#k16) *abs16(#k16),其中,,其中,k16k16为为1616位无符号常数位无符号常数n n将将7 7位的寄存器位的寄存器DPHDPH和和k16k16级联形成一个级联形成一个2323位的地址,用位的地址,用于对数据空间的访问该模式可以访问一个数据存储器于对数据空间的访问该模式可以访问一个数据存储器单元或者单元或者MMRMMRk k1 16 6绝绝绝绝对对对对寻寻寻寻址址址址模模模模式式式式 n nk16k16绝对寻址绝对寻址绝对寻址绝对寻址n n其操作数为其操作数为 *abs16(#k16) *abs16(#k16),其中,,其中,k16k16为为1616位无符号常数位无符号常数n n将将7 7位的寄存器位的寄存器DPHDPH和和k16k16级联形成一个级联形成一个2323位的地址,用位的地址,用于对数据空间的访问。
该模式可以访问一个数据存储器于对数据空间的访问该模式可以访问一个数据存储器单元或者单元或者MMRMMR指令实例: (1) 语法格式:MOV Smem , dst 指令语句:MOV *abs16(#2002h) , T2指令实例: (2) 语法格式: MOV K16, Smem 指令语句: MOV #248, *abs16(#2002h)n nk16k16绝对寻址绝对寻址绝对寻址绝对寻址程序执行的结果是: T2= 汇编语言k16绝对寻址程序阅读与分析: .def start .mmregs .text start: MOV #03H , DPH MOV #24 , *abs16(#2002h) MOV *abs16(#2002h) , T2here: b here操作数*abs16(#2002h)的寻址地址 : 。
032002H0018Hn nk23k23绝对寻址绝对寻址n n操作数为操作数为 *(#k23) *(#k23) ,其中,,其中,k23k23为为2323位的无符号常数,作为位的无符号常数,作为所寻址数据空间的地址所寻址数据空间的地址 k23 k23绝对寻址模式绝对寻址模式绝对寻址模式绝对寻址模式 n nI/OI/O绝对寻址绝对寻址n n对于对于代数格式代数格式代数格式代数格式汇编语言指令,操作数是汇编语言指令,操作数是 *port(#k16) *port(#k16),其中,其中 k16k16为为1616位无符号常数,用于指明位无符号常数,用于指明1616位位I/OI/O端口地址端口地址n n使用使用助记符格式助记符格式助记符格式助记符格式汇编语言指令,其操作数是汇编语言指令,其操作数是port(#k16)port(#k16)(操(操作数前没有作数前没有 * * ) I/OI/O绝对寻址绝对寻址绝对寻址绝对寻址 3.1.2 3.1.2 直接寻址模式直接寻址模式 直接寻址直接寻址直接寻址直接寻址 的分类见下表的分类见下表 ::寻址模式寻址模式描述描述DPDP直接寻址直接寻址使用使用DPHDPH指定的主数据页,和指定的主数据页,和DPDP相连接形成相连接形成2323位数据空间地址,用于访问存储器和位数据空间地址,用于访问存储器和MMRMMR。
SPSP直接寻址直接寻址使用使用SPHSPH指定的主数据页,和指定的主数据页,和SPSP相连接形成相连接形成2323位位地址,用于访问数据存储器里的堆栈值地址,用于访问数据存储器里的堆栈值寄存器寄存器bitbit直接直接寻址寻址用一个偏移来指定一个用一个偏移来指定一个bitbit地址该模式用于访问地址该模式用于访问一个寄存器一个寄存器bitbit或者两个相邻的寄存器或者两个相邻的寄存器bitbitPDPPDP直接寻直接寻址址用用PDPPDP(外设数据页寄存器)和一个偏移,来指(外设数据页寄存器)和一个偏移,来指定一个定一个I/OI/O端口地址该模式用来访问端口地址该模式用来访问I/OI/O空间的空间的单元3.1.2 3.1.2 直接寻址模式直接寻址模式 直接寻址直接寻址直接寻址直接寻址 中的中的DPDP直接寻址和直接寻址和SPSP寻址与状态寄存器寻址与状态寄存器ST1-ST1-5555的的CPLCPL位有关当当CPL=0CPL=0采用采用DPDP直接寻址模式,操作数直接寻址模式,操作数@Daddr@Daddr当当CPL=1CPL=1采用采用SPSP直接寻址模式,操作数直接寻址模式,操作数*SP(offset)*SP(offset) 直接寻址模式直接寻址模式中的寄存器寄存器bitbit直接寻址直接寻址和PDPPDP直接寻址直接寻址与状 态寄存器ST1-55的CPL位无关。
3.1.2 3.1.2 直接寻址模式直接寻址模式 一、一、一、一、 DP DP 直接寻址直接寻址直接寻址直接寻址 DP DP直接寻址直接寻址直接寻址直接寻址的的2323位地址构成:位地址构成:n n高高7 7位由位由 DPH DPH 提供,用来确定主数据页;提供,用来确定主数据页;n n其余低其余低1616位为以下两部分的和:位为以下两部分的和:((1 1)) DP DP 里的值DPDP定义了在主数据页内的起始地址定义了在主数据页内的起始地址2 2)) 汇编程序计算的汇编程序计算的7-bit7-bit偏移量(偏移量(DoffsetDoffset)D DP P直直直直接接接接寻寻寻寻址址址址模模模模式式式式 n nDP DP 直接寻址直接寻址直接寻址直接寻址偏移量(偏移量(DoffsetDoffset)的计算)的计算 访问对象访问对象计算计算DoffsetDoffset说明说明数据存储器数据存储器Doffset =Doffset =((Daddr-.dp) & 7FhDaddr-.dp) & 7FhDaddrDaddr是读是读/ /写操作的写操作的16bit16bit地址,地址,.dp.dp是利用汇编伪指令分配的数值(一是利用汇编伪指令分配的数值(一般般DPDP的匹配),的匹配),&&表示按位表示按位“ “与与” ”MMRMMRDoffset = Doffset = Daddr & 7FhDaddr & 7FhDaddrDaddr是读是读/ /写操作的写操作的16bit16bit地址,地址,&&表表示按位示按位“ “与与” ”,,mmap( )mmap( )迫使迫使CPUCPU把数把数据页视为据页视为0 0来操作。
来操作Doffset的计算有两种情况:表2-1 DP 直接寻址直接寻址Doffset的计算一、 DP 直接寻址n nDP DP 直接寻址偏移量(直接寻址偏移量(直接寻址偏移量(直接寻址偏移量(DoffsetDoffset)的计算)的计算)的计算)的计算 DP 直接寻址直接寻址 Doffset 的计算代码示例:的计算代码示例:The assembler calculates Doffset: Doffset =(1) 寻址数据存储器寻址数据存储器 At run time, the 23-bit data-space address is generated: 23-bit address =(Daddr – .dp) & 7Fh = (FFF4h – FFF0h) & 7Fh = 04hDPH:(DP + Doffset) = 03:(FFF0h + 0004h) = 03 FFF4hAMOV #03FFF0h, XDP.dp #0FFF0hMOV @0FFF4h, T2指令实例:指令实例:; Main data page is 03. For run-time, ;DP is FFF0h.; For assembly time, .dp is FFF0h.;Load T2 with the value at local ;address FFF4h.分析:分析:一、 DP 直接寻址n nDP DP 直接寻址偏移量(直接寻址偏移量(直接寻址偏移量(直接寻址偏移量(DoffsetDoffset)的计算)的计算)的计算)的计算 DP 直接寻址直接寻址 Doffset 的计算代码示例:的计算代码示例:汇编器计算偏移量: Doffset =(2) 寻址寻址 MMRMMR((memory-mapped register memory-mapped register )) 程序运行时: ( CPU : DPH = DP = 0) 23-bit 地址产生如下: 23-bit address =Daddr & 7Fh = 0010h & 7Fh = 10hDPH:(DP + Doffset) = 00:(0000h + 0010h) = 00 0010hMOV mmap(@AR0), T2 ; Load T2 with the value in AR0. ; mmap( ) qualifier indicates access to MMR. ; AR0 is mapped to address 000010h in data space指令实例:指令实例:分析:分析:一、 DP 直接寻址 n n二、二、二、二、SPSP直接寻址直接寻址直接寻址直接寻址 SPSP直接寻址的直接寻址的直接寻址的直接寻址的2323位地址构成:位地址构成:位地址构成:位地址构成:n n最高最高7 7位地址由寄存器位地址由寄存器SPHSPH确定;确定;n n低低1616位地址是位地址是SPSP值和指令里指定的值和指令里指定的7 7位偏移量之和。
偏移量范围是位偏移量之和偏移量范围是0~1270~127由SPHSPH和和SPSP构成了扩展数据堆栈指针构成了扩展数据堆栈指针XSPXSP))SPSP直接寻址模式直接寻址模式直接寻址模式直接寻址模式 n n二、二、二、二、SPSP直接寻址直接寻址直接寻址直接寻址 SPSP直接寻址的直接寻址的直接寻址的直接寻址的2323位地址构成:位地址构成:位地址构成:位地址构成:n n最高最高7 7位地址由寄存器位地址由寄存器SPHSPH确定;确定;n n低低1616位地址是位地址是SPSP值和指令里指定的值和指令里指定的7 7位偏移量之和偏位偏移量之和偏移量范围是移量范围是0~1270~127 指令实例: (1) 语法格式:MOV Smem , dst 指令语句:MOV *SP(5), T2指令寻址分析: 假设SPH=00h,SP=FF00h ; 操作数*SP(5), T2的寻址地址为: 指令执行结果:将数据空间中地址为00 FF05h单元内的数值加 载到T2寄存器中。
SPH:(SP + offset) = 00 FF05h;n n三、寄存器位直接寻址三、寄存器位直接寻址三、寄存器位直接寻址三、寄存器位直接寻址模式模式n n操作数是操作数是@bitoffset @bitoffset n n只有寄存器的位测试、置位、清零、取反指令支持这只有寄存器的位测试、置位、清零、取反指令支持这种寻址模式种寻址模式 说明: (1) 偏移量bitoffset 是从所要位寻址的寄存器最低位开始,如果bitoffset 是3,则正在寻址该寄存器的第 3 位 (2) 该寻址方式只能访问以下的寄存器:AC0–AC3、AR0–AR7、T0–T3指令实例: (1) 语法格式: BSET Baddr, src 指令语句: BSET @0, AC3 CPU 置位AC3的第零位 指令寻址分析:n n四、四、四、四、PDPPDP直接寻址直接寻址直接寻址直接寻址 使用PDP 寻址方式时,16bit 的I/O 空间地址的形成如下:64K × 16bit 的I/O空间被分成512个外设数据页,每页有128个字,用9位的外设数据页指针寄存器PDP指出页地址,同时由指令中指定的一个7位偏移值来表示页内的偏移量,从而形成一个16bit 的外设I/O地址。
n n四、四、四、四、PDPPDP直接寻址直接寻址直接寻址直接寻址 图 2-5 PDP 直接寻址模式n n四、四、四、四、PDPPDP直接寻址直接寻址直接寻址直接寻址 指令实例:用PDP直接寻址直接寻址模式访问I/O空间 语法: MOV Smem, dst 语句: MOV port(@0), T2 ;指令寻址地址:PDP:Poffset 语法: MOV k9, PDP 语句: MOV #008, PDP ;PDP =008h 初始化 PDP寄存器的语句:MOV port(@0), T2; PDP:Poffset =0400h 3.1.3 间接寻址模式间接寻址模式CPU支持的间接寻址模式见下表: 寻址模式寻址模式功功 能能ARAR间接间接寻址寻址使用使用8 8个辅助寄存器(个辅助寄存器(AR0~AR7)AR0~AR7)中的一个指向数据中的一个指向数据CPUCPU用辅助寄存器来产生地址的方式取决于访问数据用辅助寄存器来产生地址的方式取决于访问数据空间、单个寄存器位或者空间、单个寄存器位或者I/OI/O空间双双ARAR间间接寻址接寻址地址产生过程与地址产生过程与ARAR间接寻址模式相同。
间接寻址模式相同 该模式用在该模式用在访问两个或者多个数据存储器单元的指令中访问两个或者多个数据存储器单元的指令中CDPCDP间接间接寻址寻址用系数数据指针(用系数数据指针(CDP)CDP)指向数据指向数据 CPU CPU用用CDPCDP产生产生的地址的方式取决于访问数据空间、单个寄存器位或的地址的方式取决于访问数据空间、单个寄存器位或者者I/OI/O空间系数间接系数间接寻址寻址地址产生过程与地址产生过程与CDPCDP间接寻址模式相同该模式所支间接寻址模式相同该模式所支持的指令,可以在访问数据存储器里一个系数的同时,持的指令,可以在访问数据存储器里一个系数的同时,用双用双ARAR间接寻址访问另外两个数据存储器的值间接寻址访问另外两个数据存储器的值一、一、一、一、ARAR间接寻址模式间接寻址模式间接寻址模式间接寻址模式 n n通过一个辅助寄存器通过一个辅助寄存器通过一个辅助寄存器通过一个辅助寄存器ARnARn((((n=0,1,2,3,4,5,6,7n=0,1,2,3,4,5,6,7)访问数据访问数据访问数据访问数据n nST2-55ST2-55的的的的ARMSARMS位决定位决定位决定位决定ARAR间接寻址的操作类型间接寻址的操作类型间接寻址的操作类型间接寻址的操作类型n nARMS=0ARMS=0,,,,DSPDSP模式:模式:模式:模式:CPUCPU提供提供提供提供DSPDSP增强应用的高效执行功能;增强应用的高效执行功能;增强应用的高效执行功能;增强应用的高效执行功能;n nARMS=1ARMS=1,控制模式:,控制模式:,控制模式:,控制模式:CPUCPU能够优化代码的长度。
能够优化代码的长度能够优化代码的长度能够优化代码的长度n nARnARn产生地址的方式取决于所访问的类型,具体见下表:产生地址的方式取决于所访问的类型,具体见下表:产生地址的方式取决于所访问的类型,具体见下表:产生地址的方式取决于所访问的类型,具体见下表: 表2-4 AR间接寻址模式访问的类型访访 问问ARnARn包含包含 数据存储空间数据存储空间(存储器或(存储器或MMR)MMR)一个一个2323位地址的低位地址的低1616位高7 7位由位由ARnHARnH来提供单个寄存器单个寄存器bitbit( (或相邻两个或相邻两个bit)bit)一个一个bitbitI/OI/O空间空间一个一个16-bit16-bit的的I/OI/O地址3.1.3 间接寻址模式 3.1.3 3.1.3 间接寻址模式间接寻址模式间接寻址模式间接寻址模式 (1) AR间接寻址模式访问间接寻址模式访问 数据存储空间数据存储空间 访问数据空间时,使用一条装入XARn的指令, 语法:AMOV k23, XAdst 语句:AMOV #7FFFFFh, XAR0;将23位地址值(7FFFFFh)存 入XAR0。
3.1.3 3.1.3 间接寻址模式间接寻址模式间接寻址模式间接寻址模式 (2) AR间接寻址模式访问间接寻址模式访问 寄存器位寄存器位 访问寄存器位时,所选择的辅助寄存器,ARn中只有一个bit 例如:AR6里是0,则AR6指向所操作寄存器的最低bit 0 指令实例: (1) 语法格式: BSET Baddr, src 指令语句: MOV #15 , AR6 BSET *AR6, AC3 CPU 置位AC3的第15位 指令寻址分析: 说明: (1)该寻址方式只能访问以下的寄存器:AC0–AC3、AR0–AR7、T0–T33.1.3 3.1.3 间接寻址模式间接寻址模式间接寻址模式间接寻址模式 ( 3 ) AR间接寻址模式访问间接寻址模式访问 I/O空间空间 访问I/O空间时,用16bit 地址访问I/O空间里的字,辅助寄存器ARn中包含全部16-bit I/O地址。
指令实例:用 AR间接寻址间接寻址 模式访问I/O空间 语法: MOV Smem, dst 语句: MOV port( * ARn), T2 ;I/O空间中的值读入到T2中 MOV #FF80h , AR6; MOV port(* AR6), T2; MOV T2 , port(* AR6+); MOV port(*- AR6), T2; 作业:分析每一条程序语句 的运行结果3.1.3 3.1.3 间接寻址模式间接寻址模式间接寻址模式间接寻址模式 二、双二、双 AR间接寻址模式访问间接寻址模式访问 多数据空间多数据空间 双双 AR间接寻址模式用来:间接寻址模式用来:((1)) 执行访问两个执行访问两个16-bit数据存储器(数据存储器( Xmem and Ymem)的指令 例如 指令语法 : ADD Xmem, Ymem, ACx(2) 并行执行两条指令,每条指令必须单独访问一个存储器Smem or Lmem 例如 指令语法 : MOV Smem, dst || AND Smem, src, dst提问:查本书附录分析指令功能。
提问:查本书附录分析指令功能3.1.3 3.1.3 间接寻址模式间接寻址模式间接寻址模式间接寻址模式 三、三、CDP间接寻址模式间接寻址模式 CDP间接寻址模式使用系数数据寄存器间接寻址模式使用系数数据寄存器CDP访问访问数据空间数据空间、、寄存器位寄存器位和和 I/O空间空间CDPCDP间接寻址操作数间接寻址操作数间接寻址操作数间接寻址操作数 3.1.3 间接寻址模式间接寻址模式三、CDP间接寻址模式指令实例:用 CDP间接寻址间接寻址 模式访问I/O空间 语法: MOV Smem, dst 语句: MOV port( * CDP), T2 ;I/O空间中的值(地址为CDP中的16- ;bit数值)读入到T2中指令实例:用 CDP间接寻址间接寻址 模式访问数据空间 语法: MOV Smem, dst 语句: MOV ( * CDP ), T2 ;数据空间中的值(地址为XDP中的23- ;bit数值)读入到T2中。
; CDPH:CDP=XCDP3.1.3 3.1.3 间接寻址模式间接寻址模式 四、系数间接寻址模式 系数间接寻址模式的地址产生过程与CDP间接寻址模式数据空间的地址产生过程一样 支持以下算术指令:FIR滤波、乘法、乘加、乘减、双乘加或双乘减 系数间接寻址模式功用: 系数间接寻址模式主要是每个周期对3个存储器操作数操作的指令其中两个操作数( Xmem和Ymem)用双AR间接寻址模式访问,第三个操作数Cmem用系数间接寻址模式访问四、系数间接寻址模式四、系数间接寻址模式3.1.3 间接寻址模式间接寻址模式指令实例: 系数间接寻址 模式 语法: MPY Xmem, Cmem, ACx :: MPY Ymem, Cmem, ACy 语句: MPY *AR0, *CDP, AC0 ;两个操作数( Xmem和Ymem)用 ;双AR间接寻址模式访问。
:: MPY *AR1, *CDP, AC1;系数数据Cmem采用系数间接寻 ;址,地址为CDPH:CDP=XCDP 指令寻址分析: CPU用XCDP处的系数乘以XAR0的值,并将结果存储到AC0中;同时,用同一个系数乘以XAR1的值,将结果存储到AC1中,不修改CDP的值指令说明: Cmem必须放在与Xmem和Ymem不同的存储器块里四、系数间接寻址模式四、系数间接寻址模式3.1.3 间接寻址模式间接寻址模式系数间接寻址操作数系数间接寻址操作数 3.2 TMS320C55X的指令系统指令实例:MPY *AR0,*CDP,AC0:: MPY * AR1 ,*CDP,AC1 ;隐含并行系数间接寻址方式一、一、C55X指令的并行执行指令的并行执行((1)单指令中)单指令中内置内置并行方式并行方式 由一条指令同时执行两个不同的操作,通常用符号由一条指令同时执行两个不同的操作,通常用符号“::::”来分割指令的两个部分,这种并行方式也称为隐含(来分割指令的两个部分,这种并行方式也称为隐含(内置内置)并)并行方式。
行方式3.2 TMS320C55X的指令系统指令实例:MPYM *AR1- , *CDP , AC1 || XOR AR2, T1 ;第一条指令在D单元执行乘法运算,第二条指令在A单元的ALU执行一个逻辑操作一、C55X指令的并行执行(2)用户自定义的两条指令间的并行方式 这类并行指令是用户或者C语言编译器定义的,是由两条指令同时并行执行两个操作,通常用符号“||” 来分隔这两条指令3.2 TMS320C55X的指令系统指令实例:MPYM T3=*AR3+ , AC1 , AC2 || MOV #5, AR1 ;第一条指令隐含了内置并行方式 ;第二条指令是用户自定义的并行方式一、C55X指令的并行执行(3)内置与用户自定义混合的并行方式指令分析: MPYM[R][40] [T3 = ][uns(]Xmem[)], [uns(]Ymem[)], ACx ; ACx = M40(rnd(uns(Xmem) * uns(Ymem))) [, T3 = Xmem]指令并行的规则指令并行的规则指令并行的规则指令并行的规则n n两条指令的总长度不能超过两条指令的总长度不能超过6 6个字节个字节n n在指令的执行过程中不存在操作器、地址产生单元、总线在指令的执行过程中不存在操作器、地址产生单元、总线等资源冲突等资源冲突n n其中一条指令必须有并行使能位或两条指令符合软其中一条指令必须有并行使能位或两条指令符合软- -双并行双并行条件条件3.2 TMS320C55X的指令系统一、C55X指令的并行执行n n不能使用并行方式的情况不能使用并行方式的情况 n n使用立即数寻址方式使用立即数寻址方式 n n例如:例如:例如:例如:*abs16(#k16)*abs16(#k16);;*(#k23)*(#k23);;port(#k16)port(#k16);;*ARn(K16)*ARn(K16);;*+ARn(K16)*+ARn(K16);;*CDP(K16)*CDP(K16);;*+CDP(K16) *+CDP(K16) n n条件跳转、条件调用、中断、复位等程序控条件跳转、条件调用、中断、复位等程序控制指令制指令n n例如:例如:例如:例如:BCC P24, condBCC P24, cond;;CALLCC P24, condCALLCC P24, cond;;IDLEIDLE;;INTR k5INTR k5;;RESETRESET;;TRAP k5 TRAP k5 n n使用下列指令或者操作修饰符使用下列指令或者操作修饰符n n例如:例如:例如:例如:mmap( )mmap( );;port( )port( );;
3.2 TMS320C55X的指令系统二、TMS320C55XDSP的汇编指令TMS320C55X DSPTMS320C55X DSP的汇编指令指令集中使用的术语、符号和缩写的汇编指令指令集中使用的术语、符号和缩写的汇编指令指令集中使用的术语、符号和缩写的汇编指令指令集中使用的术语、符号和缩写 指令集中使用的运算符指令集中使用的运算符指令集中使用的运算符指令集中使用的运算符 n n算术运算指令算术运算指令 n n加法指令加法指令 n n加法指令有几点说明:加法指令有几点说明:n n如果目的操作数是累加器如果目的操作数是累加器ACxACx,在,在D D单元的单元的ALUALU中进行运算操中进行运算操作;作;n n如果目的操作数是辅助或临时寄存器如果目的操作数是辅助或临时寄存器TAxTAx,在,在A A单元的单元的ALUALU中中进行运算操作;进行运算操作;n n如果目的操作数是存储器(如果目的操作数是存储器(SmemSmem),在),在D D单元的单元的ALUALU中进行中进行运算操作;运算操作;n n如果是移位指令(如果是移位指令(1616位立即数移位除外),在位立即数移位除外),在D D单元移位器中单元移位器中进行运算操作进行运算操作n n状态位状态位 n n影响指令执行的状态位有:影响指令执行的状态位有:CARRYCARRY,,C54CMC54CM,,M40M40,,SATASATA,,SATDSATD,,SXMD SXMD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n状态位的含义见本书的状态位的含义见本书的附录附录C C::TMS320C55XTMS320C55X的状态寄存器的状态寄存器。
加加加加法法法法指指指指令令令令 n n举例:举例:举例:举例:ADD *AR3+, T0, T1 ADD *AR3+, T0, T1 ;;AR3AR3间接寻址得到的间接寻址得到的内容与内容与T0T0的内容相加,结果装入的内容相加,结果装入T1T1,并将,并将AR3AR3增增1 1 执行前T0 0302 3300 0 0 EF00数据存储器0302hAR3 T1CARRYT0 0303 3300 2200 1 EF00数据存储器0302hAR3 T1CARRY执行后n n举例:举例:举例:举例: ADD *AR1< n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n指令指令减减减减法法法法指指指指令令令令 n n举例:举例:举例:举例: SUB uns(*AR1), BORROW, AC0, AC1 SUB uns(*AR1), BORROW, AC0, AC1将将CARRYCARRY位求反,位求反,AC0AC0减去由减去由AR1AR1寻址得到的寻址得到的内容及内容及CARRYCARRY的内容,并将结果装入的内容,并将结果装入AC1AC1 n n条件减法条件减法 n n指令指令 n nSUBC Smem, [ACx,] ACySUBC Smem, [ACx,] ACyif ((ACx – (Smem << #15)) >= 0)if ((ACx – (Smem << #15)) >= 0)ACy = (ACx – (Smem << #15)) << #1 + 1ACy = (ACx – (Smem << #15)) << #1 + 1elseelseACy = ACx << #1 ACy = ACx << #1 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有: SXMD SXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVyACOVy,,CARRYCARRYn n举例:举例:举例:举例: SUBC *AR1, AC0, AC1 SUBC *AR1, AC0, AC1 如果如果 (AC0 – (*AR1)<< #15) >= 0 (AC0 – (*AR1)<< #15) >= 0,则,则AC1 = (AC0 – (*AR1) << AC1 = (AC0 – (*AR1) << #15)<< #1 + 1#15)<< #1 + 1,否则,否则AC1 = AC0 << #1 AC1 = AC0 << #1 n n条件加减法条件加减法 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,SATDSATD,,SXMDSXMD,,TC1TC1,,TC2TC2 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVyACOVy,,CARRY CARRY n n举例:举例:举例:举例: ADDSUBCC *AR1, AC0, TC2, AC1 ADDSUBCC *AR1, AC0, TC2, AC1 如果如果 TC2 = 1 TC2 = 1 ,则,则AC1= AC0+(*AR1<<#16AC1= AC0+(*AR1<<#16,,否则否则AC1= AC0AC1= AC0--(*AR1(*AR1))<<#16<<#16n n乘法指令乘法指令 n n指令指令——在在D D单元的单元的MACMAC中完成操作中完成操作 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,M40M40,,RDMRDM,,SATD SATD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy乘乘乘乘法法法法指指指指令令令令 n n举例:举例: MPY AC1, AC0 ; AC1=AC0*AC1 n n乘加指令乘加指令 n n指令指令——在在D D单元的单元的MACMAC中完成操作中完成操作 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,M40M40,,RDMRDM,,SATDSATD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVy ACOVy 乘乘乘乘加加加加指指指指令令令令n n举例举例1:: MACMR *AR1, *CDP, AC2 AC2=AC2+AC2=AC2+((*AR1*AR1))* *((*CDP *CDP ))n n举例举例举例举例2 2:::: MACMR uns(*AR2+), uns(*AR3+), AC3 MACMR uns(*AR2+), uns(*AR3+), AC3 AC3=AC3=((*AR2*AR2))+ +((*AR3*AR3))+AC3 +AC3 ,,AR2=AR2+1AR2=AR2+1,,AR3=AR3+1 AR3=AR3+1 n n乘减指令乘减指令 n n指令指令——在在D D单元的单元的MACMAC中完成操作中完成操作 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,M40M40,,RDMRDM,,SATDSATD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVy ACOVy 乘乘乘乘减减减减指指指指令令令令 n n举例:举例: MASR T1, AC0, AC1 MASR T1, AC0, AC1 AC1=AC1-AC0*T1 AC1=AC1-AC0*T1 n n双乘加双乘加/ /减指令减指令 n n指令指令——利用利用D D单元的两个单元的两个MACMAC在一个周期内同时在一个周期内同时执行两个乘法或乘加执行两个乘法或乘加/ /减运算减运算 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,M40M40,,RDMRDM,,SATDSATD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVy ACOVy n n举例:举例:举例:举例: MASR40 uns(*AR0), uns(*CDP), AC0 MASR40 uns(*AR0), uns(*CDP), AC0 :: MACR40 uns(*AR1), uns(*CDP), AC1:: MACR40 uns(*AR1), uns(*CDP), AC1;;AC0=AC0-unsAC0=AC0-uns((*AR0*AR0))*uns*uns((*CDP*CDP)) ;;AC1=AC1-unsAC1=AC1-uns((*AR1*AR1))*uns*uns((*CDP*CDP)) n n双双1616位算术指令位算术指令 n n指令指令——利用利用D D单元中的单元中的ALUALU在一个周期内完成两个在一个周期内完成两个并行的算术运算,包括一加一减、一减一加、两并行的算术运算,包括一加一减、一减一加、两个加法或两个减法个加法或两个减法 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY 双双1 16 6位位算算术术指指令令n n举例:举例: ADDSUB T1, *AR1, AC1 ADDSUB T1, *AR1, AC1 ;;AC1AC1((39-1639-16))= =((*AR1*AR1))+T1 +T1 ;; || AC1 || AC1((15-015-0))= =((*AR1*AR1))-T1 -T1 n n比较和选择极值指令比较和选择极值指令 n n指令指令——在在D D单元的单元的ALUALU中完成两个并行中完成两个并行1616位极值选位极值选择操作和一个择操作和一个4040位极值选择操作位极值选择操作 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,SATDSATD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVwACOVw,,CARRY CARRY 比比较较和和选选择择极极值值指指令令n n举例:举例: MAXDIFF AC0, AC1, AC2, AC1 n n最大最大/ /最小值指令最小值指令 n n指令指令n nMAX [src,] dstMAX [src,] dst;;dst = max(src,dst)dst = max(src,dst)n nMIN [src,] dstMIN [src,] dst;;dst = min(src,dst) dst = min(src,dst) n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:CARRY CARRY n n举例举例举例举例1 1:::: MAX AC2, AC1 MAX AC2, AC1 ;由于(;由于(AC2AC2))< <((AC1AC1),所以),所以AC1AC1保保持不变且持不变且 CARRY CARRY状态位置状态位置1 1 n n举例举例举例举例2 2:::: MIN AC1, T1 MIN AC1, T1 ;由于;由于T1 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例举例1:: CMP AC1 = = T1, TC1 CMP AC1 = = T1, TC1 ;由于;由于AC1AC1((15-015-0))=T1=T1,所以将,所以将TC1TC1置置1 1 n n条件移位指令条件移位指令 n n指令指令n nSFTCC ACx, TCxSFTCC ACx, TCx ;;If ACx(39–0) = 0 then TCx = 1If ACx(39–0) = 0 then TCx = 1;;If ACx(31–0) has two sign If ACx(31–0) has two sign bits thenbits then;;ACx =ACx(31–0)<<#1 and TCx=0ACx =ACx(31–0)<<#1 and TCx=0;;else TCx=1else TCx=1n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例举例举例举例n nSFTCC AC0, TC1 SFTCC AC0, TC1 n n带符号移位指令带符号移位指令 n n指令指令——移位指令中的移位值由立即数、移位指令中的移位值由立即数、SHIFTWSHIFTW或或TxTx内容确定内容确定n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,SATASATA,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n举例举例1:: SFTS T2, #1 SFTS T2, #1 ;;T2=T2<<#1 T2=T2<<#1 n n举例举例2:: SFTSC AC0, #–5, AC1 SFTSC AC0, #–5, AC1 ;;AC1=AC0>>5AC1=AC0>>5,移出的位装入,移出的位装入CARRYCARRY n n修改辅助寄存器(修改辅助寄存器(MARMAR)指令)指令 n n指令指令n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ST2-55 ST2-55 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例n nAADD #255, T0AADD #255, T0;;T0=T0+255T0=T0+255n nAMOV #255, AR0 AMOV #255, AR0 ;;AR0=255AR0=255n nAMAR *AR3+ AMAR *AR3+ ;;AR3=AR3+1AR3=AR3+1n n修改堆栈指针指令修改堆栈指针指令n n指令指令AADD K8,SP AADD K8,SP ;;SP = SP + K8 SP = SP + K8 n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例AADD #127, SP AADD #127, SP ;;SP=SP+127SP=SP+127n n隐含并行指令隐含并行指令 n n指令指令n n加加- -存储、乘加存储、乘加/ /减减- -存储、加存储、加/ /减减- -存储、装载存储、装载- -存储和乘加存储和乘加/ /减减- -装载装载 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,C54CMC54CM,,M40M40,,RDMRDM,,SATDSATD,,SXMDSXMD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY 隐隐含含并并行行指指令令 n n举例:举例:举例:举例: MPYMR *AR0+, T0, AC1 MPYMR *AR0+, T0, AC1 :: MOV HI(AC0 << T2), *AR1+ :: MOV HI(AC0 << T2), *AR1+ ;;AC1=AC1=((*AR0*AR0))*T0*T0,因为,因为FRCT=1FRCT=1,,AC1=rndAC1=rnd((AC1*2AC1*2),),;; AC0=AC0< n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n举例:举例:举例:举例: ABDST *AR0+,*AR1,AC0,AC1 ABDST *AR0+,*AR1,AC0,AC1 ;;AC1 = AC1 + |HI(AC0)|AC1 = AC1 + |HI(AC0)|;;AC0 =AC0 =((((*AR0*AR0)) << #16 << #16)) – –((((*AR1*AR1)) << #16 << #16));;AR0=AR0+1AR0=AR0+1n n绝对值指令绝对值指令 n n指令指令n nABS [src,] dst ABS [src,] dst ;;dst = |src|dst = |src|n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,SATASATA,,SATDSATD,,SXMDSXMD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,CARRY CARRY n n举例举例举例举例n n ABS AR1, AC1 ABS AR1, AC1 ;;AC1=|AR1| AC1=|AR1| n nFIRFIR滤波指令滤波指令 n n指令指令n nFIRSADD Xmem, Ymem, Cmem, ACx, ACy FIRSADD Xmem, Ymem, Cmem, ACx, ACy ;;ACy = ACy ACy = ACy + (ACx(32-16) * Cmem)+ (ACx(32-16) * Cmem);;ACx = (Xmem << #16) + (Ymem << #16)ACx = (Xmem << #16) + (Ymem << #16)n n FIRSSUB Xmem, Ymem, Cmem, ACx, ACy FIRSSUB Xmem, Ymem, Cmem, ACx, ACy ;;ACy = ACy = ACy + (ACx (32-16)* Cmem)ACy + (ACx (32-16)* Cmem);;ACx = (Xmem << #16) – (Ymem << #16)ACx = (Xmem << #16) – (Ymem << #16)n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,C54CMC54CM,,M40M40,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n举例:举例:举例:举例: FIRSADD *AR0, *AR1, *CDP, AC0, AC1 FIRSADD *AR0, *AR1, *CDP, AC0, AC1 ;;AC1 = AC1 + AC0(32-16) * (*CDP)AC1 = AC1 + AC0(32-16) * (*CDP);;AC0 =( (*AR0) << #16) + ((*AR1) << #16) AC0 =( (*AR0) << #16) + ((*AR1) << #16) n n最小均方(最小均方(LMSLMS)指令)指令 n n指令指令n nLMS Xmem, Ymem, ACx, ACy LMS Xmem, Ymem, ACx, ACy ;;ACy = ACy + (Xmem * Ymem)ACy = ACy + (Xmem * Ymem);;:: ACx = rnd(ACx + (Xmem << #16)) :: ACx = rnd(ACx + (Xmem << #16)) n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,C54CMC54CM,,M40M40,,RDMRDM,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n举例:举例:举例:举例: LMS *AR0, *AR1, AC0, AC1 LMS *AR0, *AR1, AC0, AC1 ;;AC1 = AC1 + (*AR0AC1 = AC1 + (*AR0)) *(*AR1) *(*AR1) ;;:: AC0 = rnd(AC0 + ((*AR0:: AC0 = rnd(AC0 + ((*AR0))<< #16)) << #16)) n n补码指令补码指令 n n指令指令n nNEG [src,] dst NEG [src,] dst ;;dst = –src dst = –src n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:M40M40,,SATASATA,,SATDSATD,,SXMDSXMD n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,CARRY CARRY n n举例举例举例举例n n NEG AC1, AC0 NEG AC1, AC0 ;;AC0= -AC1 AC0= -AC1 n n归一化指令归一化指令 n n指令指令n nMANT ACx, ACy MANT ACx, ACy ;;ACy = mant(ACx),ACy = mant(ACx),n n:: NEXP ACx, Tx :: NEXP ACx, Tx ;;Tx = –exp(ACx)Tx = –exp(ACx)n nEXP ACx, Tx EXP ACx, Tx ;;Tx = exp(ACx)Tx = exp(ACx)n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例n n MANT AC0, AC1 MANT AC0, AC1 ;;AC1AC1等于等于AC0AC0的尾数,即将的尾数,即将AC0AC0右移右移与与3232位带符号数对齐后的值;位带符号数对齐后的值;n n:: NEXP AC0, T1 :: NEXP AC0, T1 ;;T1T1等于将等于将AC0AC0的的MSBMSB左移与左移与3232位带符位带符号数对齐所移位的次数值号数对齐所移位的次数值 n n饱和和舍入指令饱和和舍入指令 n n指令指令n nSAT[R] [ACx,] ACy SAT[R] [ACx,] ACy ;;ACy = saturate(rnd(ACx))ACy = saturate(rnd(ACx))n nROUND [ACx,] ACy ROUND [ACx,] ACy ;;ACy=rnd(ACx)ACy=rnd(ACx)n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,RDMRDM,,SATDSATD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVy ACOVy n n举例举例举例举例1 1:::: ROUND AC0, AC1 ROUND AC0, AC1 ;;AC1=AC0+8000hAC1=AC0+8000h,且,且1616个最低有效位清个最低有效位清0 0 n n举例举例举例举例2 2:::: SAT AC0, AC1 SAT AC0, AC1 ;将;将3232位的位的AC0AC0饱和,将饱和后的值饱和,将饱和后的值FF 8000 0000FF 8000 0000装入装入AC1AC1 n n平方差指令平方差指令 n n指令指令n nSQDST Xmem, Ymem, ACx, ACy SQDST Xmem, Ymem, ACx, ACy ;;ACy = ACy + (ACx(32-16) * ACx(32-16)) ACy = ACy + (ACx(32-16) * ACx(32-16)) ;;ACx = (Xmem << #16) – (Ymem << #16) ACx = (Xmem << #16) – (Ymem << #16) n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:FRCTFRCT,,SMULSMUL,,C54CMC54CM,,M40M40,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,ACOVyACOVy,,CARRY CARRY n n举例:举例:举例:举例: SQDST *AR0, *AR1, AC0, AC1 SQDST *AR0, *AR1, AC0, AC1 ;;AC1=AC1+AC1=AC1+((AC0AC0((32-1632-16))))* *((AC0AC0((32-1632-16)))) ;;AC0=AC0=((((*AR0*AR0))<<16<<16))- -((((*AR1<<16) *AR1<<16) n n位操作指令位操作指令 n n位域比较指令位域比较指令 n n指令指令 n nBAND Smem, k16, TCxBAND Smem, k16, TCx ;;If( ((Smem) AND k16 ) == 0)If( ((Smem) AND k16 ) == 0),,TCx = 0TCx = 0 ;;else TCx = 1else TCx = 1n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例:举例:举例:举例:n nBAND *AR3, #00A0h, TC2BAND *AR3, #00A0h, TC2 ;由于;由于(*AR3) AND k16 = = 0(*AR3) AND k16 = = 0,,TC2 = 0 TC2 = 0 n n位计数位计数 n n指令指令 n nBCNT ACx,ACy,TCx,Tx BCNT ACx,ACy,TCx,Tx ;;Tx = (ACx AND ACy)Tx = (ACx AND ACy)中中1 1的个数的个数;若;若TxTx为奇数,则为奇数,则TCx=1TCx=1,反之,反之TCx=0TCx=0n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例:举例:举例:举例:n nBCNT AC1, AC2, TC1, T1 BCNT AC1, AC2, TC1, T1 ;;T1=T1=((AC1AC1与与AC2AC2)中)中1 1的个数,个数是奇数,的个数,个数是奇数,TC1=1 TC1=1 n n位域扩展和抽取指令位域扩展和抽取指令 n n指令指令 n n位域抽取:位域抽取:n nBFXTR k16, ACx, dst BFXTR k16, ACx, dst ;从;从LSBLSB到到MSBMSB将将k16k16中非零位中非零位对应的对应的ACxACx中的位抽取出来,依次放到中的位抽取出来,依次放到dstdst的的LSBLSB中中 n n位域扩展:位域扩展:n nBFXPA k16, ACx, dst BFXPA k16, ACx, dst ;将;将ACxACx的的LSBLSB放到放到k16k16中非零中非零位对应的位对应的dstdst中的位置上,;中的位置上,;ACxACx的的LSBLSB个数等于个数等于k16k16中中1 1的个数的个数 n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无n n举例举例举例举例1 1:::: BFXTR #8024h, AC0, T2 BFXTR #8024h, AC0, T2 ;从最低位到最高位将(;从最低位到最高位将(8024h8024h)中非零位对应的)中非零位对应的AC0AC0中的位抽取出来中的位抽取出来依次放到依次放到T2T2的的LSBLSB中中 n n举例举例举例举例2 2:::: BFXPA #8024h, AC0, T2BFXPA #8024h, AC0, T2 ;;将将AC0AC0的的LSBLSB放到放到#8024h#8024h中非零位对应的中非零位对应的T2T2中的位置上,中的位置上, AC0 AC0的的LSBLSB个个数等于数等于#8024h#8024h中中1 1的个数的个数 n n存储器位操作指令存储器位操作指令 n n指令指令n n测试、清零、置位和取反测试、清零、置位和取反 n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例举例举例举例1 1:::: BTST AC0, *AR0, TC1 BTST AC0, *AR0, TC1 ;位地址;位地址AC0AC0((3-03-0))=8=8,测试(,测试(*AR0*AR0)的位)的位8 8,结果存入,结果存入TC1 TC1 n n举例举例举例举例2 2:::: BTSTNOT #12, *AR0, TC1BTSTNOT #12, *AR0, TC1 ;测试(;测试(*AR0*AR0)的位)的位1212,结果存入,结果存入TC1TC1,并将(,并将(*AR0*AR0)的位)的位1212取取反反 n n寄存器位操作指令寄存器位操作指令 n n指令指令n n测试、置位、清零和取反操作测试、置位、清零和取反操作 n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例举例举例举例1 1:::: BTST @#12, T0, TC1 BTST @#12, T0, TC1 ;测试;测试T0T0的位的位1212,将结果存入,将结果存入TC1TC1 n n举例举例举例举例2 2:::: BNOT AR1, T0BNOT AR1, T0 ;;将将T0T0中由中由AR1AR1确定的位确定的位1212取反取反 n n举例举例举例举例3 3:::: BTSTP AR1(T0), AC0BTSTP AR1(T0), AC0 ;;由基地址(由基地址(AR1AR1)和偏移地址)和偏移地址T0T0确定的位地址为确定的位地址为3939,测试,测试AC0AC0中的第中的第3939位并存入位并存入TC1TC1;测试;测试AC0AC0中的第中的第4040位并存入位并存入TC2 TC2 n n状态位设置指令状态位设置指令 n n指令指令n n置位和清零置位和清零 n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:已经选择的状态位执行指令后会受影响的状态位:已经选择的状态位 n n举例举例举例举例1 1:::: BCLR AR1LC, ST2_55BCLR AR1LC, ST2_55 ;由标号;由标号AR1LCAR1LC确定位地址为确定位地址为1 1,将,将ST2-55ST2-55的位的位2 2清零清零 n n举例举例举例举例2 2:::: BSET CARRY, ST0_55BSET CARRY, ST0_55 ;由标号;由标号CARRYCARRY确定位地址为确定位地址为1111,将,将ST0-55ST0-55的位的位1111置位置位 n n举例举例举例举例3 3:::: BSET CARRYBSET CARRY ;将;将ST0-55ST0-55的的CARRYCARRY(位(位1111)置位)置位 n n扩展辅助寄存器操作指令扩展辅助寄存器操作指令扩展辅助寄存器操作指令扩展辅助寄存器操作指令 n n指令指令n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ST2-55ST2-55。 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例1 1:::: n nAMAR *AR1+, XAR0 AMAR *AR1+, XAR0 ;将(;将(*AR1*AR1)的内容装入)的内容装入XAR0XAR0,且,且AR1AR1增增1 1 n nAMOV #7FFFFFh AMOV #7FFFFFh ;将;将2323位的值(位的值(7FFFFFh)7FFFFFh)装入装入XAR0 XAR0 n n MOV dbl(*AR3), XAR1 MOV dbl(*AR3), XAR1 ;将(;将(*AR3*AR3)低)低7 7位和(位和(* *((AR3+1AR3+1))))的的1616位装入位装入XAR1 XAR1 n n位操作指令位操作指令 n n位域比较指令位域比较指令 n n指令指令 n nBAND Smem, k16, TCxBAND Smem, k16, TCx ;;If( ((Smem) AND k16 ) == 0)If( ((Smem) AND k16 ) == 0),,TCx = 0TCx = 0 ;;else TCx = 1else TCx = 1n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:TCx TCx n n举例:举例:举例:举例:n nBAND *AR3, #00A0h, TC2BAND *AR3, #00A0h, TC2 ;由于;由于(*AR3) AND k16 = = 0(*AR3) AND k16 = = 0,,TC2 = 0 TC2 = 0 n n逻辑运算指令逻辑运算指令 n n按位与按位与/ /或或/ /异或异或/ /取反指令取反指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例1 1:::: NOT AC0, AC1NOT AC0, AC1 ;将;将AC0AC0的内容取反,结果存入的内容取反,结果存入AC1AC1 n n举例举例举例举例2 2:::: AND AC0, AC1 AND AC0, AC1 ;;AC1=AC1 AND AC0AC1=AC1 AND AC0 n n举例举例举例举例3 3::::AC0 << #4, AC1 AC0 << #4, AC1 ;将;将AC0AC0逻辑左移逻辑左移4 4位后与位后与AC1AC1相或,结果存相或,结果存入入AC1 AC1 n n举例举例举例举例4 4::::XOR AC0, AC1 XOR AC0, AC1 ;;AC1=AC1 XOR AC0 AC1=AC1 XOR AC0 n n逻辑移位逻辑移位 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:CARRY CARRY n n举例举例举例举例1 1:::: SFTL AC1, #1 SFTL AC1, #1 ;;AC1=AC1<<#1AC1=AC1<<#1,由于,由于M40=0M40=0,,CARRY=CARRY=位位3131,且位(,且位(39-3239-32)清零)清零 n n举例举例举例举例2 2:::: SFTL AC0, T0, AC1 SFTL AC0, T0, AC1 ;;AC1=AC0<<-6AC1=AC0<<-6,由于,由于M40=0M40=0,所以,所以((39-3239-32)清零)清零 n n循环移位循环移位 n n指令指令 n nROL BitOut, src, BitIn, dst ROL BitOut, src, BitIn, dst ;将;将BitInBitIn移进移进srcsrc的的LSBLSB,,srcsrc被移出被移出的位存放于的位存放于BitOutBitOut,此时的结果放到,此时的结果放到dstdst中中ROR BitIn, src, ROR BitIn, src, BitOut, dst BitOut, dst ;将;将BitInBitIn移进移进srcsrc的的MSBMSB,,srcsrc被移出的位存放于被移出的位存放于BitOutBitOut,此时的结果放到,此时的结果放到dstdst中中n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:CARRYCARRY,,M40M40,,TC2TC2。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:CARRYCARRY,,TC2 TC2 n n举例:举例:举例:举例:n nROL CARRY, AC1, TC2, AC1 ROL CARRY, AC1, TC2, AC1 ;将;将TC2TC2移入移入AC1AC1的的LSBLSB,将,将AC1AC1中位中位3131移出放入移出放入 CARRY CARRY,由于,由于M40=0M40=0,将,将AC0AC0((39-39-3232)清零)清零 n n移动指令移动指令 n n累加器、辅助寄存器或临时寄存器装载、存累加器、辅助寄存器或临时寄存器装载、存储、移动和交换储、移动和交换n n存储单元间的移动及初始化存储单元间的移动及初始化n n入栈和出栈入栈和出栈n nCPUCPU寄存器装载令、存储和移动寄存器装载令、存储和移动n n累加器、辅助寄存器或临时寄存器装载、存储、累加器、辅助寄存器或临时寄存器装载、存储、移动和交换指令移动和交换指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:C54CMC54CM,,M40M40,,RDMRDM,,SATDSATD,,SXMDSXMD。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVx ACOVx n n举例举例举例举例1 1::::n nMOV AC0, *(#0E10h) MOV AC0, *(#0E10h) ;将;将AC0AC0((15-015-0)存入)存入E10hE10h单元单元 n n举例举例举例举例2 2:::: MOV AC0, AC1 MOV AC0, AC1 ;;AC1=AC0AC1=AC0,由于,由于M40=0M40=0,在,在3131位检测到位检测到溢出,将溢出,将ACOV1ACOV1置位置位 n n举例举例举例举例3 3:::: MOV #248, AC1 MOV #248, AC1 ;;AC1= #248AC1= #248n n举例举例举例举例4 4::::S, T0 S, T0 ,将,将AR4AR4的内容和的内容和T0T0的内容互换的内容互换 n n存储单元间的移动及初始化存储单元间的移动及初始化 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例1 1:::: DELAY *AR1+ DELAY *AR1+ ;;* *((AR3+1AR3+1))=*=*((AR3AR3),),AR3=AR3+1AR3=AR3+1 n n举例举例举例举例2 2:::: MOV *CDP, *(#0500h) MOV *CDP, *(#0500h) ;将(;将(*CDP*CDP)存入)存入0500h0500h处处 n n入栈和出栈指令入栈和出栈指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无 n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例1 1:::: POP AC0, AC1 POP AC0, AC1 ;;AC0AC0((15-015-0))= =((SPSP),),AC1AC1((15-015-0))= =((SP+1SP+1)) ((39-1639-16)不变,)不变,SP=SP+2SP=SP+2 n n举例举例举例举例2 2:::: PSH AR0, AC1 PSH AR0, AC1 ;;SP=SP-2SP=SP-2,(,(SPSP))=AR0=AR0,(,(SP+1SP+1))=AC1=AC1((15-015-0)) n nCPUCPU寄存器装载、存储和移动指令寄存器装载、存储和移动指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:无影响指令执行的状态位有:无n n执行指令后会受影响的状态位:无执行指令后会受影响的状态位:无 n n举例举例举例举例1 1::::n nMOV T1, BRC1 MOV T1, BRC1 ;;BRC1=BRS1=T1 BRC1=BRS1=T1 n nMOV SP, *AR1+ MOV SP, *AR1+ ;(;(*AR1*AR1))= =((SPSP),),AR1=AR1+1 AR1=AR1+1 n n程序控制指令程序控制指令 n n跳转指令跳转指令n n调用与返回指令调用与返回指令n n中断与返回指令中断与返回指令n n重复指令重复指令 n n跳转指令跳转指令 n n指令指令——包括条件跳转、无条件跳转包括条件跳转、无条件跳转 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ACOVxACOVx,,CARRYCARRY,,C54CMC54CM,,M40M40,,TCxTCx。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVx ACOVx 跳跳转转指指令令 n n举例举例举例举例1 1:::: BCC branch, TC1BCC branch, TC1 ;;TC1 = 1TC1 = 1,程序跳转到标号,程序跳转到标号branchbranch处执行处执行 n n举例举例举例举例2 2:::: B AC0B AC0 ;;PC=AC0PC=AC0((23-023-0))n n调用与返回指令调用与返回指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ACOVxACOVx,,CARRYCARRY,,C54CMC54CM,,M40M40,,TCxTCxn n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVx ACOVx n n举例举例n nCALLCC (subroutine), AC1 >= #2000h CALLCC (subroutine), AC1 >= #2000h ;;AC1 >= #2000hAC1 >= #2000h,,PC=PC=子程序地址子程序地址 n nRETCC ACOV0 = #0 RETCC ACOV0 = #0 ;;ACOV0=0ACOV0=0,,PC=PC=调用子程序的返回地址调用子程序的返回地址 n n中断与返回指令中断与返回指令 n n指令指令n nINTR k5 INTR k5 ;程序执行中断服务子程序,中断向量地址由中断;程序执行中断服务子程序,中断向量地址由中断向量指针(向量指针(IVPDIVPD)和)和5 5比比n nTRAP k5 TRAP k5 ;特无符号数确定;特无符号数确定 n nRETI RETI ;;PC=PC=中断任务的返回地址中断任务的返回地址 n n状态位状态位n n影响指令执行的状态位有:无。 影响指令执行的状态位有:无n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:INTM INTM n n重复指令重复指令 n n指令指令 n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ACOVxACOVx,,CARRYCARRY,,C54CMC54CM,,M40M40,,TCxTCxn n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVx ACOVx n n举例举例举例举例1 1:::: RPT CSR RPT CSR ;下一条指令执行;下一条指令执行CSR+1CSR+1次次 MACM *AR3+, *AR4+, AC1MACM *AR3+, *AR4+, AC1n n其他程序控制指令其他程序控制指令 n n指令指令n nXCC [label, ]cond XCC [label, ]cond ;当条件满足时,执行下面一条指令;当条件满足时,执行下面一条指令 n nXCCPART [label, ]cond XCCPART [label, ]cond ;当条件满足时,执行下面两条并行;当条件满足时,执行下面两条并行指令指令 n nIDLE IDLE ;空闲;空闲n nNOP NOP ;空操作,;空操作,PC=PC+1PC=PC+1n nNOP_16 NOP_16 ;空操作,;空操作,PC=PC+2PC=PC+2n nRESET RESET ;软件复位;软件复位n n状态位状态位n n影响指令执行的状态位有:影响指令执行的状态位有:ACOVxACOVx,,CARRYCARRY,,C54CMC54CM,,M40M40,,TCxTCx,,INTMINTM。 n n执行指令后会受影响的状态位:执行指令后会受影响的状态位:ACOVxACOVx,,IFR0IFR0,,IFR1IFR1,,ST0-ST0-5555,,ST1-55ST1-55,,ST2-55 ST2-55 n n举例举例举例举例1 1:::: XCC branch, *AR0 != #0 XCC branch, *AR0 != #0 ;;AR0AR0不等于不等于0 0,执行下一条指令,执行下一条指令((ADDADD)) ADD *AR2+, AC0 ADD *AR2+, AC0 ;;AC0=AC0+AC0=AC0+((*AR2*AR2),),AR2=AR2+1AR2=AR2+1。





