单片机与8086/8088的差异从广义上来看8086/8088属于微处理器(MPU),而单片机则属于微控制器(MCU),所以先来处理微处理器和微控制器的区别。这样的区别主要集中在硬件结构、应用领域和指令集特征3个方面:1.硬件结构微处理器是一个单芯片CPU,而微控制器则在一块集成电路芯片中集成了CPU和其他电路,构成了一个完整的微型计算机系统。而一个完整的微型计算机系统不仅除了CPU以外还包括存储器(ROM、RAM)、串并行的I/O接口,计时器和中断调度电路。这些都集成在一块集成电路上。此外,微控制器的一个最为重要的特征便是内建的中断系统。作为一个面向控制的设备,微控制器经常要实现响应外界的中断,微控制器必须能够快速的执行上下文的切换,在执行一个进程的时候去执行另一个进程响应一个“中断事件”。2.应用领域微处理器通常作为微型计算机系统中的CPU使用而这一点也是微处理器的优势所在。然而,微控制器通常应用于面向控制的应用。其系统设计追求小巧(大小方面),从而尽可能达到减少元器件的数量。在过去的很长一段时间中,我们将其应用到实际中时需要成千上万个数字集成电路来完成。但现在我们可以使用微控制器不仅减少了元器件的数量还能够完成同样的功能,由此我们可以推断出微控制器适用于那些需要极少的元器件来实现对输入/输出设备的控制而微处理器则适用于计算机系统中进行信息处理。3.指令集特征在第二点中我们提到微处理器和微控制器的应用领域不同,所以他们的指令集也会有所差异。微处理器的指令集增强了处理功能,使其拥有强大的寻址模式和适于操作大规模数据的指令。微处理器的指令可以对半字节、字节、字、双字节进行操作。通过使用地址指针和地址偏移,微处理器提供了可以访问大批数据的寻址模式。自增和自减模式使得以字节、字或双子为单位访问数据变得非常容易。微控制器的指令集适用于输入/输出控制。许多输入/输出的接口是单/位的。微控制器具有设置和清除单位的指令,也能执行其他方面的操作,例如对“位”进行逻辑与、或和异或运算,同时也可以根据标志位进行跳转等,所以我们可以根据微控制器的指令集适用于输入/输出控制从而达到对设备的控制和监听。微控制器具有专门的内部电路和指令用于输入/输出、及时和外部中断的优先权分配。一般在执行一些任务时我们需要给微处理器附加一些电路从而才能进行工作,所以在处理能力方面,微处理器比微控制器的处理能力强。我们都知道微控制器的内存容量并不像我们的PC机一样多,所以这也就要求我们微控制器的执行指令必须十分精简,大部分指令的长度都短于1个字节。而指令的精简在微处理器上表现并不是很明显这也是由于微处理器拥有强大的寻址模式从而导致指令的编码不够简洁。8086与51单片机的差异808651单片机+5V电源+5V电源(COMS版)时钟频率:5MHz~10MHz时钟频率:1.2MHz~12MHz16位外部数据线16位地址总线20位外部地址总线64KB程序存储器寻址空间可寻址1MB地址空间64KB片外数据存储寻址空间256个中断向量4KB片内程序存储器并行流水线处理结构128字节片内数据存储器8086CPU支持多处理器系统32根双向、可独立寻址的I/O线2个16位定时器/计数器1个全双工串口6个中断源/5个中断向量扩展的布尔处理能力(位处理)冯诺依曼结构哈佛结构此外在8086中能直接存出结果的仅有寄存器,必须连接/扩展外部存储器;而对于51单片机内部不但包含特殊功能寄存器还有一定的RAM,内部RAM与特殊功能寄存器的存取速度无异。冯诺依曼结构:程序和数据存储在同一个物理存储器上。哈佛结构:程序和数据存储在不同的物理存储器上。指令及寻址1、指令数量两者都是操作码占一个字节00~0FFH,按排列来说共有256条指令。但实际上8086却有297条指令(操作码中的特征位、方式字段和寄存器字段来区分操作数的位置、字长等),还有一些未用到的编码。51单片机有255条指令,只有十六进制数0A5H不是操作吗,但如果我们用Ri替代R0、R1和Rn替代R0~R7则51单片机的指令可精简至111条。我们可以看出,8086的指令容量逼51单片机的指令容量大的多,易于实现复杂操作但指令占用的存储资源多;51单片机的指令容量虽然有限,但它占用的资源少。2、寻址方式①.立即数寻址虽然二者的源操作数都可以是8/16位,但是51单片机仅有MOVDPTR,#data16这一条是16位的(其实质上是完成2条8位的立即数的传送指令,MOVDPH/DPL,#data8,因为特殊功能寄存器除PC外都仅在内部RAM占有一个地址)而8086的寄存器都是16位的,只是有时我们在使用时可以将那些可以拆分成两个8位的寄存器来使用。另外,对于51单片机立即寻址方式仅涉及程序存储器,而与数据存储器无关。②.直接寻址一、8051用#来区分是立即数还是内存单元,而8086则用[]来区分是内存单元还是立即数。二、51单片机的直接寻址范围是内部RAM的低128字节,高128字节是特殊功能寄存器所在的区域,而8086在合理设置的段寄存器的基础上可以遍寻外部1MRAM的任意单元。三、对于8051源和目的操作数可为直接寻址,但对于8086则不可以。③.寄存器寻址一、8086寄存器寻址的速度非常快,而这一点在51单片机体现不出来。二、除PC外,8086寄存器都可被寻址,而51单片机可寻址的寄存器有特殊功能寄存器还包含Rn.三、51单片机不允许Rn之间彼此赋值;8086寄存器寻址限制较多,不允许对段寄存器直接赋值,不允许段寄存器之间赋值等等。④.寄存器间接寻址寄存器间接寻址:是由直接寻址和寄存器寻址的有点结合而产生。对于51单片机来讲是访问高128位内部RAM唯一方法。但对8086来说同直接寻址方式一样,不允许源和目的操作数都是寄存器间接寻址,也就是说任何一条8086指令最多只能有一个操作数处理对象是存储器另一个必然是寄存器。⑤.相对寻址一、对于8086是基址寄存器+相对偏移量形成的,对取数据和程序转移都可以执行;对于51单片机则仅是针对程序转移用的,所以8051跳转及程序调用都是在程序存储器范围内而不可能跳转到数据存储器上的。二、二者的转移范围也是不同的,8051的转移范围是一个字节有符号数补码的表示范围-128~+127,8086的转移范围要大得多。⑥.基址变址寻址8086既可以查数据表,也可以用来作为程序散转的入口;8051仅是用于访问程序存储器中的数据表格。⑦.位寻址这是8051特有的,在其内部RAM中开辟了一些区域可以进行位操作;而8086则不行。比如在清/设置D7位的时候可能的方式有:1)ANDAL,7FH;清02)ORAL,80H;置11)CLRC;清02)SETBC;置18086CPU51单片机标志寄存器OF/DF/IF/TF/SF/ZF/AF/PF/CFDF控制字符串处理的方向为增址或减址IF中断允许标志位TF跟踪标志位,用于单步设置SF符号标志位与运算结果最高位相同ZF零标志位结果为零ZF=1,否则为0AF辅助半进位CF无符号溢出位若结果的最高位向更高位有进位,则CF=1,否则为0OF有符号溢出位加减法:若结果最高位向更高位进位,次高位向更高位进位以上二者一有一无,则无溢出乘法:对无符号数:若MUL积的高一半为0,OF=0;否则为1。对有符号数:若MUL积的高一半是低一半的符号的扩展,OF=0,否则为1。PF奇校验Cy/Ac/F0/RS1/RS0/OV/PF0用户自定义位RS1/RS0用来选择4组工作寄存器中的哪一组为当前工作寄存器区Ac辅助半进位Cy无符号溢出位若结果的最高位向更高位有进位时则Cy=1,否则为0。OV有符号溢出位加减法:(不含INCDEC)若结果最高位向更高位进位次高位向更高位进位以上二者一有一无,则无溢出以上二者两有两无,则有溢出乘法:若积的高一半为0,则OV=0,否则为1.除法:若除数B为0则为1,否则INC和DEC对OV无影响P偶校验定时器/计数器片内无定时器。片外常用8253。8253含3个定时器/计数器,属于减法计数器。当减到0时再根据各种方式的不同进行不同的处理。对CLK上的脉冲计数。片内自带2个定时器/计数器。属于加法计数器。加到0则溢出。对内部计数是每12个时钟周期加1.对外计数时P3.4或P3.5上的脉冲计数。存储器双字节数据存取入栈、出栈都是双字节操作符合高地址高字节,低地址低字节用DW定义则高地址高字节,低地址低字节执行LCALL/ACALLRET/RETI指令时符合高地址高字节,低地址低字节。用DW定义则高地址高字节,低地址低字节。存储器地址画法上边小地址下边大地址上边大地址下边小地址I/O端口编址IO端口和存储单元独立编址访问存储器用MOV访问IO端口用IN或OUTIO端口和片外RAM统一编址。访问IO端口用MOVX访问片外RAM存储器用MOVX寄存器访问方式CPU内的寄存器只给名称,不给地址。若访问那些可以被访问的寄存器,只能用名称21个特殊功能寄存器地址是显示的,若访问21个特殊功能寄存器,用寄存器名或地址都可以。