
《DSP汇编指令》PPT课件.ppt
82页3.3 汇编语言指令汇编语言指令 DSP指令的汇编句法格式为:操作码 [ 操作数 ] ;[ 注释 ]其中操作码为由可描述指令特征的助记符表示,它规定了指令的操作功能;在操作数中定义了该句法表达式中所用的变量以及寻址方式;注释是为便于阅读而对指令作的说明例如,加法指令的句法有:ADD dma[,shift];直接寻址ADD dma,16;左移16位直接寻址ADD ind[,shift[,ARn]];间接寻址ADD ind,16[,ARn];左移16位间接寻址ADD # k;短立即寻址ADD # lk[,shift];长立即寻址以上指令中,ADD表示作加法操作后面的操作数可以是常数,也可以是引用存储器、I/O端口、寄存器地址、指针、移位次数和其他各种常数的汇编表达式2.1 数据传送指令数据传送指令§1、数据存储器至数据存储器间的块传送:§BLDD # lk,dma;源地址为长立即数,直接寻址§BLDD # lk,ind[,ARn];源地址为长立即数,间接寻址§BLDD dma, # lk;目标地址为长立即数,直接寻址§BLDD ind,# lk [,ARn];目标地址为长立即数,间接寻址§该指令将数据存储器中的一块源数据字连续地复制到指定的目的数据存储单元中。
例例2.1 BLDD #300h,,20h;(;(DP=6)(地址为)(地址为0300h~037Fh)) 指令执行前数据存储器0h300h320h0Fh指令执行后数据存储器0h300h320h0h例例2.2 BLDD *+,,#321h,,AR3;; 指令执行前数据存储器01h301h321h0Fh指令执行后数据存储器01h301h321h01h2ARPAR2 301h3ARPAR2302h§2、程序存储器至数据存储器间的块传送:、程序存储器至数据存储器间的块传送:§BLPD # pma,,dma;源地址为长立即数,直接;源地址为长立即数,直接寻址寻址§BLPD #pma,,ind[,,ARn];源地址为长立即数,;源地址为长立即数,间接寻址间接寻址§该指令将程序存储器中的一块数据字连续地复制该指令将程序存储器中的一块数据字连续地复制到指定的目的数据存储单元中,指令中的长立即到指定的目的数据存储单元中,指令中的长立即数数#pma是源首地址(不是数据!!),块的长度是源首地址(不是数据!!),块的长度在重复计数在重复计数RPTC中§该指令不影响任何状态位该指令不影响任何状态位。
例例2.3 BLPD #800h,,00h;(;(DP=6)(地址为)(地址为0300h~037Fh))指令执行前数据存储器0Fh800h300h0h指令执行后数据存储器0Fh800h300h0Fh例例2.4 BLPD #800h,,*,,AR7;;指令执行前程序存储器1111h800h310h0100h指令执行后程序存储器1111h800h310h1111h0ARPAR0 310h7ARPAR0310h数据存储器数据存储器§3、片内数据存储器中的数据传送、片内数据存储器中的数据传送§DMOV dma;直接寻址;直接寻址§DMOV ind[,,ARn];间接寻址;间接寻址§该指令把指定的数据存储器内容复制到该地址加该指令把指定的数据存储器内容复制到该地址加1的地址中,原单元内容保持不变,即数据存储的地址中,原单元内容保持不变,即数据存储器地址器地址→数据存储器地址数据存储器地址+1§DMOV指令只用于片内数据指令只用于片内数据RAM块不能用于块不能用于外部存储器外部存储器§DMOV功能也可由功能也可由LTD和和MACD来实现§该指令受该指令受CNF状态位影响状态位影响例例2.5 DMOV DAT8;(;(DP=6))指令执行前数据存储器43h308h309h2h指令执行后数据存储器43h308h309h43h例例2.6 DMOV *,,AR1;;指令执行前数据存储器40h30Ah30Bh41h指令执行后数据存储器40h30Ah30Bh40h0ARPAR0 30Ah1ARPAR030Ah§4、从端口输入数据、从端口输入数据§IN dma,,PA;直接寻址;直接寻址§IN ind,,PA[,,ARn];间接寻址;间接寻址§PA::16位位I/O端口或端口或I/O影射的寄存器地址。
影射的寄存器地址§IN指令从指令从I/O单元读入单元读入16位值到指定的数据存储单元,位值到指定的数据存储单元,引脚引脚IS非变为低电平,表示访问非变为低电平,表示访问I/O口,口,STRB、、W/R非非和和READY时许与读外部数据存储器一样时许与读外部数据存储器一样§该指令不受任何状态位影响该指令不受任何状态位影响§例例2.7 IN 7,,1000h;;§从口地址为从口地址为1000h的外设读数据,并将数据存至数据存的外设读数据,并将数据存至数据存储器单元储器单元307h((DP=6))§IN *,,5h;;§从口地址为从口地址为5h的外设读取数据,并将数据存于当前辅助的外设读取数据,并将数据存于当前辅助寄存器所指定的数据存储器单元寄存器所指定的数据存储器单元§5、左移后装入累加器:、左移后装入累加器:§LACC dma[,,shift];直接寻址;直接寻址§LACC dma,,16;直接寻址并左移;直接寻址并左移16位位§LACC ind[,,shift[,,ARn]]间接寻址间接寻址§LACC ind,,16[,,ARn];间接寻址并左移;间接寻址并左移16位位§LACC # lk,,[shift];长立即寻址;长立即寻址§第一条到第四条指令将指定的数据存储器地址的内容左第一条到第四条指令将指定的数据存储器地址的内容左移(移(shift位或位或16位)后送入累加器。
位)后送入累加器§第五条指令中的第五条指令中的#lk是一个是一个16位长的数据,不是地址位长的数据,不是地址该条指令将数据左移后送入累加器该条指令将数据左移后送入累加器§在移位时,低位填在移位时,低位填0;高位受状态为;高位受状态为SXM的影响;若的影响;若SXM=1,则进行符号扩展;若,则进行符号扩展;若SXM=0,则不进行符号,则不进行符号扩展,填扩展,填0即可§例例2.9 LACC 6h,,4;(;(DP=8:地址:地址0400h~047Fh,,SXM=0))指令执行前数据存储器01h406hACC012345678h指令执行后数据存储器01h406hACC10hCXCX例例2.10 LACC *,,4;(;(SXM=0))指令执行前数据存储器0FFh300hACC012345678h指令执行后数据存储器0FFh300hACC0FF0h2ARPAR2 0300h2ARPAR20300hCXCX§6、装载累加器低位并清累加器高位:、装载累加器低位并清累加器高位:§LACL dma;直接寻址;直接寻址§LACL ind[,,ARn];间接寻址;间接寻址§LACL # k;短立即寻址;短立即寻址§第一条和第二条指令被寻址数据存储器单元的内第一条和第二条指令被寻址数据存储器单元的内容装入累加器的低容装入累加器的低16位,累加器的高位填位,累加器的高位填0。
第第三条指令将三条指令将8位短立即数位短立即数#k扩展为扩展为16位(高位补位(高位补0)并装入累加器的低)并装入累加器的低16位,累加器的高位填位,累加器的高位填0§无论无论SXM为何状态,该指令都不进行符号扩展为何状态,该指令都不进行符号扩展§例例2.11 LACL 1;(;(DP=6))指令执行前数据存储器0h301hACC7FFFFFFFh指令执行后数据存储器0h301hACC0hCXCX§LACL *—,,AR4;;指令执行前数据存储器00FFh401hACC7FFFFFFFh指令执行后数据存储器00FFh401hACC000000FFh0ARPAR0 401h4ARPAR2400hCXCX§7、按、按TREG规定的左移后装入累加器低位:规定的左移后装入累加器低位:§LACT dma;直接寻址;直接寻址§LACT ind[,,ARn];间接寻址;间接寻址§该指令将数据存储单元中的值左移后装入累加器该指令将数据存储单元中的值左移后装入累加器左移位数由寄存器左移位数由寄存器TREG最低最低4位决定,可左移位决定,可左移0~15位§该指令受状态位该指令受状态位SXM的影响,移位时,若的影响,移位时,若SXM=1,则累加器高位进行符号扩展;若,则累加器高位进行符号扩展;若SXM=0,则高位填零。
则高位填零§例例2.14 LACT 1;(;(DP=6,,SXM=0))指令执行前数据存储器1376h301hACC98F7EC83h指令执行后数据存储器1376h301hACC13760hCXCX14hTREG14hTREG§例例2.15 LACT *—,,AR3;(;(SXM=1))指令执行前数据存储器0FF00h310hACC98F7EC83h指令执行后数据存储器0FF00h310hACCFFFFFE00h1ARPAR1 310h3ARPAR130FhCXCX11hTREG11hTREG§8、装载辅助寄存器:、装载辅助寄存器:§LAR ARx,,dma;直接寻址;直接寻址§LAR ARx,,ind[,,ARn];间接寻址;间接寻址§LAR ARx,,# k;短立即寻址;短立即寻址§LAR ARx,,# lk;长立即寻址;长立即寻址§第第1、、2条指令将指定的数据存储器地址中的内容装入指条指令将指定的数据存储器地址中的内容装入指定的辅助寄存器地址(定的辅助寄存器地址(ARx)§第第3、、4条指令将条指令将8/16位的常量装入指定的辅助寄存器地位的常量装入指定的辅助寄存器地址(址(ARx)。
无论)无论SXM为何值,指定的常量无符号处理为何值,指定的常量无符号处理§LAR和和SAR(存储辅助寄存器)指令可在自程序调用或(存储辅助寄存器)指令可在自程序调用或中断处理时用来装载和存储辅助寄存器若一个辅助寄中断处理时用来装载和存储辅助寄存器若一个辅助寄存器没有用于间接寻址,则存器没有用于间接寻址,则LAR和和SAR指令可将该辅助指令可将该辅助寄存器用作附加的存储寄存器,从而可实现在不影响累寄存器用作附加的存储寄存器,从而可实现在不影响累加器的前提下依次交换数据存储器单元中数加器的前提下依次交换数据存储器单元中数 §例例2.16 LAR AR0,,10;(;(DP=6)) 指令执行前数据存储器18h310hAR063h指令执行后数据存储器18h310hAR018h§例例2.17 LAR AR4,,*—;指令中指定的;指令中指定的AR与与ARP指令的指令的AR相同,相同,则不减则不减 指令执行前数据存储器32h300hAR4300h指令执行后数据存储器32h300hAR432h4ARP4ARP§例例2.18 LAR AR4,,#01h;;指令执行前AR40FF09h指令执行后AR401h§9、装载数据页指针:、装载数据页指针:§LDP dma;直接寻址;直接寻址§LDP ind[,,ARn];间接寻址;间接寻址§LDP # k;短立即寻址;短立即寻址§第第1、、2条指令将指定的数据存储器单元的低条指令将指定的数据存储器单元的低9位位((LSB)装入状态寄存器)装入状态寄存器ST0的数据存储页指针(的数据存储页指针(DP)。
§第第3条指令将条指令将9位立即数装入状态寄存器位立即数装入状态寄存器ST0的数据存储的数据存储页指针(页指针(DP)§DP也可由也可由LST指令装入指令装入§在直接寻址方式中,在直接寻址方式中,DP提供提供9位页面地址(位于高端),位页面地址(位于高端),指令中指定的指令中指定的7位数为偏移点至(位于低端)以形成位数为偏移点至(位于低端)以形成可被指令寻址的可被指令寻址的16位数据存储器地址位数据存储器地址 §例例2.20 LDP 127;(;(DP=511,地址为,地址为FF80h~FFFFh))指令执行前数据存储器FEDChFFFFhDP1FFh指令执行后数据存储器FEDChFFFFhDP0DCh§例例2.21 LDP # 0h;; 指令执行前DP1FFh指令执行后DP0h§例例2.22LDP *,,AR5;;指令执行前数据存储器06h300hDP1FFh指令执行后数据存储器06h300hDP06h4ARPAR4 0300h5ARPAR40300h§10、装载乘积寄存器高位:、装载乘积寄存器高位:§LPH dma;直接寻址;直接寻址§LPH ind[,,ARn];间接寻址;间接寻址§这两条指令将指定的数据存储器地址内容装入寄这两条指令将指定的数据存储器地址内容装入寄存器的高存器的高16位。
位§P寄存器的低位不受影响寄存器的低位不受影响§LPH指令对于中断和子程序调用后恢复指令对于中断和子程序调用后恢复P寄存器寄存器高位的内容特别有用高位的内容特别有用 §例例2.23 LPH DAT0;(;(DP=4))指令执行前数据存储器F79Ch200hPREG30079844h指令执行后数据存储器F79Ch200hPREGF79C9844h§例例2.23 LPH *,,AR6;;指令执行前数据存储器F79Ch200hPREG30079844h指令执行后数据存储器F79Ch200hPREGF79C9844h5ARPAR5200h6ARPAR4200h§11、装载状态寄存器:、装载状态寄存器:§LST # m,,dma;直接寻址;直接寻址§LST # m,,ind[,,ARn];间接寻址;间接寻址§LST指令时向状态寄存器指令时向状态寄存器ST0或或ST1装载指定数据存储器的内容装载指定数据存储器的内容若若m=0,则选择,则选择ST0;若;若m=1,则选择,则选择ST1§用用LST指令装载指令装载ST0时,不影响时,不影响ST0的的INTM位该位是可屏蔽中位该位是可屏蔽中断的总屏蔽位,通过指令断的总屏蔽位,通过指令SETC INTM和和CLRC INTM对其操作。
对其操作§虽然虽然LST #0操作向操作向ARP装入新值,但并不影响装入新值,但并不影响ST1寄存器中的寄存器中的ARB字段§在在LST #1操作中,送入操作中,送入ARB中的值也被送入中的值也被送入ARP§若在间接寻址方式下用一操作数来指定下一若在间接寻址方式下用一操作数来指定下一AR值,则该操作数值,则该操作数将被忽略,而将被寻址数据存储器单元所含值的将被忽略,而将被寻址数据存储器单元所含值的3位最高有效位位最高有效位送入送入ARP§状态寄存器中的保留位读出总为状态寄存器中的保留位读出总为1,这些位对写入不起作用这些位对写入不起作用§LST指令用于自程序调用和中断恢复状态寄存器指令用于自程序调用和中断恢复状态寄存器§该指令影响该指令影响ARB、、ARP、、OV、、OVM、、DP、、CNF、、TC、、SXM、、C、、XF和和PM状态位,但不影响状态位,但不影响INTM§例例2.26 LST # 0,,60h;(;(DP=0)) 数据存储器2404h60hST06E00h数据存储器2404h60hST02604hST105EChST105ECh§例例2.27 LST # 0,,*--,,AR1;; 指令执行前数据存储器EE04h3FFhST0EE00h指令执行后数据存储器EE04h3FFhST0EE04h4ARPAR43FFh7ARPAR43FEhST1E7EChST1E7ECh§例2.28 LST # 1,00h;(DP=6)ARB的值会被装入ARP。
数据存储器E1BCh300hST00406h数据存储器E1BCh300hST0E406hST109EChST1E1FCh§12、装载、装载T寄存器:寄存器:§LT dma;直接寻址;直接寻址§LT ind[,,ARn];间接寻址;间接寻址§这两条指令将指定的数据存储器的内容装入这两条指令将指定的数据存储器的内容装入TREG寄存器,为乘法做准备寄存器,为乘法做准备§该指令不影响任何状态位该指令不影响任何状态位§与乘法相关的指令有与乘法相关的指令有LTA、、LTD、、LTP、、LTS、、MPY、、MPYA、、MPYS、、MPYU指令 §例2.29 LT 24;(注:24为10进制,转为16进制是18h)(DP=8)(0400~047Fh)指令执行前数据存储器62h418hTREG3h指令执行后数据存储器62h418hTREG62h§例例2.30 LT *,,AR3;;指令执行前数据存储器62h418hTREG3h指令执行后数据存储器62h418hTREG62h2ARPAR2418h3ARPAR4418h§13、装载、装载T寄存器并累加前次乘积:寄存器并累加前次乘积:§LTA dma;直接寻址;直接寻址§LTA ind[,,ARn];间接寻址;间接寻址§该指令将指定寄存器地址中的内容装入该指令将指定寄存器地址中的内容装入TREG寄寄存器。
同时,乘积寄存器的内容按存器同时,乘积寄存器的内容按PM状态位所状态位所定义的值移位后与累加器的内容相加,结果保留定义的值移位后与累加器的内容相加,结果保留在累加器中在累加器中§若结构产生进位,则进位位被置位(若结构产生进位,则进位位被置位(C=1);否);否则,进位位被清零(则,进位位被清零(C=0)§LTD指令的功能包含了指令的功能包含了LTA指令的功能指令的功能§受受PM和和OVM的影响,并影响的影响,并影响C和和OV状态位 §例2.31 LTA 36;(DP=6;PM=0:乘积不移位) 指令执行前数据存储器62h324hACC5h指令执行后数据存储器62h324hACC14hCXC03hTREG62hTREG0FhPREG0FhPREG§例例2.32 LTA *,,AR5;(;(PM=0))指令执行前数据存储器指令执行后数据存储器4ARPAR4 324h5ARPAR1324h62h324hACC5h62h324hACC14hCXC03hTREG62hTREG0FhPREG0FhPREG§14、装载、装载T寄存器,累加前次乘积并移动数据:寄存器,累加前次乘积并移动数据:§LTD dma;直接寻址;直接寻址§LTD ind[,,ARn];间接寻址;间接寻址§该指令完成三个动作。
首先将指定的存储器地址中的内容装入该指令完成三个动作首先将指定的存储器地址中的内容装入TREG寄存器,然后寄存器,然后PREG寄存器的内容按寄存器的内容按PM状态位所规定的值状态位所规定的值移位后加到累加器中同时,制定的数据存储器地址的内容被复移位后加到累加器中同时,制定的数据存储器地址的内容被复制到地址加制到地址加1的数据存储器中的数据存储器中§该指令适用于所有被配置为数据存储器的片内该指令适用于所有被配置为数据存储器的片内RAM块数据传送块数据传送功能可通过连续存储器的边界,但不能用于外部数据存储器和存功能可通过连续存储器的边界,但不能用于外部数据存储器和存储器影像寄存器储器影像寄存器§若若LTD被用于外部数据存储器,则功能与被用于外部数据存储器,则功能与LTA相同,即前一次结相同,即前一次结果被累加,果被累加,TREG寄存器从外部数据存储器装入数,但不能发生寄存器从外部数据存储器装入数,但不能发生数据移动数据移动§若累加的结果产生进位,则不会发生数据移动若累加的结果产生进位,则不会发生数据移动§指令受指令受PM和和OVM的影响,并影响的影响,并影响C和和OV状态位 §例2.33 LTD 126;(DP=7,PM=0:乘积不移位) 指令执行前数据存储器指令执行后数据存储器62h3FEh62h3FEh0h3FFhACC5h62h3FFhACC14hCXC03hTREG62hTREG0FhPREG0FhPREG数据存储器数据存储器§例例2.34 LTD *,,AR3;(;(PM=0)) 指令执行前指令执行后1ARPAR13FEh3 ARPAR13FEh数据存储器数据存储器62h3FEh62h3FEh0h3FFhACC5h62h3FFhACC14hCXC03hTREG62hTREG0FhPREG0FhPREG数据存储器数据存储器§15、装载、装载T寄存器并将寄存器并将P寄存器存至累加器:寄存器存至累加器:§LTP dma;直接寻址;直接寻址§LTP ind[,,ARn];间接寻址;间接寻址§该指令先将被寻址数据存储器单元的内容装入该指令先将被寻址数据存储器单元的内容装入TREG寄存器。
寄存器§再将移位后的再将移位后的PREG寄存器的值存入累加器移寄存器的值存入累加器移位受位受PM状态位的控制状态位的控制§例2.35 LTP 36;(DP=6,PM=0:乘积不移位) 指令执行前数据存储器62h324hACC5h指令执行后数据存储器62h324hACC0FhCXCX3hTREG62hTREG0FhPREG0FhPREG§例例2.36 LTP *,,AR5;(;(PM=0))指令执行前数据存储器指令执行后数据存储器2ARPAR2 324h5ARPAR1324h62h324hACC5h62h324hACC0FhCXCX3hTREG62hTREG0FhPREG0FhPREG§16、装载、装载T寄存器并减去前次乘积:寄存器并减去前次乘积:§LTS dma;直接寻址;直接寻址§LTS ind[,,ARn];间接寻址;间接寻址§该指令将被寻址数据存储器单元的内容装入该指令将被寻址数据存储器单元的内容装入TREG寄存器同时乘积寄存器的内容按寄存器同时乘积寄存器的内容按PM状状态位所规定的值进行移位,然后从累加器的内容态位所规定的值进行移位,然后从累加器的内容减去减去PREG移位后的值,结果保存在累加器中。
移位后的值,结果保存在累加器中§若减的结果产生借位,则进位位被清零(若减的结果产生借位,则进位位被清零(C=0););否则进位位被置位(否则进位位被置位(C=1) §例2.37 LTS DAT36;(DP=6;PM=0:乘积不移位) 指令执行前数据存储器62h324hACC5h指令执行后数据存储器62h324hACCFFFFFFF6hCXC03hTREG62hTREG0FhPREG0FhPREG§例例2.38 LTS *,,AR2;(;(PM=0))指令执行前数据存储器指令执行后数据存储器1ARPAR1 324h2ARPAR1324h62h324hACC5h62h324hACCFFFFFFF6hCXC03hTREG62hTREG0FhPREG0FhPREG§17、修改辅助寄存器:、修改辅助寄存器:§MAR dma;直接寻址;直接寻址§MAR ind[,,ARn];间接寻址;间接寻址§在直接寻址方式下,在直接寻址方式下,MAR指令为空操作,不影响任何指令为空操作,不影响任何状态位对所指向的存储器不起作用对所指向的存储器不起作用§在间接寻址方式下,执行该指令可以修改辅助寄存器和在间接寻址方式下,执行该指令可以修改辅助寄存器和ARP的值。
当的值当MAR修改修改ARP的值时,的值时,ARP原有的值被原有的值被复制到复制到ST1的的ARB字段§任何任何MAR所能实现的间接寻址操作,用其他任何支持所能实现的间接寻址操作,用其他任何支持间接寻址的指令也能实现间接寻址的指令也能实现§ARP也可由也可由LST指令装入指令装入§对于装入辅助寄存器,见对于装入辅助寄存器,见LAR指令的说明对于将辅助指令的说明对于将辅助寄存器的值存入数据存储器,见寄存器的值存入数据存储器,见SAR指令§例2.39 MAR *,AR1;ARP装入1指令执行前指令执行后0ARPARB 71ARPARB0§例例2.40 MAR *+,,AR5;将当前辅助寄存器;将当前辅助寄存器(AR1)增增1,并向,并向ARP装入装入5 指令执行前指令执行后1ARPARB 05ARPARB134hAR135hAR1§18、从端口输出数据:、从端口输出数据:§OUT dma,,PA;直接寻址;直接寻址§OUT ind,,PA[,,ARn];间接寻址;间接寻址§OUT指令将数据存储器单元的指令将数据存储器单元的16位值写到指定的位值写到指定的I/O单元不影单元不影响状态位。
引脚响状态位引脚IS非变低,用以指示访问非变低,用以指示访问I/O口§STRB非、非、R/W非、非、ready信号的时序与外部数据存储器的时序信号的时序与外部数据存储器的时序相同§RPT指令可以同指令可以同OUT指令一起使用,用来将连续多个字从数据存指令一起使用,用来将连续多个字从数据存储器写到储器写到I/O空间§例例2.41 OUT DAT0,,100h;(;(DP=4))§将数据存储器单元将数据存储器单元200h处的数据字写到口地址为处的数据字写到口地址为100h的外设上;的外设上;§例例2.42 OUT *,,100h;;§将当前辅助寄存器所指的数据存储单元中的字写到口地址为将当前辅助寄存器所指的数据存储单元中的字写到口地址为100h的外设上的外设上 §19、将乘积寄存器装入累加器:、将乘积寄存器装入累加器:§PAC§该指令将该指令将P寄存器中的内容按寄存器中的内容按PM状态位所规定的状态位所规定的值移位后,送入累加器值移位后,送入累加器 例2.43 PAC;(PM=0:乘积不移位) 指令执行前ACC23h指令执行后ACC144hCXC0144hPREG144hPREG§20、栈顶弹出至累加器低位:、栈顶弹出至累加器低位:§POP§执行该指令后,栈顶(执行该指令后,栈顶(TOS)内容复制到累加器低位中,)内容复制到累加器低位中,栈中各值均上弹一级,累加器高位填零。
栈中各值均上弹一级,累加器高位填零§硬件堆栈有硬件堆栈有8个后进先出的单元每发生一次弹出时,个后进先出的单元每发生一次弹出时,每个堆栈中值均被复制到上一级栈单元中,栈顶内容则每个堆栈中值均被复制到上一级栈单元中,栈顶内容则被移出栈底的最后两个字具有相同的值如果在任何被移出栈底的最后两个字具有相同的值如果在任何入栈前有入栈前有7次出栈(使用次出栈(使用POP、、POPD、、RETC或或RET指指令),则栈中各级含有相同的值令),则栈中各级含有相同的值§没有提供对堆栈下溢的检查该指令不影响状态位没有提供对堆栈下溢的检查该指令不影响状态位 §例2.44 POP;指令执行前指令执行后45h堆栈61h堆栈61h16hACC82hACC45hCXCX7h33h42h56h31h61h16h7h33h42h56h31h§21、栈顶弹出至数据存储器:、栈顶弹出至数据存储器:§POPD dma;直接寻址;直接寻址§POPD ind[,,ARn];间接寻址;间接寻址§该指令将栈顶的数值送到指令规定的数据存储器该指令将栈顶的数值送到指令规定的数据存储器单元堆栈弹出一级,栈顶以下的七级堆栈单元单元堆栈弹出一级,栈顶以下的七级堆栈单元也依次上弹一级。
也依次上弹一级§堆栈的其他操作与堆栈的其他操作与POP指令相同指令相同 §例2.45 POPD DAT10;(DP=8)指令执行前指令执行后92h堆栈0AAh堆栈0AAh72h40Ah55h40Ah92h8h44h81h75h32h0AAh72h8h44h81h75h32h§22、数据存储器值进栈:、数据存储器值进栈:§PSHD dma;直接寻址;直接寻址§PSHD ind[,,ARn];间接寻址;间接寻址§将指令规定的数据存储器单元内容送入栈顶将指令规定的数据存储器单元内容送入栈顶((TOS)堆栈中低)堆栈中低7个单元的值都下推一级个单元的值都下推一级最低一级单元的内容将丢失最低一级单元的内容将丢失§该指令不影响状态位该指令不影响状态位§例2.46 PSHD 127;(DP=3:地址为0180h~01FFh)指令执行前指令执行后2h堆栈0h堆栈33h1FFh65h1FFh65h78h99h42h50h0h65h数据存储器数据存储器2h33h78h99h42h50h0h§23、累加器低位值进栈:、累加器低位值进栈:§PUSH§执行该指令后堆栈内容下推一级,累加器低位字执行该指令后堆栈内容下推一级,累加器低位字复制到硬件堆栈顶部。
复制到硬件堆栈顶部§硬件堆栈是一个硬件堆栈是一个8单元的后进先出堆栈如果在单元的后进先出堆栈如果在一次弹出前,发生一次弹出前,发生8级入栈(由级入栈(由CALA、、CALL、、CC、、PSHD、、PUSH、、TRAP、、INTR或或NMI指令指令引起),则第一个写入栈中的数值将由于连续入引起),则第一个写入栈中的数值将由于连续入栈而丢失栈而丢失 §例2.47 PUSH 指令执行前指令执行后2h堆栈3Fh堆栈54h5hACC7hACC7hCXCX3h0h12h86h54h86h7h2h5h3h0h12h§24、存储辅助寄存器:、存储辅助寄存器:§SAR ARx,,dma;直接寻址;直接寻址§SAR ARx,,ind[,,ARn];间接寻址;间接寻址§将指定辅助寄存器(将指定辅助寄存器(ARx)内容存入被寻址数据)内容存入被寻址数据存储器单元存储器单元§在间接寻址方式中,在间接寻址方式中,SAR指令同时也要对前辅助指令同时也要对前辅助寄存器内容进行修改,但寄存器内容进行修改,但SAR将在增、减辅助寄将在增、减辅助寄存器内容前将辅助寄存器值存入数据存储器存器内容前将辅助寄存器值存入数据存储器。
§例2.48 SAR AR0,DAT30;(DP=6) 指令执行前数据存储器指令执行后数据存储器37hAR037hAR018 h31Eh37h31Eh§例例2.49 SAR AR0,,*+;; 指令执行前数据存储器指令执行后数据存储器0ARPAR0 401h0ARPAR1402h0h401h401h401h§25、存储、存储PREG寄存器高位:寄存器高位:§SPH dma;;§SPH ind[,,ARn]§该指令将该指令将PREG寄存器按寄存器按PM位所规定的方式移位所规定的方式移位后,数值的高位后,数值的高16位存储到数据存储器中位存储到数据存储器中§执行时,先将执行时,先将32位位PREG寄存器复制到乘积移位寄存器复制到乘积移位器中,然后在此按器中,然后在此按PM位所规定的值进行移位位所规定的值进行移位若选择右移若选择右移6位移位方式,则高位进行符号扩展,位移位方式,则高位进行符号扩展,低位丢失;若选择左移方式,则高位丢失,地位低位丢失;若选择左移方式,则高位丢失,地位填填0;若;若PM=00,则移位后数值的高,则移位后数值的高16位存入数位存入数据存储器据存储器§PREG寄存器值和累加器值都不受本指令影响。
寄存器值和累加器值都不受本指令影响 §例2.50 SPH DAT3;(DP=4;PM=0:不移位)指令执行前数据存储器指令执行后数据存储器FE079844hPREGFE079844hPREG4567h203hFE07h401h§例例2.51 SPH *,,AR7;(;(PM=2;左移;左移4位)位)指令执行前指令执行后6ARPAR6 203h7ARPAR1203h数据存储器数据存储器FE079844hPREGFE079844hPREG4567h203hE079h401h§26、存储、存储P寄存器低位:寄存器低位:§SPL dma;;§SPL ind[,,ARn]§该指令将该指令将PREG寄存器按寄存器按PM位所规定的方式移位所规定的方式移位后,数值的低位后,数值的低16位存储到数据存储器中位存储到数据存储器中§执行时,先将执行时,先将32位位PREG寄存器复制到乘积移位寄存器复制到乘积移位器中,然后在此按器中,然后在此按PM位所规定的值进行移位位所规定的值进行移位若选择右移若选择右移6位方式,则高位进行符号扩展,低位方式,则高位进行符号扩展,低位丢失;若执行左移方式,则高位丢失,低位填位丢失;若执行左移方式,则高位丢失,低位填0;若;若PM=00,则移位不发生。
移位后数值的低,则移位不发生移位后数值的低16位存入数据存储器位存入数据存储器§PREG寄存器和累加器值都不受本指令影响寄存器和累加器值都不受本指令影响 §例2.52 SPL DAT5;(DP=4;PM=2:左移4位)指令执行前数据存储器指令执行后数据存储器FE079844hPREGFE079844hPREG4567h203h8440h401h§27、存储长立即数值至数据存储器:、存储长立即数值至数据存储器:§SPLK # lk dma;直接寻址;直接寻址§SPL ind[,,ARn];间接寻址;间接寻址§SPLK指令允许将一个指令允许将一个16位的数值此恶如任何一位的数值此恶如任何一个数据存储单元个数据存储单元§该指令不影响状态位该指令不影响状态位 §例2.53 SPLK #7FFFh,DAT3;(DP=6)指令执行前数据存储器指令执行后数据存储器FE07h303h7FFFh303h§28、存储状态寄存器:、存储状态寄存器:§SST # m,,dma;直接寻址;直接寻址§SST # m,,ind[,,ARn];间接寻址;间接寻址§该指令将指定的状态寄存器该指令将指定的状态寄存器ST0或或ST1存入数据存储器。
存入数据存储器若若m=0,则选择,则选择ST0;若;若m=1,则选择,则选择ST1§在直接寻址方式中,不管在直接寻址方式中,不管ST0中的数据页指针(中的数据页指针(DP)为)为何值,指定的状态寄存器总是被存入第何值,指定的状态寄存器总是被存入第0页虽然处理页虽然处理器自动访问第器自动访问第0页,但页,但DP不会被修改这就允许在不会被修改这就允许在DP不被修改的情况下存储不被修改的情况下存储ST0在第0页内的特定存储单页内的特定存储单元由指令给出元由指令给出§在间接寻址方式中,存储地址从被选的辅助寄存器获取在间接寻址方式中,存储地址从被选的辅助寄存器获取从而,指定的状态寄存器内容可被存储至数据存储器中从而,指定的状态寄存器内容可被存储至数据存储器中的任一页的地址的任一页的地址 §例2.54 SST # 0,96;直接寻址,自动访问数据页0指令执行前数据存储器指令执行后数据存储器A408hST0A408hST00Ah60hA408h60h§例例2.55 SST #1,,*,,AR7;;指令执行前指令执行后0ARPAR0 300h7ARPAR1300h数据存储器数据存储器2580hST12580hST10h300h2580h300h§29、读表:、读表:§TBLR dma;直接寻址;直接寻址§TBLR ind[,,ARn];间接寻址;间接寻址§TBLR指令把程序存储器单元中的一个字,传送到由指指令把程序存储器单元中的一个字,传送到由指令给定的数据存储器单元。
令给定的数据存储器单元§程序存储器单元地址由累加器的低程序存储器单元地址由累加器的低16位位ACC((15::0))定义该操作执行完从程序存储器读后,紧接着向数据定义该操作执行完从程序存储器读后,紧接着向数据存储器写存储器写§当与重复指令当与重复指令RPT一同使用时,一同使用时,TBLR便成为但周期指便成为但周期指令该指令执行前,会将令该指令执行前,会将PC加加1并保存到微堆栈;然后并保存到微堆栈;然后将由累加器的低将由累加器的低16位位ACC((15::0)定义的表的首地址)定义的表的首地址装入到程序计数器装入到程序计数器PC;以后每个周期;以后每个周期PC自动加自动加1,,RPTC自动减自动减1,该操作持续到,该操作持续到RPTC=0为止;当为止;当RPTC=0时,保存在微堆栈时,保存在微堆栈PC值会自动弹回到值会自动弹回到PC中,中,使得下一条指令能正常运行使得下一条指令能正常运行§该指令不影响状态位该指令不影响状态位§例2.56 TBLR DAT6(DP=4)指令执行前程序存储器指令执行后程序存储器23hACC23hACC306h23h306h23h数据存储器数据存储器75h206h306h324h§例例2.57 TBLR *,,AR7;;指令执行前指令执行后0ARPAR0 300h7ARPAR0300h程序存储器程序存储器24hACC24hACC307h23h307h23h数据存储器数据存储器75h300h307h300h§30、写表:、写表:§TBLW dma;;§TBLW ind[,,ARn];;§TBLW指令把数据存储器单元中的一个字传送至程序数指令把数据存储器单元中的一个字传送至程序数据存储器。
据存储器§数据存储器地址由指令给定,程序存储器地址由累加器数据存储器地址由指令给定,程序存储器地址由累加器的低的低16位指定该指令首先完成从数据存储器中读,紧位指定该指令首先完成从数据存储器中读,紧接着向程序存储器写接着向程序存储器写§当与重复指令当与重复指令RPT一同使用时,一同使用时,TBLW便成为单周期指便成为单周期指令该指令执行前,会将令该指令执行前,会将PC加加1并保存到微堆栈,然后并保存到微堆栈,然后将由累加器的低将由累加器的低16位位ACC((15::0)定义的表的首地址)定义的表的首地址装入到程序计数器装入到程序计数器PC;以后每个周期;以后每个周期PC自动加自动加1,,RPTC自动减自动减1,该操作持续到,该操作持续到RPTC=0为止;当为止;当RPTC=0时,保存在微堆栈时,保存在微堆栈PC值会自动弹回到值会自动弹回到PC中,中,使得下一条指令能正常运行使得下一条指令能正常运行§该指令不影响状态位该指令不影响状态位§例2.56 TBLW DAT5 (DP=32)(地址为1000h~107Fh) 指令执行前程序存储器指令执行后程序存储器257hACC257hACC4339h1005h4339h1005h数据存储器数据存储器306h257h4339h257h§例例2.57 TBLW *;;指令执行前指令执行后6ARPAR6 1006h6ARPAR01006h程序存储器程序存储器258hACC258hACC4340h1006h4340h1006h数据存储器数据存储器307h258h4340h258h。












