
单片机与DSP汇编语言的区别.docx
6页单片机与单片机与 DSPDSP 汇编语言的区别汇编语言的区别单片机与 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,5AHMOV 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 指令与或异或移位 DSPANDORXORROL 单片机ANLORLXRLRL 和与指令一样,上表中两者相同功能的指令除过在表达符号不同外,每条 指令中,DSP 都还可以进行先移位的操作再实现相应功能 可见两者不止在指令的条数上不同,分类功能也相差很大,DSP 可以完成 单片机完成不了的复杂任务,所以指令要比单片机多也是可以想到的,即使指 令要完成的功能相同但在实际的执行上也有差别 三、在伪指令上的区别三、在伪指令上的区别 伪指令主要是完成各个阶段的定义,对符合的定义、对变量的定义 DSP 的 定义等。
他是程序中不可缺少的指令,但不存在在实际的可执行文件里伪指 令在程序编译后,汇编按照位置的设置将程序初始化,当汇编完成之后,伪指 令完成任务,就会被删除这即是里边“伪”的含义在 DSP 中伪指令主要完成 以下任务: 1. 将代码和数据汇编到特定的段 2. 为未初始化的变量保留存储空间 3. 控制展开列表的形式 4. 存储器初始化 5. 汇编条件块 6. 定义全局变量和局部变量 7. 指定汇编器可以获得宏的特定库 8. 检查符号调试信息 DSP 的伪指令很多,其下边的分类也很多 对于单片机的伪指令,常用的有 7 条: 1. ORG-定位伪指令 2. END-结束汇编伪指令 3. EQU-赋值伪指令 4. DB-定义字节伪指令 5. DW-定义数据伪指令 6. DS-定义存储区伪指令 7. BIT-位定义指令 从上边可以看出在伪指令上,两者的区别很大,功能和所要完成的任务几 乎都不相同DSP 的伪指令要比单片机的复杂,两者的使用格式也不同DSP 汇编中伪指令的格式是:伪指令(书写上左下角有点) 表达式,表达式,如: .bss(变量段,该段为未初始化的变量保留空间) 单片机汇编中伪指令的格式 是:[标号:] 伪指令 表达式。
四、在程序设计方法上的区别四、在程序设计方法上的区别在 TMS320C54x 汇编语言源程序中,以.asm 为程序扩展名,程序员用“段” 伪指令来组织程序。
