一文详解80C51单片机的指令集

发布时间:2024-03-13  

数据传送类指令

数据传送是单片机最基本的操作。数据传送的一般功能是将源操作数传送到指令所指定的目的操作数,指令执行后,源操作数不变。


数据传送类指令一般不影响标志位。数据传送类指令共29条,可以分为两大类。一是采用MOV操作符,称为一般传送指令,共16条;二是采用非MOV操作符,称为特殊传送指令,共13条。

一般传送指令的汇编指令格式为:

pYYBAGNzNFaAFKaAAAAGXy7dwEk215.png

MOV是传送指令的操作助记符。其功能是将源操作数传送到目的操作数,源操作数内容不变。

该类指令的助记符,操作数,功能,字节数及执行时长(机器周期数),按目的操组数归类如下。

1)内部8位数据传送指令

内部RAM区是数据传送最活跃的区域,8位内部数据传送指令共15条,用于单片机内部的数据存储器和寄存器之间的数据传送。

有立即寻址,直接寻址,寄存器寻址及寄存器间接寻址等寻址方式。

poYBAGNzNGqAHWAXAAA83QNWWWA318.png

2)16位数据传送指令

poYBAGNzNHuAJKJIAAAJJ7mZ3Ko190.png

该指令是80C51指令集中唯一的一条16位数据传送指令,其作用是将外部存储器某单元地址送到数据指针DPTR。

这个存储单元可以是外部RAM也可以是外部ROM,也可以是扩展的片外接口地址。

如果地址传送到DPTR后用刀MOVC,则一定是ROM地址;用到的是MOVX,则一定是RAM地址或片外接口地址。

以上一般数据传送指令中,可以用4种目的字节为基础来构造4类指令。

使用时请注意:除direct外,源字节寻址与目的字节方式是不相同的;Rn寄存器寻址与寄存器间接寻址间不相互传送;只有以累加器A作为目的操作数的指令,才可能影响奇偶标志P。

3)特殊传送指令

特殊传送指令包括:ROM查表,读/写外部RAM,堆栈操作和交换指令,共13条。

ROM中常数读取指令

poYBAGNzNI-AIMdSAAANH5VXpEU004.png

为了取出存放在程序存储器中的表格数据,80C51单片机提供了两条查表指令,这两条指令的操作码助记符为MOVC(move code),表示操作对象是程序存储器。

指令MOVC A, @A+PC 以PC为基址寄存器,A为变址寄存器,A中的8位无符号数与PC内容(该指令的吓一跳指令的起始地址)相加后得到一个16位ROM地址,然后将该地址单元的内容取出送累加器A。

指令MOVC A, @A+DPTR 以DPTR 为基址寄存器,A为变址寄存器,A中的8位无符号数与DPTR 内容相加后得到一个16位ROM地址,然后将该地址单元的内容取出送累加器A。

片外RAM的读/写指令

使用MOV类指令,内部RAM单元内容可以有很多种灵活的数据传送方式,而外部RAM数据的传送只能与A进行,且必须使用助记符为MOVX类的指令。

pYYBAGNzNKKAVpQsAAAVVa7ou0c271.png

注意指令以Ri为间接寻址寄存器的,对外部RAM的寻址空间为256字节。而DPTR的寻址空间是整个64KB的片外RAM。

堆栈操作指令

堆栈操作是通过指令来完成的。将数据送入堆栈的过程称为压栈操作,而从堆栈中取出数据的过程称为弹出(出栈)操作。

poYBAGNzNLSAXE52AAAKO8-MseU721.png

压栈指令的功能是先将堆栈指针SP的内容加1,然后将指令指定的直接寻址单元内容传送至栈顶单元。

出栈指令的功能是将当前堆栈指针SP所指示的单元的内容传送到该指令指定的单元中,然后SP中的内容减1。

数据交换指令

数据传送都是源操作数传送到目的操作数,而源操作数不变,数据流是单方向的;数据交换类指令则是双方向的,源和目的操作数都会发送改变。

XCH 为字节交换,XCHD为半字节交换(仅交换低4位数据),SWAP是自交换(高4位与低4位交换)。

poYBAGNzNM6AHuM5AAAUJRCBEy0341.png

算术运算类指令

算术操作指令共有24条,可分为加减乘除和BCD码调整指令,除加1减1指令外,算术运算指令的执行结果都将影响CY,AC,OV标志。

1)不带进位加法指令及BCD码加法调整指令

pYYBAGNzNOKAK_JqAAAT2mI_PJM605.png

前4条指令都是两个数相加后将结果送给A,参与运算的都是两个8位二进制数。

对于微型计算机作加法时,做的是纯正的二进制数相加,但对用户来说,这些8位的二进制数,可能是无符号数,有符号数的补码,还可能是BCD码。为此,微型计算机设计了若干个结果标志或调整指令供用户使用。

无符号数相加:若相加结果超8位,则CY为1,表示产生进位,否则CY为0。

有符号数相加:8位二进制数表示的十进制范围为-128~127,当相加结果不在这个范围时,OV为1,表示溢出。OV为1表示加法运算的结果不可用。

BCD码相加:若两个BCD数相加结果大于1001,则要加0110进行调整;若两个BCD数相加结果在本位上并不大与1001,但产生了进位,相当于计算结果大于9,那么也要加0110进行调整。调整指令用专用这指令DA A。

2)带进位加法指令

poYBAGNzNQOAIslPAAASY-9BNd0518.png

这4条指令是将累加器A中的值与源操作数以及进位CY中的值相加,结果送A。常用于多字节数的加法运算中。

需要注意的是这里的CY是指令开始执行时的进位标志位,不是相加后产生的。

3)加1指令

pYYBAGNzNRSAMf69AAARjqGrUPw350.png

加法仍按无符号二进制数进行,只有INC A影响就标志P,其余指令不影响标志位。

4)带借位减法指令

pYYBAGNzNSWAC-23AAASLvpY2VY090.png

这4条指令的操作是,将A与源操作数及进位标志相减,结果回送到A。

无符号数相减:CY为1表示D7位有错位,否则CY为0。CY为1就表示A < 源操作数。

有符号数相减:若OV为1,表明补码减法运算结果超出8位二进制数表示范围。

若要进行不带进位的减法运算,只要将CY清0即可。

5)减1指令

pYYBAGNzNTSAfVYUAAAPLCxmCmo449.png

只有DEC A会影响奇偶标志P。

6)乘除指令

poYBAGNzNUeAE748AAAKBl51KdE758.png

两个8位无符号数相乘结果为16位无符号数,乘积的低8位存放在A,高8位存放在寄存器B。

如果乘积超过0FFH,则OV为1,否则清零。CY总为0,P仍按A中1的奇偶来确定。

两个8位无符号数相除的商存放在A,余数存放在B。如果除数B为0,则OV为1。CY总为0,P仍按A中1的奇偶来确定。

逻辑运算类指令

逻辑运算指令共24条,包括逻辑与,或,异或,清零,取反,移位的指令。

1)逻辑与指令

pYYBAGNzNV6ALzMGAAAYMROKfdE606.png

2)逻辑或指令

poYBAGNzNXGAIy7SAAAYkuL4oiE437.png

3)逻辑异或指令

poYBAGNzNY2AQdbZAAAZVmNg3u4476.png

4)累加器清零指令

poYBAGNzNaqAIUW6AAAG1-3n2Ik839.png

5)取反指令

poYBAGNzNb2AYpr5AAAGTMXHLTM162.png

6)移位指令

poYBAGNzNc-AHGkqAAANpXmS3j0419.png

控制转移类指令

通常情况下,微机是顺序执行程序的,但在有些情况下需要改变程序的走向,控制转移类指令就是可以改变程序运行走向的指令。

80C51共16条,包括无条件转移指令,条件转移指令以及子程序调用和返回指令。

1)无条件转移指令

无条件转移指令是当程序执行该指令时,不需要任何条件,程序自动转移到该指令所指的目的地址运行新的程序段。

AJMP 为短转移指令,在译成机器码时,只取目的地址的低11位,高5位使用PC地址的高5位。很明显这是一条跳转范围为2KB的指令。

SJMP为相对转移指令,双字节指令,rel为有符号的补码,所以转移的目标地址在SJMP指令前126B到后129B之间。

LJMP为长转移指令,该指令可以使程序从当前地址转移到64KB程序存储器地址空间的任意地址。

JMP为散转移指令,该指令以DPTR和A的内容进行无符号相加后作为PC的新目标地址,可以实现64KB范围内的转移。该指令的特点是根据A的值不同实现多分支转移。

pYYBAGNzNeGAOnZRAAAR8FXMJBA574.png

2)条件转移指令

条件转移指令是指在满足指定条件时就进行转移,否则程序继续执行本指令的下一条指令。条件转移指令都是相对转移。

JZ指令是当A的内容为0就转移,而JNZ相反。

CJNE指令比较转移指令,是对两个操作数进行比较,然后根据比较结果来决定是否转移到目的地址。若不相等就转移,相等就顺序执行。

CJNE指令影响CY标志位,若目的操作数大于源操作数,则CY为0,反之为1。

DJNZ指令为减1非零转移指令。对操作数减1,并保存结果,判断值是否为0,为0就往下执行,否则跳转。

pYYBAGNzNfOAJRQRAAAhf7clYyg057.png

3)调用及返回指令

ACALL和LCALL会将断点地址压栈,RET会将断点地址出栈,弹回PC。

RETI是从中断服务子程序返回的指令,在RET的功能基础上,它还要清除80C51单片机内部的中断优先级状态触发器,使得已申请的同级或较低级的中断申请可以得到响应。

poYBAGNzNgeAJr88AAAO5KIyZWg038.png

布尔变量操作指令

布尔变量即开关量,是以位为基本单位来进行运算和操作的。80C51系统具有对位变量的处理能力,它有自己的累加器CY,称为位累加器,有自己的位存储空间,还有自己独立的运算处理硬件系统和软件指令系统,共17条。

为方便书写,指令中的C代表CY。

1)位传送指令

poYBAGNzNhyANAD3AAALAq96ic8938.png

2)位置位指令

pYYBAGNzNjCANRpsAAAOFic2RjE504.png

3)位运算指令

pYYBAGNzNqqAMx6UAAAUp0IjTPk671.png

4)位控制转移指令

位控制转移指令都是条件转移指令,它是以CY或者位地址bit的内容作为是否转移的条件。

JC/JNC是当CY为1/0时转移的指令,该指令适用于比较两个操作数大小的分支转移。

JB/JBC/JNB是以位地址bit内容判断是否要转移的。JB/JBC当(bit)为1时转移,而JNB为当(bit)为0时转移。JBC还具有将该bit清零的功能。

NOP为空操作,只消耗时间。

poYBAGNzNsOAFa8rAAAUCLh5LQU166.png


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>