内容发布更新时间 : 2024/12/27 0:48:48星期一 下面是文章的全部内容请认真阅读。
单片机与DSP汇编语言的区别
单片机与DSP在硬件上的不同就在一定程度上决定了两者汇编语言的不同。 DSP微处理器的主要特点有:
1.DSP内部采用程序空间和数据空间分开的哈佛结构,允许同时取指令和取操作数,还允许在程序空间和数据空间互相传送数据。
2.许多DSP芯片内部都采用多总线结构,这样可以保证在一个机器周期内多次访问程序空间和数据空间。
3.DSP每执行一次指令,需要通过预取指、取指、译码、寻址、取操作数和执行等流水线阶段。
4.DSP内部包括多个处理器单元,他们可以在一个指令周期内同时进行运算。 5.具有特殊的DSP指令,比如TMS320C54xx中的MACD(乘法、累加和数据移动)指令等。
6.还有指令周期短、运算精度高,硬件配置强等特点。
单片微型计算机(Single Chip Microcomputer)简称单片机,又称微控制器 (Microcontroller Unit)或嵌埋式控制器(Embeded Controller),是将计算机的基本部件微型化,使之集成一块芯片上的微机。片内含有CPU、ROM、RAM、并行I/O、串行I/O、定时器/计数器、中断控制、系统时钟及系统总线等。
根据以上DSP与单片机的特点,我们就可以看出单片机多用于一些简单的数字信号处理,而DSP更适合于数字信号处理软件和硬件资源,用于比较复杂的数字信号处理算法。所以要满足两者处理器在不同程度上的需求,两者的汇编语言也就对应的不相同了。
本文以MCS-51单片机和TMS320C54系列DSP来比较两者在汇编语言上的不同之处。
一、寻址方式的区别
在汇编语言的指令格式上两者相同,都是标号:指令操作数1,操作数2,操作数3;注释。但DSP汇编语言指令的数据传递是从左至右,单片机是从右至左。
在寻址方式上,DSP有七种寻址方式,立即数寻址、绝对地址寻址(数据存储器寻址、程序存储器地址寻址、端口地址寻址、*(lk)寻址)、累加器寻址、直接寻址、间接寻址(单操作数寻址、循环寻址、位倒序寻址、双操作数寻址)、存储器映射寄存器寻址,堆栈寻址。单片机有8种寻址方式,寄存器寻址、直接寻址、立即寻址、寄存器间接寻址、基址寄存器加变址寄存器间接寻址、相对寻址、位寻址、页面寻址。可见两者在寻址方式上大有不同。下边对相同的寻址方式分别在DSP和单片机上的区别。
对于DSP的立即寻址,指令中必须有一个立即操作数。立即数有两种方式,一种是短立即数(3、5、8或9的数据),另一种是长立即数(16位的数据)。立即数可以包含在单字和双字指令中,单字指令中立即数是3、5、8或9的数据,双字指令中立即数是16位的数。
例:LD #25,A
对于单片机的立即数寻址,立即数寻址方式中操作数包含在指令字节中,操作码后紧跟的是一字节或两字节操作数(立即数),即操作数以指令字节形式存
放在程序存储器中,在编写程序时用“#”表示。
例:MOV A,5AH MOV A,#5AH
由对比和例子可以看出,两者在立即数寻址上写法格式不同,用的指令也不同,相同点是都用“#”符号表示立即数寻址。
对于直接寻址,DSP在直接寻址方式中,指令代码包含了数据存储地址的低7位。这7位作为偏移地址与数据页指针DP或者堆栈指针SP共同组成了一个16位的数据存储地址。直接寻址用符号或常数来确定偏移值。
例:把存储单元SAMPLE中的内容加到累加器B中去。 ADD SAMPLE,B
而单片机的直接寻址,直接寻址方式在指令中直接给出操作数所在存储单元的地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址,直接寻址方式访问以下三种空间:
1.特殊功能寄存器。
2.内部数据存储的低128字节。 3.位地址空间。
用于操作的称为直接寻址,用于访问字节的称为直接字节寻址。 例:把片内RAM中的5AH这个地址单元的内容送到累加器A。
MOV A,5AHfv
对比这两种相同的寻址方式,可以看出两者最直观的区别是格式的不同,DSP是将操作数放在存储地址之前,单片机则相反。在DSP中直接寻址还可以利用堆栈指针作为数据存储地址,同时指令也不同,DSP利用相对应的指令,单片机则一般都是MOV作为传送指令。两者对直接寻址都没有特殊的符号表示。
对于寄存器间接寻址,DSP的间接寻址有4种类型:单操作数寻址、循环寻址、位倒序寻址和双操作数寻址。在间接寻址中,64K×16位数据空间都可以通过辅助寄存器中的16位地址进行访问。C54xx系列DSP有8个16位辅助寄存器(AR0-AR7)。两个辅助寄存器算数单元可以根据辅助寄存器的内容操作,完成无符号的16位数据操作数,可以再一条指令中访问两个数据存储单元。例:*ARx-(访问后ARx中的地址减1)、*ARx(lk)等,操作语法有很多种,实现的功能也不相同。
单片机的寄存器间接寻址,是把指定寄存器中的内容作为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0和R1为间接寻址寄存器即地址指针,可以寻址内部RAM低128字节地址单元的内容。寄存器间接寻址方式也可访问外部扩展的数据存储器,用R0、R1或DPTR作为地址指针,间接寻址用符号@表示。
例;MOV A,@R0
所以,虽然DSP和单片机都有寄存器间接寻址,但是DSP的间接寻址要比单片机复杂的多,DSP的分类就有四种,每种分类都不相同,DSP的数据访问空间要比单片机的大,寄存器也不相同,根本应该是两者所用的硬件配置和需求程度不一样。两者最直观的差别是表示方式上,书写的格式完全不同。其他方面,DS独有的是绝对地址寻址(数据存储器寻址、程序存储器地址寻址、端口地址寻址、*(lk)寻址)、累加器寻址、存储器映射寄存器寻址,堆栈寻址,单片机独
有的是寄存器寻址、基址寄存器加变址寄存器间接寻址、相对寻址、位寻址、页面寻址。
二、指令的区别
TMS320C54xx系列DSP的指令共有129条,比MCS-51的指令多了18条。DSP的指令按照功能分为4种基本类型:算数指令、逻辑指令、程序控制指令、存储和装入指令以及循环指令。单片机指令按功能分为5种基本类型:数据传送类指令、算数运算类指令、逻辑运算类指令、位操作类指令,控制转移类指令。在算数指令上。DSP的算数指令可以分为加法指令(ADD)、减法指令(SUB)、乘法指令(MPY)、乘加指令(MAC)、乘减指令(MAS)、双数据或双精度指令(DADD/DSUB)以及特殊操作指令(ABDST、FIRS、SQDST)。其中大部分指令只需要1个指令周期,个别指令需要2-3个周期。MCS-51算数运算指令包括加、减、乘、除基本四则运算和增量(加1)、减量(减1)运算,执行结果将使进位(Cy)、辅助进位(AC),溢出标志位(OV)标志或复位。
DSP独有的是程序控制指令、存储和装入指令、循环指令,单片机独有的是数据传送指令、位操作指令、控制转移类指令。 对于算数指令:
DSP的算数运算指令可分为加法指令(ADD)、减法指令(SUB)、乘法指令(MPY)、乘加指令(MAC)、乘减指令(MAS)、双数据或双精度指令(DADD、DSUB)和特殊操作指令(ABDST、FIRS、SQDST)。单片机算数运算指令包括加、减、乘、除四则运算和增量(加1)、减量(减1)运算,执行结果将使进位(Cy)、辅助进位(AC),溢出(OV)标志置位或复位。算数/逻辑运算(ALU)部件仅执行无符号二进制整数的运算。借助溢出标志,可对带符号数进行2的补码运算;借助进位标志,可进行多精度加、减运算;也可对压缩码的BCD码数进行运算。指令有:ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV八种操作助记符。
例如:DSP的加法指令:ADD Smen,src单片机的加法指令:ADD A,Rn。 两者在形式和指令上相同,但DSP是指将Smen加到累加器中,单片机是指将Rn加到累加器中,两种在写法位置上相反,这是因为DSP的数据传送是从左至右,单片机相反。在DSP的加法指令中还带有移位功能,如:ADD Smen,16,src[,dst] 功能是将Smen左移16位后加到累加器中。类似这样的例子对于DSP不仅包括了单片机同类指令的功能还实现了比其更多的功能指令。DSP独有的指令有乘加指令、乘减指令、双数据或双精度指令(DADD、DSUB)和特殊操作指令(ABDST、FIRS、SQDST)。 对于逻辑运算指令:
DSP的逻辑指令包括与指令(AND)、或指令(OR)、异或指令(XOR)、移位指令(ROL)和测试指令(BITF)。单片机的逻辑运算指令有清除、求反、移位、与、或、异或等操作,助记符有CLR、CPL、RL、RLC、RR、RRC、ANL、ORL、XRL。两者在总体上相比,DSP多了测试指令,单片机则多了清除、求反指令。同是与指令,例如,DSP中:AND Smen,src(Smen与累加器相与)单片机中:ANL A,Rn(Rn与累加器相与)两者不但指令不同,数据传送方向也相反。并且DSP中还有先移位再相与的功能,如:AND #lk[,SHFT],src[,dst](长立即数移位后和累加器相与。)对于其他相同功能的指令,两者的表达方式也不同。详细见表1。
表1 指令 与 或 异或 移位