第五章寻址方式和汇编指令§5.1寻址方式•寻址方式是指寻找指令中操作数地址的方式。•TMS320C2000汇编指令有3种存储器寻址方式:立即寻址方式直接寻址方式间接寻址方式一、立即寻址方式•在立即寻址方式中,指令字包含该指令要操作的常数。•在指令中常数前加“#”用于表示立即操作数。•C2000立即寻址方式分两种类型:短立即寻址方式长立即寻址方式。短立即寻址方式:•指令的操作数为一个8位、9位或13位的常数;•短立即寻址方式的指令是一个单指令字,该常数就包含在这个单指令字中。例1:RPT#k;重复指令,k为8位立即数RPT#1001011101101100100RPT指令操作码操作数=100短立即寻址方式:•指令的操作数为一个8位、9位或13位的常数;•短立即寻址方式的指令是一个单指令字,该常数就包含在这个单指令字中。例2:LDP#k;装载DP指令,k为9位立即数LDP#1001011110001100100LDP指令操作码操作数=100短立即寻址方式:•指令的操作数为一个8位、9位或13位的常数;•短立即寻址方式的指令是一个单指令字,该常数就包含在这个单指令字中。例3:MPY#k;乘法指令,k为13位立即数的操作数MPY#0031h1100000000110001MPY指令操作码操作数=0031h长立即寻址方式:•指令的操作数为一个16位的常数•指令需两个指令字,该常数为第二指令字。•这个16位的常数可以作为一个绝对值,也可以作为二进制的补码数。例ADD#lk[,shift];lk为16位立即数的操作数ADD#16384,2ADD指令操作码操作数=16384=4000h10111111100100100100000000000000移位数=2第一个指令字第二个指令字二、直接寻址方式•访问数据存储器的方式:直接和间接寻址方式。•直接寻址方式将指令中的7位操作数与数据存储器页面指针(DP)的9位连接在一起,形成个16位数据存储器地址。•直接寻址方式可访问64k数据存储器的512个数据页面和每个数据页中的128个字单元。•偏移量是指令中的操作数,是页面中的某个地址单元。•偏移量是7位的立即数,作为64K数据存储器地址的低7位,•DP值作为数据存储器地址的高9位,用来确定当前数据页。•直接寻址方式的数据存储器地址产生DP(9LSBs)D8D0状态寄存器ST08MSBs7LSBs0D15D8D7D6D0指令寄存器指令操作码DP(9MSBs)偏移量(7LSBs)D15D7D6D016位数据存储器地址•使用直接寻址方式访问数据存储器的步骤:1)设置数据页面,将当前数据页面(0-511)装入DP:LDP#k2)设置偏移量,给出7位偏移量作为指令的一个操作数。ADD5Dh应注意:1.在程序开始时必须初始化DP。2.如果程序中的所有指令均访问同一个数据页,只需在程序的前面装入DP,而不必在采用直接寻址方式的每个指令之前设置数据页。若访问新的数据页,需重新装新的DP值。3.用直接寻址方式的指令其操作数不加前缀“#”•例1:LDP#4ADD9h,5000000100D8D0状态寄存器ST0(DP)0010010100010010D15D8D7D6D0指令寄存器移5位ADD指令操作码0000001000001001D15D7D6D016位数据存储器地址:0209h•例2:LDP#500;500=1F4hADDC6h111110100D8D0状态寄存器ST0(DP)0110000000001100D15D8D7D6D0指令寄存器ADDC指令操作码1111101000000110D15D7D6D016位数据存储器地址:0FA06h三、间接寻址方式•通过一个16位的辅助寄存器间接访问数据存储器。•利用8个16位的辅助寄存器(AR0—AR7)可提供灵活多变且功能强大的间接寻址方式。•辅助寄存器的内容作为一个16位地址可访问64K数据存储器中的任意单元。•除了具有立即操作数或没有操作数的指令外,所有的指令都能使用间接寻址方式。•间接寻址方式不要考虑页地址DP1.辅助寄存器的选择•装载ARP来选择辅助寄存器:LST指令MAR指令例:MAR*,AR1支持间接寻址方式的任意指令•由ARP指定的辅助寄存器称为当前辅助寄存器或当前AR•在使用间接寻址方式的指令中,当前辅助寄存器的内容为数据存储器的访问地址。2.间接寻址的选择•使用当前辅助寄存器进行间接寻址之后,辅助寄存器算术单元(ARAU)可以对当前辅助寄存器的内容进行修改。•C2000提供了4种修改方法:无增量或减量加1或减1加或减一个变址量按逆向进位方式加或逆向借位方式减一个变址量2.间接寻址的选择•使用当前辅助寄存器进行间接寻址之后,辅助寄存器算术单元(ARAU)可以对当前辅助寄存器的内容进行修改。•C2000提供了4种修改方法:无增量或减量加1或减1加或减一个变址量按逆向进位方式加或逆向借位方式减一个变址量指令使用当前辅助寄存器内容作为数据存储器地址。指令执行完成后当前辅助寄存器的内容保持不变。例:LT*;用当前AR所指的数据存储器地址内容装载TREG2.间接寻址的选择•使用当前辅助寄存器进行间接寻址之后,辅助寄存器算术单元(ARAU)可以对当前辅助寄存器的内容进行修改。•C2000提供了4种修改方法:无增量或减量加1或减1加或减一个变址量按逆向进位方式加或逆向借位方式减一个变址量指令使用当前辅助寄存器内容作为数据存储器地址,然后将当前辅助寄存器内容加1或减1。例:LT*+;用当前AR所指的数据存储器地址内容装载TREG,然后将当前AR内容加1。LT*-;用当前AR所指的数据存储器地址内容装载TREG,然后将当前AR内容减1。2.间接寻址的选择•使用当前辅助寄存器进行间接寻址之后,辅助寄存器算术单元(ARAU)可以对当前辅助寄存器的内容进行修改。•C2000提供了4种修改方法:无增量或减量加1或减1加或减一个变址量按逆向进位方式加或逆向借位方式减一个变址量指令使用当前AR的内容作为数据有储器地址,然后向AR的内容加上或减去AR0的内容。AR0中的值即是这个变址量。例:LT*0+;用当前AR所指的数据存储器地址内容装载TREG,然后向当前AR内容加上AR0内容。LT*0-;用当前AR所指的数据存储器地址内容装载TREG,然后将当前AR内容减1。2.间接寻址的选择•使用当前辅助寄存器进行间接寻址之后,辅助寄存器算术单元(ARAU)可以对当前辅助寄存器的内容进行修改。•C2000提供了4种修改方法:无增量或减量加1或减1加或减一个变址量按逆向进位方式加或逆向借位方式减一个变址量指令使用当前AR内容作为数据存储器地址,然后将当前AR内容与AR0中的内容按逆向进位或逆向借位方式相加或相减,结果送到当前辅助寄存器中。AR0中的值即是这个变址量。例:LT*BR0+;用当前AR所指的数据存储器地址内容装载TREG,然后向当前AR内容加上AR0内容,加法采用逆向进位方式。LT*BR0-;用当前AR所指的数据存储器地址内容装载TREG,然后将当前AR内容减1。减法采用逆向借位方式。3.下次使用的辅助寄存器•许多间接寻址的指令除了可以改变当前AR的内容外,还可以指定下次使用的AR。•当这些指令执行完毕时,指定的AR成为下一条指令的当前AR,即为下次使用的AR。•指定下次使用的AR的指令实际上是将一个0-7的值装入ARP中,当前的ARP值则被复制到ARB中例:MAR*,AR1:将1装入ARP,使AR1成为下次使用的AR。LT*+,AR2;将当前辅助寄存器AR1的内容作为地址,把该地址单元的内存装入TREG;然后将ARl的内容加1;再使AR2成为下次使用的辅助寄存器MPY*;将AR2的内容作为地址,把该地址单元的内容与TREG的内容相乘,乘积送入乘积寄存器PREG,下次使用的辅助寄存器仍为AR24.修改辅助寄存器的方法•使用专用指令修改辅助寄存器的内容。LAR指令:直接将操作数指定的内容装入AR。LARAR1,#0030HADRK指令:将当前AR值加一个短立即数。ADRK#20SBRK指令:将当前AR值减一个短立即数。SBRK#10MAR指令:将修改当前AR值和ARP。MAR*,AR1•利用任何一条支持间接寻址的指令都能修改辅助寄存器的内容§5.2汇编指令•TMS320C2000系列的汇编指令支持各种信号处理运算。•C2000指令集与C2X指令集兼容,为C2x编写的代码经重新汇编可在C2000上运行。•C5x的指令包含了C2000的指令,C2000的指令也能用于C5X芯片。•TMS320C2000系列的汇编指令有80多条。一、汇编指令的表示法•用助记符表示•组成:操作码[操作数[,操作数]]例LARAR1,#08h操作码操作数二、分类•C2000指令按功能叫分为6大类。(1)累加器、算术和逻辑运算指令(26条)(2)辅助寄存器指令(6条);(3)TREG、PREG和乘法指令(20条):(4)转移指令(12条);(5)控制指令(15条);(6)I/O和存储器指令(8条)。见P89-92三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]无操作数指令例:ABS三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]左移0-15位直接寻址其中:dma数据存储器地址的低7位(页内地址)shift左移0-15位(缺省为0)例:ADD1,1三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]左移16位直接寻址其中:dma数据存储器地址的低7位(页内地址)16左移16位例:ADD13h,16三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]左移0-15位间接寻址其中:ind间接寻址符号,有七种选择:*,*+,*-,*0+,*0-*BR0+*BR0-shift左移0-15位ARnn为数值0-7,ARn指定下次的辅助寄存器。例:ADD*+,2,AR0三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]左移16位间接寻址其中:ind间接寻址符号,有七种选择:*,*+,*-,*0+,*0-*BR0+*BR0-16左移16位ARnn为数值0-7,ARn指定下次的辅助寄存器。例:ADD*-,16,AR1三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn]]指令助记符#k指令助记符#lk[,shift]短立即寻址其中:k8,9,13位短立即数#立即寻址方式前缀例:ADD#8三、指令句法描述•C2000指令有6种典型的格式指令助记符指令助记符dma[,shift]指令助记符dma,16指令助记符ind[,shift[,ARn]]指令助记符ind[,16[,ARn