为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

DSP 课件 第五章 TMS320LF240x汇编指令系统

2021-02-19 120页 ppt 1MB 28阅读

用户头像 机构认证

爱赢

公司经营范围:网络软件设计、制作、图文设计、影视制作(编辑)

举报
DSP 课件 第五章 TMS320LF240x汇编指令系统第5章TMS320LF240x汇编指令系统4.1.1指令集分类(1)累加器、算术和逻辑指令(26条)(2)辅助寄存器和数据页面指针指令(6条)(3)TREG、PREG和乘法指令(20条)(4)转移指令(12条)(5)控制指令(15条)(6)I/O和存储器操作指令(8条)4.1汇编指令集概述4.1.2指令常用符号定义ACC累加器。AR辅助寄存器。ARXLAR和SAR指令中使用的3位的值,表示要加载(LAR)或要保存(SAR)哪个辅助寄存器的值。BITX在BIT测试指令中出现,代表4位二进制数,表示测试数据存储单元的某一位,若测试...
DSP 课件 第五章 TMS320LF240x汇编指令系统
第5章TMS320LF240x汇编指令系统4.1.1指令集分类(1)累加器、算术和逻辑指令(26条)(2)辅助寄存器和数据页面指针指令(6条)(3)TREG、PREG和乘法指令(20条)(4)转移指令(12条)(5)控制指令(15条)(6)I/O和存储器操作指令(8条)4.1汇编指令集概述4.1.2指令常用符号定义ACC累加器。AR辅助寄存器。ARXLAR和SAR指令中使用的3位的值,表示要加载(LAR)或要保存(SAR)哪个辅助寄存器的值。BITX在BIT测试指令中出现,代表4位二进制数,表示测试数据存储的某一位,若测试D1位,则BITX为1110(1110B=15-1)。CM一个2位的值。CM=00----测试是否当前AR=AR0CM=01----测试是否当前ARAR0CM=11----测试是否当前AR≠AR0IAAAAAAA左边的I表示1位,反映使用直接寻址(I=0)还是间接寻址(I=1)。当使用直接寻址时,7个A是数据存储器地址的低7位;对于间接寻址,7个A是控制辅助寄存器操作的7位。IIIIIIII短立即寻址中使用的8位常数。IIIIIIIIILDP指令在短立即寻址中使用的9位常数。IIIIIIIIIIIIIMPY指令在短立即寻址中使用的13位常数。INTR#表示数值0~31的5位值。INTR指令使用该值把程序转移到32个中断矢量地址之一。PMSPM指令拷贝到状态寄存器ST1中PM位的2位值。SHF3位的左移值。SHFT4位的左移值。TP条件执行指令用来表示以下4种条件的2位值。BIO引脚为低---TP=00;TC=1----TP=01;TC=0---TP=10;无条件---TP=11。ZLVCZLVC两个4位字段,每位表示以下条件:ACC=0---Z;ACC<0---L;溢出---V;进位---C+1word双字操作码的第2个字。包含16位常数。根据指令不同该常数可能是长立即数、程序存储器地址、I/O端口或I/O映射的寄存器地址。4.2.1语法指令助记符;操作数缺省指令助记符dma[,shift];左移0~15位直接寻址指令助记符dma,16;左移16位直接寻址指令助记符ind[,shift[,ARn]];左移0~15位间接寻址指令助记符ind,16[,ARn];左移16位间接寻址指令助记符#k;短立即寻址指令助记符#lk[,shift];左移0~15位长立即寻址4.2指令句法描述说明(1)指令助记符是指令中的关键字,表示本条指令的操作类型,不能缺省。(2)指令助记符与操作数之间要用空格分开,各操作数之间要用“,”分开,操作数可缺省。黑体字符表示在该类型的指令中必须写出的字符,其他字符为变量,指令中用数字和字符代替。各字符的含义如下:dma数据存储器地址的低7位,与数据页面指针(DP)构成一个完整的16位数据存储器地址。shift左移0~15位。ARnn为0~7,ARn指定下次的辅助寄存器。Ind选择*、*+、*-、*0+、*0-、*BR0+、*BR0-7中符号之一。#立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数;数值前面不带“#”,表示该数值为数据存储器地址的低7位。k8位短立即数lk16位长立即数[,x]操作数x是可选项[x1[,x2]]操作数x1、x2是可选项4.2.2操作操作部分提供了指令完成的操作序列,即描述当指令执行时所进行的处理过程。(r)寄存器或存储单元r的内容x→y数值x被赋予寄存器或存储单元yr(n:m)寄存器或存储单元r中的位n到位m(r(n:m))寄存器或存储单元r中的位n到位m的内容nnh指出nn表示一个十六进制数4.2.3举例ADD*+,0,AR04.3指令集1、取累加器绝对值指令ABS句法:ABS功能:对累加器ACC的内容取绝对值后送回累加器,并将进位位C清0操作:①(PC)+1→PC;②|(ACC)|→ACC;0→C例1:ABS2、带移位的加法指令ADD句法:ADDdma[,shift]ADDdma,16ADDind[,shift[,ARn]]ADDind,16[,ARn]ADD#kADD#lk[,shift]功能:将被寻址的数据存储器单元的内容或立即数左移0~16位后加到累加器中,移位时低位填0,高位填0(SXM=0)或符号扩展(SXM=1)操作:①(PC)+1→PC;②(ACC)+((数据存储器地址)*2shift)→ACC或(ACC)+k→ACC或(ACC)+lk*2shift→ACC例2:ADD1,1;设DP=6,则数据存储器地址为0300h~037Fh,(ACC)+(数据存储器0301h)*21→ACC例3:ADD*+,0,AR0例4:ADD#1h例5:ADD#1111h,13、带进位加法指令ADDC句法:ADDCdmaADDCind[,ARn]功能:将被寻址的数据存储器单元的内容与累加器的内容及进位位相加,结果送至累加器。操作:①(PC)+1→PC;②(ACC)+(数据存储器地址)+(C)→ACC状态位:影响C和OV位,受OVM状态位影响,不受SXM影响。若相加结果产生进位,则C=1,否则C=0。例6:ADDCDAT300例7:ADDC*-,AR4;(设OVM=0),将当前AR指定的数据存储单元的内容与累加器的内容及进位位相加后送累加器,并将当前AR的内容减1,然后将AR4指定为下次的辅助寄存器。4、加法指令ADDS句法:ADDSdmaADDSind[,ARn]功能:将被寻址的数据存储器单元的内容与累加器的内容相加,结果送至累加器。操作:①(PC)+1→PC;②(ACC)+(数据存储器地址)→ACC状态位:影响C和OV位,受OVM状态位影响,不受SXM影响。若相加结果产生进位,则C=1,否则C=0。例8:ADDS6;设DP=5,则数据存储器地址为280h~2FFh,(ACC)+(数据存储器286h)→ACC例9:ADDS*5、加法指令ADDT句法:ADDTdmaADDTind[,ARn]功能:将被寻址的数据存储器单元的内容左移0~15位后与累加器的内容相加,结果送至累加器,移位时低位填0,高位填0(SXM=0)或符号扩展(SXM=1)。操作:①(PC)+1→PC;②(ACC)+((数据存储器地址)*2(TREG(3~0)))→ACC状态位:影响C和OV位,受OVM和SXM状态位影响。若相加结果产生进位,则C=1,否则C=0。例10:ADDT7Eh;(设DP=4,则数据存储器地址为0200h~027Fh,设SXM=0)(ACC)+(027Eh)*2(TREG(3~0))→ACC例11:ADDT*-,AR46、辅助寄存器增量指令ADRK句法:ADRK#k功能:将8位立即数按右对齐方式与当前辅助寄存器AR的内容相加,结果送至当前辅助寄存器。操作:①(PC)+1→PC;②(当前AR)+8位立即数→当前AR例12:ADRK#80h7、与指令AND句法:ANDdmaANDind[,ARn]AND#lk[,shift]AND#lk,16功能:如果使用直接或间接寻址,累加器的低16位和被寻址的数据存储器单元的内容进行逻辑与操作,结果送累加器的低16位,累加器的高16位清0。如果使用长立即数寻址,则16位长立即数左移0~16位后和32位的累加器相与,结果送累加器。操作:①(PC)+1→PC;②(ACC(15~0))AND(数据存储器地址)→ACC(15~0);0→ACC(31~16)③(ACC(31~0))ANDlk*2shift→ACC例13:AND16;设DP=4,则数据存储器地址为0200h~027Fh,(ACC(15~0))AND(0210h)→ACC(15~0)0→ACC(31~16)例14:AND*例15:AND#00FFh,48、加法指令APAC句法:APAC功能:将累加器内容与移位后的乘积寄存器的内容相加,结果送至累加器。PREG的移位方式由ST1中PM为确定。操作:①(PC)+1→PC;②(ACC)+移位后的(PREG)→ACC状态位:影响C和OV位,受OVM和PM状态位影响。不受SXM状态位影响。例16:APAC9、无条件转移指令B句法:Bpma[,ind[,ARn]]功能:程序无条件转移到指令指定的程序存储器地址(pma),并按指令要求修改当前辅助寄存器和ARP的内容.操作:①pma→PC(pma可以是符号地址或数值地址);②按指令要求修改当前AR和ARP。例17:B1610、按累加器内容转移指令BACC句法:BACC功能:程序无条件转移到累加器的低16位指定的地址中执行。操作:ACC(15~0)→PC例18:BACC;(设累加器的值是0203h)0203h→PC,程序从0203h处继续执行。11、辅助寄存器不等于零转移指令BANZ句法:BANZpma[,ind[,ARn)]功能:如果当前辅助寄存器(AR)的内容不为0,则程序转移到pma指定的程序存储器地址处继续执行;如果当前AR的内容为0,则执行下一条指令;修改当前AR的内容。操作:①若(当前AR)≠0,则pma→PC,否则(PC)+2→PC;②按指令要求的方式修改当前的AR的内容和ARP,若不指定修改当前的AR的方式,则当前AR减半(若将当前AR作为循环计数器,可执行(当前AR)+1次循环).例19:BANZPGM012、条件转移指令BCND句法:BCNDpma,cond1[,cond2][…]操作数中的cond1,cond2,…为需满足的条件。功能:如果指令中指定的条件都满足,则程序转移到指令给出的程序存储器地址(pma),只要有一个条件不满足就顺序执行下面的指令。操作:如果cond1,cond2,…均满足,则pma→PC,否则PC+2→PC。注意:有些条件是不能组合在一起使用的。例20:BCNDPGM191,LEQ,C13、测试指令BIT句法:BITdma,bitcode;直接寻址BITind,bitcode[,ARn];间接寻址功能:把数据存储单元中被指定位(即测试位)的值送到状态寄存器ST1中的TC位,即如果测试该位为1,则TC就置1。指令中bitcode的值与数据存储单元被指定的测试位的关系是:bitnumber=15-bitcode操作:①(PC)+I→PC;②(数据存储单元bitnumber)→TC。状态位:影响TC状态位。例20:BIT*,0,AR114、测试指令BITT(由TREG指定bitcode)句法:BITTdma;直接寻址BITTind[,ARn];间接寻址功能:把数据存储单元中被指定位的值送到状态寄存器ST1中的TC位。TREG低4位(D3~D0)表示的bitcode值与数据存储单元被指定的测试位(bitnumber)的关系与BIT指令相同。操作:①(PC)+I→PC:②(数据存储单元bitnumber)→TC。状态位:影响TC位。例21:BITT00h15、数据存储器串传送指令BLDD句法:BLDD源地址,目的地址;通用格式BLDD#lk,dma;源地址为长立即数,直接寻址BLDD#lk,ind[,ARn];源地址为长立即数,间接寻址BLDDdma,#lk;目的地址为长立即数,直接寻址BLDDind,#lk[,ARn];目的地址为长立即数,间接寻址功能:将“源地址”指定的数据存储器单元中的内容传送到“目的地址”指定的数据存储器单元中。操作:注意:①复位时,重复计数器的RPTC的值为0,可用RPT指令装入计数值(N)。RPT指令与间接寻址方式的BLDD指令一起使用,可传送数据存储器中的N+1个字。②执行BLDD指令时,无论长立即数代表源地址,还是代表目的地址,均保存在PC中,每次重复时PC加1,从而访问一串地址(目的地址或源地址)。另一串数据的地址(源地址或目的地址)通过间接寻址,按指令指定的方式修改当前AR和ARP,从而实现两块数据区的数据传送。③如果使用直接寻址,因数据地址是常量,不能改变,所以重复执行BLDD指令的结果是仅对一个单元写数据或对一串地址写同一个数据。④源数据串和目的数据串不要求同在片内或同在片外。⑤当与RPT指令一起使用时,一旦启动了RPT流水线,BLDD就变成了单周期指令,此时中断被禁止.例22:BLDD#300h,20h;设DP=6,则数据存储器地址为0300h~037Fh,将0300h的内容传送到320h例23:BLDD*+,#321h,AR316、程序存储器串传送指令BLPD句法:BLPD源地址,目的地址;通用格式BLPD#pma,dma;源地址为长立即数,直接寻址BLPDdma,ind[,ARn];源地址为长立即数,间接寻址功能:将“源地址”指定的程序存储单元中的内容传送到“目的地址”指定的数据存储单元中。操作:如指令15,将第二框中“lk→PC‘’改为“pma→PC‘,其余均相同。注意:①BLPD指令与BLDD指令有许多相似之处,BLDD指令中的注意事项①④⑤同样适合于BLPD指令。②与BLDD不同的是,BLPD指令的源地址必须使用长立即数,并固定指向程序存储器,而目的地址可由数据存储器的地址或辅助寄存器指定。当重复BLPD指令时,源地址保存在PC中,每次重复PC加1。目的地址若由辅助寄存器指定,则按指令指定方式修改,从而实现程序区到数据区的数据传送。目的地址若由数据存储器地址(常数)确定,则不能修改,此时重复执行BLPD指令将没有什么意义.例24:BLPD#800h,00h;设DP=6,则数据存储器地址为0300h~037Fh,将程序存储器800h的内容传送到300h例25:BLPD#800h,*,AR717、无条件调用指令(由累加器指定)CALA句法:CALA功能:无条件调用由累加器低16位指定的子程序。利用该指令可根据计算结果调用子程序。操作:①(PC)+1→堆栈栈顶TOS;②ACC的低16位→PC。例26:CALA18、子程序调用指令CALL句法:CALLpam[,ind1,ARn];间接寻址功能:无条件调用由指令操作数指定的子程序,并按指令要求修改当前辅助寄存器和ARP的内容。操作:①(PC)+2→堆栈栈顶TOS;②pam→PC;③按指令要求修改(当前AR)和(ARP)。例27:CALL191,*+,AR019、条件调用指令CC句法:CCpma,cond1[,cond2][,…]功能:如果指定的条件都满足,则调用pma指定则子程序。操作:如果cond1,cond2,…都满足,则(PC)+2→堆栈栈顶TOS,pam→PC,否则PC+2。例28:CC0BFh,LEQ,C;若累加器的内容小于或等于0,且进位位为1,则调用程序地址0BFh处的子程序,只要有一个条件不满足,则继续执行CC下面的指令。20、清0指令CLRC句法:CLRCcontrolbit操作数中controlbit选择以下控制位之一:C状态寄存器STI中的进位位(D9);CNF状态寄存器STl中的RAM配置控制位(D12)INTM状态寄存器ST0中的中断模式位(D9);OVM状态寄存器ST0中的溢出模式位(D11):SXM状态寄存器STl中的符号扩展模式位(DiO);TC状态寄存器STl中的测试/控制标志位(D11);XF状态寄存器STl中的XF引脚状态位(D4):功能:把指定的控制位清0。操作:①(PC)+1→PC;②0→controlbit。21、累加器取反指令CMPL句法:CMPL功能:将累加器中的内容逻辑取反。操作:①(PC)+1→PC:②(ACC)→ACC。例28:CMPL22、比较指令CMPR句法:CMPRCM功能:将当前辅助寄存器的内容与AR0的内容进行比较:若CM=0,则比较是否(当前AR)=(AR0);若CM=I,则比较是否(当前AR)<(AR0);若CM=2,则比较是否(当前AR)>(AR0);若CM=3,则比较是否(当前AR)≠(AR0);如果条件为真,则ST1中的TC位置1,如果条件为假,则TC清0.操作:①(PC)+1→PC,。②完成由CM值(0-3)指定的当前AR和AR0的比较,若为真,则1→TC,若为假,则0→TC。注意:比较时辅助寄存器的值作为无符号整数看待。23、数据移动指令DMOV句法:DMOVdma;直接寻址DMOVind[,ARn];间接寻址功能:将指定的数据存储单元的内容复制到地址加1的单元。操作:①(PC)+1→PC数据;②(数据存储器地址)→数据存储地址+1。状态位:受CNF状态位影响。注意:①DMOV指令用于片内任何配置的数据存储器RAM块,数据的移动可以跨越块的边界。②DMOV指令不能用于外部数据存储器,如果指令指定了外部存储器地址,执行时只读指定的存储器单元,但不进行其他操作。③数据移动功能对于实现数据信号处理中的Z-1延时很有用。例29:DMOV*,AR1;将当前辅助寄存器指定的数据存储器单元内容复制到地址加1单元,然后将下次辅助寄存器指定为AR124、暂停指令IDLE句法:IDLE功能:程序停止执行,DSP芯片进入低功耗模式,直到发生硬件复位、硬件NMI或未被屏蔽的硬件中断(外部的或内部的)。操作:①(PC+1)→PC;②等待硬件中断。状态位:受INTM的影响。注意:①如果因NMI或复位使芯片退出低功耗模式,则执行0024h或0000h单元的中断服务程序。②不管状态寄存器ST0中的中断模式位INTM为0或1,未被屏蔽的中断均可使芯片退出低功耗模式,但退出后的操作则取决于INTM。INTM=0,程序转移到相应的中断服务程序;INTM=I,执行IDLE后面的指令。25、输入指令IN句法:INdma,PA;直接寻址INind,PA[,ARn];间接寻址操作数中PA表示16位I/O端口或I/O映射的寄存器地址。功能:从I/O端口读入16位数据,送到指定的数据存储单元中。重复指令(RPT)与IN指令一起使用可连续传送I/O空间的一串字到数据存储器。操作:①(PC)+2→PC;②(PA)→数据存储器地址。例30:IN*,5h;从端口地址为5h的外设中读入一个字,并将该字保存到由当前辅助寄存器指定的数据存储单元中26、软中断指令INTR句法:INTRk操作数中k为数值0~31,表示中断矢量号。功能:程序控制转换到与k对应的中断矢量单元(该单元存放的转移指令可引导相应的中断服务程序)。操作:①(PC)+1→堆栈:②k值对应的中断矢量地址→PC。状态位:指令影响INTM状态位,但不受INTM的影响。注意:①INTR指令是软中断指令,利用该指令可从程序的任意位置转移到任意一种中断服务程序中。②INTM位和中断屏蔽位都不影响INTR指令。⑧当响应INTR中断时,INTM位置1,禁止可屏蔽中断,但不影响IFR标志。27、装载累加器指令LACC句法:LACCdma[,shift];直接寻址,左移0~15位LACCdma,16;直接寻址,左移16位LACCind[,shin[,ARn]];间接寻址,左移0~15位LACCind,16[,ARn];间接寻址,左移16位LACC#lk[,shift];长立即数寻址,左移0~15位功能:将指定的数据存储单元的内容或16位常数左移后送累加器。移位时低位填0,高位由SXM决定,SXM=1,用符号扩展;SXM=0,则填0。操作:①(PC)+1→PC或(PC)+2→PC(长立即数寻址);②(数据存储器地址)X2shift→ACC或lkX2shift→ACC(长立即数寻址)。状态位:指令受SXM影响。例31:LACC*,4;(设SXM=0)将当前AR指定的数据存储器的内容左移4位后送累加器28、装载累加器低16位指令LACL句法:LACLdma;直接寻址LACLind[,ARn];间接寻址LACL#k;短立即数寻址功能:将指定的数据存储单元的内容或用0扩展的8位常数送到累加器的低16位,累加器的高16位填0。操作:①(PC)+1→PC;②直接或间接寻址(数据存储器地址)→ACC(15~0);0→ACC(31~16);或短立即数寻址k→ACC(7~0);0→ACC(31~8)。状态位:不受SXM影响。例32:LACL#10h;将10h送到累加器的低8位,累加器的D31~D8填029、装载累加器指令LACT(移位次数由TREG确定)句法:LACTdma;直接寻址LACTind[,ARn];间接寻址功能:将指定的数据存储单元的内容左移后送到累加器。左移次数由TREG的低4位确定(可移动0~l5位)。移位时低位填0,高位由SXM决定。操作:①(PC)+1→PC;②(数据存储器地址)X2(TREG(3:0))→ACC。状态位:受SXM影响。例33:LACT*-,AR330、装载辅助寄存器指令LAR句法:LARARx,dma;直接寻址LARARx,ind[,ARn];间接寻址LARARx,#k;短立即数寻址LARARx,#lk;长立即数寻址操作数中x为数值0~7,表示要装载的辅助寄存器。功能:将指定的数据存储单元中的内容或8位、16位常数送到指令指定的辅助寄存器ARx中。不论SXM为何值,所指定的常数均为无符号整数。操作:①(PC)+1→PC;②直接或间接寻址(数据存储器地址)→ARx;或短立即数寻址k→ARx(ARx的高位填0);或长立即数寻址:lk→ARx。注意:如果指令使用间接寻址,且指令指定的AR与ARP所指定的AR相同,LAR指令仅对该AR进行装载操作,而不对其进行增或减量修改。30、装载辅助寄存器指令LAR句法:LARARx,dma;直接寻址LARARx,ind[,ARn];间接寻址LARARx,#k;短立即数寻址LARARx,#lk;长立即数寻址操作数中x为数值0~7,表示要装载的辅助寄存器。功能:将指定的数据存储单元中的内容或8位、16位常数送到指令指定的辅助寄存器ARx中。不论SXM为何值,所指定的常数均为无符号整数。操作:①(PC)+1→PC;②直接或间接寻址(数据存储器地址)→ARx;或短立即数寻址k→ARx(ARx的高位填0);或长立即数寻址:lk→ARx。注意:如果指令使用间接寻址,且指令指定的AR与ARP所指定的AR相同,LAR指令仅对该AR进行装载操作,而不对其进行增或减量修改。例34:LARAR4,*-例35:LARAR0,16;设DP=6,则数据存储器地址为0300h~037Fh,将310h单元的内容传送到AR0中31、装载DP指令LDP句法:LDPdma;直接寻址LDPind[,ARn];间接寻址LDP#k;短立即数寻址功能:将指定的数据存储单元中的低9位或9位立即数值送到状态寄存器ST0中的DP(LST指令也可加载DP)。操作:①(PC)+1→PC;②(数据存储器地址)的低9位→DP(直接或间接寻址)或k→DP(短立即数寻址)。状态位:影响DP。例36:LDP*,AR532、装载PREG高16位指令LPH句法:LPHdma;直接寻址LPHind[,ARn];间接寻址功能:将指定的数据存储单元的内容送到PREG的高16位,PREG的低16位不变。在中断和子程序调用时,可用LPH指令恢复PREG的高位字。操作:①(PC)+1→PC;②(数据存储器地址)→PREG(31~16)。例37:LPH*,AR6;将当前AR指定的数据存储单元的内容送到PREG高16位,AR6为下次的辅助寄存器。33、装载状态寄存器指令LST句法:LST#m,dma;直接寻址LST#m,ind[,ARn];间接寻址操作数m=0表示要装载ST0,m=1表示要装载ST1。功能:将指定的数据存储单元中的内容送状态寄存器ST0或ST1操作:①(PC)+1→PC:②(数据存储器地址)→状态寄存器STm。当装载ST0时,ST0的D10位和D9位不受装载影响,保持原值;当装载ST1时,ST1的D8~D5位、D3位、D2位保持1不变,数据的D15~D13位同时也装载到ST0的ARP中。状态位:影响ARB,ARP,OVOVM,DP,CNF,TC,SXM,C,XF,PM。不影响INTM。注意:在间接寻址方式中,如果在操作数中指定了下次的辅助寄存器,则该指定`无效,仍由数据存储单元内容中的高3位装载ARP。例38:MAR*,AR0;0→ARP,下次辅助寄存器为AR0LST#0,*,AR1;将当前辅助寄存器AR0指定的数据存储单元的内容送到ST0中。原ST0的D10和D9仍为原值。指定AR1为下次辅助寄存器的操作忽略,同时原来的ARP值也不复制到ARB中。例39:LST#1,00h34、装载TREG指令LT句法:LTdma;直接寻址LTind[,ARn];间接寻址功能:将指定的数据存储单元的内容送到TREG中。操作:①(PC)+1→PC;②(数据存储器地址)→TREG。例40:LT24;(设DP=8,则数据存储器地址为0400h~047Fh)将418h单元的内容送TREG。35、装载TREG和乘积累加指令LTA句法:LTAdma;直接寻址LTAind[,ARn];间接寻址功能:将指定的数据存储单元的内容送到TREG;按PM状态位指定的方式对乘积寄存器(PREG)的内容进行移位,并把移位后的值与累加器相加,结果送累加器。若相加结果有进位,则C=1;若相加结果无进位,则C=0。操作:①(PC)+1→PC;②(数据存储器地址)→TREG;③(ACC)+移位后的(PREG)→ACC。状态位:受PM和OVM影响,影响C和OV。例41:LTA36;(设DP=6,则数据存储器地址为0300h~037Fh;PM=0,不移位)将324h单元的内容送TREG,并将PREG的内容与累加器相加,结果送累加器36、装载TREG及数据移动,乘积累加指令LTD句法:LTDdma;直接寻址LTDind[,ARn];间接寻址功能:将指定的数据存储单元的内容送到TREG和该地址加1的单元中;按PM状态位指定的方式对乘积寄存器(PREG)的内容进行移位,并把移位后的值与累加器相加,结果送累加器。若相加结果有进位,则C=1;若相加结果没有进位,则C=0。操作:①(PC)+1→PC;②(数据存储器地址)→TREG;③数据存储器地址)→数据存储器地址十1;④(ACC)+移位后的(PREG)→ACC。状态位:受PM和OVM影响,影响C和OV。注意:①该指令适用于所有配置为数据存储器的片内RAM,并可以跨越相邻块的边界连续进行数据移动。②如果将LTD指令用于外部数据存储器,其作用与LTA相同,即不执行操作③(不作数据移动)。例42:LTD*,AR3:(设PM=0)将当前AR指定的数据存储单元的内容送TREG和该地址内容相加,结果送累加器,并指定AR3为下次AR37、装载TREG和累加器指令LTP句法:LTPdma;间接寻址LTPind[,ARn];直接寻址功能:将指定的数据存储单元的内容送到TREG。并将PREG的内容按PM状态位指定的方式移位后送到累加器中。操作:①(PC)+1→PC;②(数据存储器地址)→TREG;③移位后的(PREG)→ACC。状态位:受PM影响。例43:LTP36;(设DP=6,则数据存储器地址为0300h~037Fh。PM=0,乘积不移位)将324h单元的内容送TREG,并将乘积寄存器(PREG)的内容送ACC38、装载TREG和乘积累减指令LTS句法:LTSdma;直接寻址LTSind[,ARn];间接寻址功能:将指定的数据存储单元的内容送TREG;再用累加器的内容减去移位后(PM状态位指定的方式)的PREG的内容,结果送累加器。如果相减的结果产生借位,则进位位C清0,若无进位,则C置1。操作:①(PC)+1→PC;②(数据存储器地址)→TREG;③(ACC)-移位后的(PREG)→ACC。状态位:受PM和OVM影响,影响C和OV。例44:LTS*,AR2;(设PM=0,则乘积不移位)将当前AR指定的数据存储单元的内容送TREG;累加器的内容减去乘积寄存器的内容,结果送累加器,AR2为下次AR39、累加-乘指令MAC句法:MACpma,dma;直接寻址MACpma,ind[,ARn];间接寻址功能:①将前次乘积(PREG的内容)按PM指定的方式移位后结果送累加器。与累加器相加;如果相加产生进位,则C=I:若结果未产生进位,则C=0。②将指定的数据存储单元的内容送到TREG。③将TREG中数据存储单元的内容乘以指定的程序存储器地址中的内容。④每重复MAC指令一次,在PC中的程序存储器地址加1。因此可以访问程序存储器中的一串操作数。如果使用间接寻址指定数据存储器地址,则每次重复时就可能访问新的数据存储器地址。如果使用直接寻址,指定的数据存储器地址是常数,重复时不对其进行修改。⑤重复执行MAC指令可对两组数据(或一组数据与一个常数)进行乘-累加运算。重复时,RPT流水线一旦启动,它就变成了单周期指令。状态位:受PM和OVM影响,影口向C和OV。注意:MAC指令所寻址的数据和程序存储器单元可以是任意非保留的片内或片外存储单元。例45:MAC0FF0h,02h;(设DP=6,则数据存储器地址为0300h~037Fh,PM=0,乘积不移位,CNF=1,RAMB0为程序存储器)将累加器的内容与乘积寄存器的内容相加,结果送累加器,然后将数据存储器302h单元的内容与程序存储器FF00h单元内容相乘,结果送PREG例46:MAC0FF00h,*,AR6;(设PM=0,CNF=1)将累加器的内容与乘积寄存器的内容相加,结果送累加器,然后将当前AR指定的数据存储单元308h的内容与程序存储器FF00h单元内容相乘,结果送PREG,并指定下次的辅助寄存器为AR540、带数据移动的累加-乘指令MACD句法:MACDpma,dma;直接寻址MACDpma,ind[,ARn];间接寻址功能:如果指定的数据存储器是片内RAM,则MACD指令在MAC指令功能的基础上多一条数据移动功能,如果MACD指令寻址存储器映射的寄存器或外部数据存储器,则MACD指令与MAC指令功能完全相同。状态位:受PM和OVM影响,影响C和OV。例47:MACD0FF00h,08h;(设DP=6,则地址为0300h~037Fh;PM=0,乘积不移位;CNF=I,RAMB0配置为程序存储器)`该指令将累加器的内容与乘积寄存器的内容相加,结果送累加器,然后将数据存储器308h单元的内容与程序存储器FF00h单元的内容相乘,结果送PREG,再将308h的内容送309h单元中。41、修改当前AR和ARP指令MAR句法:MARdma;直接寻址MARind[,ARn];间接寻址功能:在直接寻址方式下,MAR指令的作用同NOP指令一样,进行空操作。在间接寻址方式下,按指令指定的方式修改辅助寄存器的值和ARP的值,并将原来的ARP的值复制到状态寄存器ST1的ARB字段中。操作:①(PC)+1→PC:②按指令指定的方式修改当前AR和ARP(只有在间接寻址方式下才执行此操作)。状态位:直接寻址方式下不影响状态位,间接寻址方式下影响ARP和ARB。例48:MAR*+,AR5;将当前辅助寄存器的内容加1,并将5送到ARP,ARP原来的值送到ARB42、乘法指令MPY句法:MPYdma;直接寻址MPYind[,ARn];间接寻址MPY#k;短立即数寻址(k为有符号的13位常数)功能:将TREG的内容乘以指定的数据存储器单元的内容或短立即数,结果放在乘积寄存器(PREG)中。乘以短立即数时,应将13位有符号数值取右对齐,相乘前用符号扩展(无论SXM为何值)。操作:①(PC)+1→PC;②(TREG)X(数据存储器地址)→PREG(直接或间接寻址)或(TREG)Xk→PREG(短立即数寻址)。例49:MPY13;(设DP=8,则地址为400h~47Fh)将TREG的内容与数据存储器400h单元的内容相乘,结果送PREG43、累加·乘指令MPYA句法:MPYAdma;直接寻址MPYAind[,ARn];间接寻址功能:将前次乘积(PREG的内容)按PM指定的方式移位后,与累加器相加,结果送累加器:然后将TREG的内容乘以指定的数据存储单元的内容,结果送乘积寄存器(PREG)。操作:①(PC)+1→PC;②(ACC)+移位后的(PREG)→ACC;③(TREG)X(数据存储器地址)→PREG。状态位:受PM和OVM影响,影响C和OV。例50:MPYA13h;(设DP=6,则数据存储器地址为300h~37Fh,PM=0,乘积不移位)将累加器的内容与乘积寄存器的内容相加,结果送累加器,然后将TREG的内容与数据存储器300h单元的内容相乘,结果送PREG例51:MPYA*,AR444、减·乘指令MPYS句法:MPYSdma;直接寻址MPYSind[,ARn];间接寻址功能:将累加器的内容减去前次乘积(按PM状态位指定的方式移位后的PREG的内容),结果送累加器,有借位时,标志位C清0,无借位C为1。然后将暂存寄存器(TREG)的内容乘以指定的数据存储单元的内容,结果送PREG。操作:①(PC)+1→PC:②(ACC)-移位后的(PREG)→ACC;③(TREG)X(数据存储器地址)→PREG。状态位:受PM和OVM影响,影响C和OV。例52:MPYS13;(设DP=6,则地址为300h~37Fh:设PM=0,则乘积不移位)将累加器的内容与PREG的内容相减,结果送累加器,再将TREG的内容与数据存储器单元30Dh的内容相乘,结果送PREG45、无符号乘法指令MPYU句法:MPYUdma;直接寻址MPYUind[,ARn];间接寻址功能:将暂存寄存器(TREG)中的无符号数与指定的数据存储单元中的无符号数相乘,结果送乘积寄存器(PPEG)。操作:①(PC)+1→PC:②(TREG)X(数据存储器地址)→PREG。注意:①当其他指令把乘积寄存器(PREG)中的值传递到数据存储器或CALU时,需经过乘积移位器的输出。当PM=3(右移6位)时,该移位总要将PRE6的值进行符号扩展。因此,如果要求无符号相乘,则不能使用这种移位模式。②该指令可用于多精度乘法。如两个32位数相乘产生64位乘积。例53:MPYU16;(设DP=4,则地址为0200h~027Fh)将TREG中的无符号数乘以数据存储器210h单元的无符号数,结果送PREG46、累加器取指令NEG句法:NEG功能:将累加器的内容取2的补数,即转换成它的相反数。操作:①(PC)+1→PC:②(ACC)X(-1)→ACC状态位:受OVM影响,影响C和OV。注意:①当对80000000h作NEG操作时,OV位置1。②若OVM=I,累加器的内容被NEG操作转换成7FFFFFFFh若OVM=0,则累加器经过NEG操作后,仍为80000000h。③只要累加器的内容不为0,进位位(C)即清0;累加器的内容为0时,进位位C置1。例54:NEG;(OVM为任意值)将累加器的内容取补47、非屏蔽中断指令NMI句法:NMI功能:将非屏蔽中断矢量地址24h送程序计数器执行非屏蔽中断服务程序。与硬件非屏蔽中断NMI效果相同。操作:①(PC)+1→STACK;②24h→PC;③1→INTM。状态位:不受INTM影响,影响INTM。48、空操作指令NOP句法:NOP功能:NOP指令仅影响PC,不进行其他操作,NOP指令可用于建立流水线和延时。操作:(PC)+1→PC。49、累加器规格化指令NORM句法:NORMind功能:将累加器中的有符号数规格化。把定点数规格化就是把它分成尾数和指数两分。方法如下。①将累计器的最高两位D31和D30作逻辑异或,如果两位相同,说明这是两个符号位(符号扩展),则累计器左移去掉多余的符号位。②按指定的方式修改当前AR以确定指数的大小。对当前AR默认的修改方式为加1。③为了将累加器中的32位数规格化,可能需要多次执行NORM指令。NORM指令可与RPT一起使用以实现多次执行NORM指令。NORM指令对用2的补码表示的正数或负数均适用。状态位:影响TC。注意:NORM指令在流水线的第4阶段(执行阶段)完成对辅助寄存器的操作,而其他指令在流水线的第2阶段(译码阶段)完成对辅助寄存器的操作。因此紧跟在NORM指令后的两条指令不能修改NORM指令所用的辅助寄存器的值和辅助寄存器指针(ARP)的值。例55:NORM*+例56:31位规格化程序MAR*,AR1LARAR1,#0hLOOP:NORM*+BCNDLOOP,NTC例57:15位规格化程序MAR*,AR1LARAR1,#0FhRPT#14NORM*-50、或指令OR句法:ORdma;直接寻址ORind[,ARn];间接寻址OR#lk[,shift];长立即寻址,左移0~15位OR#k,16;长立即寻址,左移16位功能:将累加器的内容和被寻址的数据存储单元的内容(或左移后的长立即数)作“逻辑或”操作,结果送累加器。操作数不足32位的,高位补0:左移时,低位填0。操作:①(PC)+1→PC;②(ACC(15~0))OR(数据存储器的地址)→ACC(15~0)(ACC(31~16))→ACC(31~16)(直接或间接寻址)或(ACC)ORlk*2shift→ACC(长立即数左移0~15位)或(ACC)ORlk*216→ACC(长立即数左移16位)。状态位:指令不受SXM影响。例58:OR*,AR0;当前辅助寄存器指定的数据存储单元的内容与累加器的内容进行“逻辑或”结果送累加器,并将AR0指定为下次的辅助寄存器例59:OR#8111h,851、输出指令OUT句法:OUTdma,PA;直接寻址OUTind,PA[,ARn];间接寻址操作数中的PA为I/O口地址。功能:将被寻址的存储单元的内容送到指定的I/O端口。此时IS线变低,STRB,R/W和READY的定时关系与外部数据存储器的写操作相同。该指令与重复指令一起使用可以连续从数据存储器向I/O空间输出数据。操作:①(PC)+2→PC;②(数据存储器的地址)→PA。例60:OUT0,100h;(设DP=4)将数据存储单元200h中的内容输出到I/O地址为100h的外设中例61:OUT*,100h;将当前AR指定的数据存储单元的内容输出到I/O地址为100h的外设中52、乘积寄存器移位指令PAC句法:PAC功能:按PM状态位指定的方式将乘积寄存器的内容移位,并把移位后的结果送累加器。操作:①(PC)+1→PC;②移位后的PREG→ACC状态位:受PM影响。53、弹栈至累加器指令POP句法:POP功能;将栈顶(TOS)的内容弹出并送到累加器的低16位,堆栈上弹一级。累加器的高16位字为0。操作:①(PC)+1→PC;②(TOS)→ACC(15~0);0→ACC(31~16);堆栈上弹一级。注意:硬件堆栈是后进先出的8个单元。当弹栈发生时,堆栈中的每个值都被复制到上一个高栈单元,栈顶内容移出,栈底的两个字具有相同的值。如果连续弹出的次数多于7次(POP,PODD,RETC,RET指令均弹栈),那么堆栈中的所有值都将相同。没有检查堆栈是否下溢的措施。例62:POP54、弹栈至数据存储器指令POPD句法:POPDdma;直接寻址POPDind[,ARn];间接寻址功能:将栈顶(TOS)的值弹出并传送到指令指定的数据存储单元。堆栈上弹一级。操作:①(PC)+1→PC;②(TOS)→数据存储单元,堆栈上弹一级。例63:POPD10例64:POPD*+,AR155、数据存储器值进栈指令PSHD句法:PSHDdma;直接寻址PSHDind[,ARn];间接寻址功能:堆栈中8个单元的值均向下移动一级,最低一级单元的内容丢失,并将指定的数据存储单元的内容传送到栈顶(TOS)。操作:①(PC)+1→PC;②堆栈下压一级:③(数据存储器地址)→TOS。注意:参照PUSH指令。例65:PSHD127;(设DP=3,则地址为0180h~01FFh)将数据存储器1FFh单元的内容压入堆栈56、累加器低位进栈指令PUSH句法:PUSH功能:将堆栈的内容下移一级,最低一级单元的内容丢失,并将累加器的低16位字压入栈顶(TOS)。操作:①(PC)+1→PC:②堆栈下压一级;③(ACC(15~0))→TOS。注意:硬件堆栈是后进先出的8个单元。如果连续进行8次以上的压栈操作(CALA,CALL,CC,PSHD,PUSH,TRAP,INTR,NMI指令均进行压栈操作),那么最低一级的内容将会丢失。例66:PUSH57、无条件返回指令RET句法:RET功能:将栈顶(TOS)的内容复制到程序计数器(PC)中,堆栈上弹一级。子程序和中断服务程序均以RET指令结束,并返回到原来调用子程序或中断的端点处。例67:RET58、条件返回指令RETC句法:RETCcond1[,cond2][,…]操作数中的cond为需满足的条件,其对应关系见BCND指令。功能:如果指定的条件都满足,则执行RETC指令的操作;若不满足,则继续执行RETC下面的指令。操作:如果cond1,cond2,…都满足,则TOS→PC,堆栈上弹一级;否则(PC)+1→PC。例68:RETCGEQ,NOV59、循环左移指令ROL句法:ROL功能:将累加器的内容连同进位位C循环左移一位,进位位移入累加器的MSB,累加器的LSB移入进位位。操作:①(PC)+1→PC:状态位:影响C,不受SXM影响。例69:ROL60、循环右移指令ROR句法:ROR功能:将累加器的内容连同进位位C循环右移一位,进位位移入累加器的MSB,累加器的LSB移入进位位。操作:①(PC)+1→PC:状态位:影响C,不受SXM影响。例70:ROR61、重复执行下条指令RPT句法:RPTdma;直接寻址RPTind[,ARn];间接寻址RPT#k;短立即数寻址功能:将被寻址的数据存储单元的内容或8位立即数(假设均用N表示)装载到重复计数器(RPTC)中,RPT后面的那条指令将重复执行N+1次,且重复时是不可中断的。重复指令本身不重复。复位时RPTC清0。操作:①(PC)+1→PC;②(数据存储器地址)→RPTC(直接或间接寻址)或k→RPTC(短立即数寻址)。例71:RPT127;(设DP=31,则数据存储器地址为0F58h一0FFFh)将0FFFh单元的内容OCh送入RPTC,RPT下面的那条指令将重复执行13次62、移位并存储累加器高位字指令SACH句法:SACHdma[,shift];直接寻址SACHind[,shift[,ARn]];间接寻址操作数中shift为左移0~7位(缺省为0)。功能:将累加器的内容送到输出移位寄存器后左移0~7位,移位时低位补0,高位丢失(累加器内容保持原值不变)。然后将移位后的高16位数值送到数据存储单元。操作:①(PC)+1→PC;②((ACC)X2shift)的高16位→数据存储单元。状态位:状态位不受SXM影响。例72:SACH0Ah,1;(设DP=4,则数据存储器地址为200h~27Fh)累加器的内容左移1位后将高16位送入20Ah单元63、移位并存储累加器低位字指令SACL句法:SACLdma[,shift2];直接寻址SACLind[,shift2[,ARn]];间接寻址操作数中shift2为左移0~7位(缺省为0)。功能:将累加器的内容送到输出移位寄存器后左移0~7位,移位时低位补0,高位丢失(累加器内容保持原值不变)。然后将移位后的低16位数值送到数据存储单元。操作:①(PC)+1→PC;②((ACC)X2shift2的低16位→数据存储单元。状态位:不受SXM影响例73:SACL0Bh,1;(设DP=4,则数据存储地址为200h~27Fh)累加器的内容左移1位后,将低16位送往20Bh单元64、保存辅助寄存器的指令SAR句法:SARARx,dma;直接寻址SARARx,ind[,ARn];间接寻址操作数中x表示数值0~7,ARx指定待保存的辅助寄存器。功能:将指定的辅助寄存器ARx的内容拷贝到被寻址的数据存储单元,然后再按指令指定的方式修改当前辅助寄存器的内容和ARP的内容(间接寻址时)。操作:①(PC)+1→PC;②(ARx)→数据存储器地址:③若为间接寻址,按指定方式修改当前AR和ARP的内容。例74:SARAR0,30;(设DP=6,则数据存储器的地址为300h~37Fh)将AR0的内容送到数据存储器31Eh65、修改当前辅助寄存器指令SBBK句法:SBBK#k;短立即数寻址操作数中k为8位正整数。功能:将当前辅助寄存器的内容减去1个8位正整数k,结果存在当前辅助寄存器中。操作:①(PC)+1→PC:②(当前AR)-k→当前AR。例75:SBBK#0FFh66、设置控制位指令SETC句法:SETCcontrolbit操作数中controlbit选择以下控制位之一:C状态寄存器ST1中的进位位:CNF状态寄存器ST1中的RAM配置控制位INTM状态寄存器ST0中的中断模式位;OVM状态寄存器ST0中的溢出模式位:SXM状态寄存器ST1中的符号扩展模式位:TC状态寄存器ST1中的测试/控制标志位;XF状态寄存器ST1中的XF引脚状态位。功能:将指定的控制位置1。操作:①(PC)+1→PC:②1→control例76:SETCTC67、累加器左移指令SFL句法:SFL功能:将累加器的32位数值左移1位,累加器的最低位填0,最高位移入进位位C。操作:①(PC)+1→PC;②(ACC(31))→C;(ACC(30~0))→ACC(31~1);0→ACC(0)。状态:影响C,不受SXM的影响。68、累加器右移指令SFR句法:SFR功能:将累加器的32位数右移1位,最低位移入进位位C。若SXM=0,指令进行逻辑右移,最高位填0。若SXM=1,指令进行算术右移,最高位(符号位)不变。操作:①(PC)+1→PC:②若SXM=0,逻辑右移一位。若SXM=1,算术右移一位。状态位:受SXM影响,影响C。例77:SFR(SXM=0,无符号扩展)累加器逻辑右移一位69、累加器和乘积寄存器相减指令SPAC句法:SPAC功能:将累加器的内容减去按PM方式移位后的乘积寄存器(PREG)的内容,结果存入累加器。操作:①(PC)+1→PC;②(ACC)-移位后的(PREG)→ACC。状态位:受PM和OVM影响,影响C和OV。例78:SPAC;(设PM=0,则不移位)将ACC的内容减去PREG的内容,结果送ACC70、保存PREG高16位宇指令SPH句法:SPHdma;直接寻址SPHind[,ARn];间接寻址功能:将乘积寄存器(PREG)的内容按PM状态位指定的方式移位,把移位后的高16位数值存在被寻址的数据存储单元中。PREG和ACC中的内容保持不变。操作:①(PC)+1→PC;②(PREG)移位后的高16位→数据存储器地址。状态位:受PM的影响。例79:SPH*,AR7;(设PM=2,则PREG左移4位,高位丢失,低位填0)将左移4位后的PREG的高16位字送当前AR指定的数据存储单元中,AR7为下一次的辅助寄存器。70、保存PREG低16位字指令SPL句法:SPLdma;直接寻址SPLind[,ARn];间接寻址功能:将乘积寄存器(PREG)的内容按PM状态位指定的方式移位,把移位后的低16位数值存在被寻址的数据存储单元中。PREG和ACC中的内容保持不变。操作:①(PC)+1→PC;②(PREG)移位后的低16位→数据存储器地址。状态位:受PM的影响。例80:SPL5;(设DP=4,数据存储器地址为200h~27Fh,PM=2,则PREG左移4位,高位丢失,低位填0)将左移4位后的PREG的低16位字送205h单元72、存储长立即数至数据存储器指令SPLK句法:SPLK#lk,dma;直接寻址SPLK#lk,ind[,ARn];间接寻址功能:将16位的立即常数送到被寻址的数据存储单元中。操作:①(PC)+1→PC;②lk→数据存储器地址例:SPLK#7FFFh,3;(设DP=6,则数据存储器地址为300h~37Fh)将7FFFh送到303h数据单元中例81:SPLK#1111h,*+,AR4;将1111h送到当前AR指定的数据存储单元中,当前AR内容加1,AR4为下次AR73、设置乘积移位模式指令SPM句法:SPMconstant操作数中的constant为数值0~3,以确定乘积移位模式。功能:将数值constant送到状态寄存器ST1的乘积移位模式PM位(S
/
本文档为【DSP 课件 第五章 TMS320LF240x汇编指令系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索