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

控制/MCU

1878人已加入

描述

数据传送类指令

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

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

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

80C51

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

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

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

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

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

80C51

2)16位数据传送指令

80C51

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

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

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

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

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

3)特殊传送指令

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

ROM中常数读取指令

80C51

为了取出存放在程序存储器中的表格数据,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类的指令。

80C51

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

堆栈操作指令

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

80C51

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

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

数据交换指令

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

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

80C51

算术运算类指令

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

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

80C51

前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)带进位加法指令

80C51

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

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

3)加1指令

80C51

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

4)带借位减法指令

80C51

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

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

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

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

5)减1指令

80C51

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

6)乘除指令

80C51

两个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)逻辑与指令

80C51

2)逻辑或指令

80C51

3)逻辑异或指令

80C51

4)累加器清零指令

80C51

5)取反指令

80C51

6)移位指令

80C51

控制转移类指令

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

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

1)无条件转移指令

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

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

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

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

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

80C51

2)条件转移指令

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

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

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

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

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

80C51

3)调用及返回指令

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

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

80C51

布尔变量操作指令

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

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

1)位传送指令

80C51

2)位置位指令

80C51

3)位运算指令

80C51

4)位控制转移指令

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

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

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

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

80C51

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分