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

2024-03-13  

指令是指示计算机执行某种操作的命令,计算机能识别执行的只能是二进制代码,以二进制代码来描述指令功能的语言,称为机器语言。


由于机器语言不便于人们识别,记忆,理解和使用,因此便对每条机器语言指令用助记符号来形象表示,这就便形成了汇编语言。


一条指令是机器语言的一个语句,包括操作码字段和操作数字段。一台计算机所具有的全部指令的集合,称为这台计算机的指令系统。

不同的微处理器,其指令系统一般是不同的。

80C51单片机指令系统共有111条指令,具体特点如下:

1)执行时间短,单机器周期指令(64条),双机器周期指令(45条),而四机器周期指令只有2条;

2)指令编码字节少,单字节指令(49条),双字节指令(45条)和最长的三字节指令(17条);

3)位操作指令丰富(17条)。

为便于阅读指令,对MCS-51指令助记符的一些符号约定意义做以说明:

poYBAGNzMjqAKDETAABRVnN7oy0821.png

指令的基本格式及常用符号

指令的汇编语言形式是用助记符来表示一条指令,其基本形式为操作码+操作数。

操作码表示该指令将要做什么样的操作,操作数是该指令操作的对象,一般是操作所需要的数或所需要的数的存放地址。

指令的字节数

80C51单片机指令有单字节指令,双字节指令和三字节3种。

1)单字节指令单字节指令有49条,8位二进制代码中既包含操作码的信息,也包含操作数的信息;或8位二进制代码中只包含操作码的信息,而操作数的信息被隐含了。

例如:

pYYBAGNzMk-ALxN8AAADcPIDwCo625.png

机器码为1110 1xxx,其中1110 1为操作码,xxx为操作数n,若Rn为R3,那么xxx=011,则该机器码为EBH。

例如:

poYBAGNzMmaAS3CNAAACw1L8X0g961.png

机器码为04H,被隐含的操作数为累加器A。

2)双字节指令有45条,机器码的第一个字节表示操作码,第二个字节表示操作数。

例如:

poYBAGNzMnqATTlNAAAG6B_M3co333.png

3)三字节指令有17条,第一字节表示操作码,另两个字节是操作数。

例如:

pYYBAGNzMoyALAxAAAAHJphZDc0282.png

指令的执行时间

MCS-51系列单片机指令执行时间有单周期指令,双周期指令和四周期指令。

汇编语言的语句结构

一般来讲,汇编语言的语句结构由5部分组成,即标号,操作助记符,目的操作数,源操作数和注释.

如下:

poYBAGNzMqWABAnpAAAIDDnD0Zc871.png

[]表示可选项;标号是用户设定的地址符号,它代表该指令机器码存放在存储器中第一个字节的地址。

标号必须以字母开头,气候跟1-8个字母或数字,并以“:”结尾。

80C51的寻址方式

寻址方式就是寻找操作数的方式,由于80C51有片内RAM,片内ROM,片外RAM,片外ROM 4个不同的存储区域,数据存储的方式十分灵活。

在用汇编语言编程时,数据的存放传送,运算都要通过指令来完成。

所以编程者必须自始至终都要十分清楚操作数的位置,以及如何将它们传送到适当的寄存器去参与运算,才能有效地完成汇编程序的编写。

80C51单片机有7种寻址方式,即寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,变址寻址,相对寻址,位寻址。

源操作数和目的操作数都有各自的寻址方式,下面以源操作数为例来讲述寻址方式。

1.立即寻址

操作数就在指令代码中,在操作码之后,是一个8位的二进制数或者16位的二进制数,称为立即数,这种寻址方式称为立即寻址。

例如:

poYBAGNzMsaAQsetAAAMoJKDdWo134.png

在80C51系统中,采用#作为立即数的前缀。

例如:

poYBAGNzMtuALmlfAAAML1oxvdg401.png

2.直接寻址

直接寻址是指令中直接给出操作数所在单元的地址。

采用直接寻址的存储空间有:1)内部RAM的低128字节(00H~7FH)2)位地址空间3)特殊功能寄存器,特殊功能寄存器只能用直接寻址方式操作

例如刚才说的例子就是直接寻址的方式。

pYYBAGNzMu6AB3bWAAAIYWO4lAU887.png

在程序的转移,调用指令中,由于指令直接给出了目的地址,执行这些指令后,程序指针PC的内容将直接由指令给出的地址来更新,所以这些指令的寻址方式也可以归属为直接寻址。

3.寄存器寻址

由指令指出某一寄存器的内容为操作数,这种寻址方式称为寄存器寻址。

可以采用的寄存器有R0~R7,累加器A,寄存器B,数据指针DPTR和布尔处理器的位累加器C。

例如:

pYYBAGNzMv6AfweQAAAD0p56vRk552.png

指令中源操作数R0是寄存器寻址。该指令的功能是将工作寄存器R0中的内容传送到A中,如R0中的内容为44H,则执行该指令后,A的内容也为44H。

在MCS-51中寄存器寻址Rn按所选定的工作寄存器R0~R7进行操作,指令机器码的低3位的8种组合000,001,....,110,111分别对应R0~R7。

例如:

poYBAGNzMxGAS1rpAAAE96S1t-Q040.png

这8条指令对应的机器码分别为E8H~EFH。

4.寄存器间接寻址

指令中给出寄存器的名称,以寄存器的内容为地址再取一次数,该数才是真正的操作数,这种寻址方式称为寄存器间接寻址。

在80C51系统中,可以用作间接寻址的寄存器有R0,R1,以及数据指针寄存器DPTR。

寄存器间接寻址对应的空间为:片内RAM:采用@R0,@R1,或SP片外RAM:采用@R0,@R1,或DPTR

5.变址寻址

以DPTR或PC为基址寄存器,累加器A为变址寄存器。把二者内容相加,结果作为操作数的地址,这种寻址方式称为变址寻址。

这类指令只限于访问ROM,常用语查表操作和指令跳转。

例如:

pYYBAGNzMyaAIe7hAAAUKMeBmBQ559.png

6.相对寻址

相对寻址方式是以PC的内容为基地址,加上指令中给定的偏移量,所得结果作为转移地址送PC寄存器。

偏移量是8位带符号数的补码,真值在-128~+127之间。以下一条指令的PC值为起点,转移访问范围在-128~+127。

它用于访问程序存储器,常出现在相对转移指令中。

例如:

poYBAGNzMzaAYX4ZAAADyY2I-fM985.png

是一条累加器A为0就转移的双字节指令,则执行该指令时的当前PC为2052H,即当前PC值是相对转移指令取指结束时的值。

偏移量rel是有符号的单字节数。以补码表示,其值范围在-128~+127。

负数表示从当前地址向前转移,正数表示从当前地址向后转移。所以,相对转移指令满足条件后,转移的地址为:

poYBAGNzM0iAYAyYAAAIgI0fmcw091.png

7.位寻址

从本质上来说,位寻址也是直接寻址的一种形式。它的寻址对象是可寻址位空间中的一个位,而不是一个字节。

由于在使用上存在一些特殊性,故单独列出。位寻址方式的寻址范围是可寻址位,包含内部RAM20H~2FH单元中的位和部分SFR位。

位操作指令中的位地址有4种表示方法:

1)直接地址,如00H

2)点操作符,如20H.0,PSW.5

3)位名称,如F0

4)经伪指令定义过的字符名称,如USER BIT PSW.5


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