指令是指示计算机执行某种操作的命令,计算机能识别执行的只能是二进制代码,以二进制代码来描述指令功能的语言,称为机器语言。
由于机器语言不便于人们识别,记忆,理解和使用,因此便对每条机器语言指令用助记符号来形象表示,这就便形成了汇编语言。
一条指令是机器语言的一个语句,包括操作码字段和操作数字段。一台计算机所具有的全部指令的集合,称为这台计算机的指令系统。
不同的微处理器,其指令系统一般是不同的。
80C51单片机指令系统共有111条指令,具体特点如下:
1)执行时间短,单机器周期指令(64条),双机器周期指令(45条),而四机器周期指令只有2条;
2)指令编码字节少,单字节指令(49条),双字节指令(45条)和最长的三字节指令(17条);
3)位操作指令丰富(17条)。
为便于阅读指令,对MCS-51指令助记符的一些符号约定意义做以说明:
指令的基本格式及常用符号
指令的汇编语言形式是用助记符来表示一条指令,其基本形式为操作码+操作数。
操作码表示该指令将要做什么样的操作,操作数是该指令操作的对象,一般是操作所需要的数或所需要的数的存放地址。
指令的字节数
80C51单片机指令有单字节指令,双字节指令和三字节3种。
1)单字节指令单字节指令有49条,8位二进制代码中既包含操作码的信息,也包含操作数的信息;或8位二进制代码中只包含操作码的信息,而操作数的信息被隐含了。
例如:
机器码为1110 1xxx,其中1110 1为操作码,xxx为操作数n,若Rn为R3,那么xxx=011,则该机器码为EBH。
例如:
机器码为04H,被隐含的操作数为累加器A。
2)双字节指令有45条,机器码的第一个字节表示操作码,第二个字节表示操作数。
例如:
3)三字节指令有17条,第一字节表示操作码,另两个字节是操作数。
例如:
指令的执行时间
MCS-51系列单片机指令执行时间有单周期指令,双周期指令和四周期指令。
汇编语言的语句结构
一般来讲,汇编语言的语句结构由5部分组成,即标号,操作助记符,目的操作数,源操作数和注释.
如下:
[]表示可选项;标号是用户设定的地址符号,它代表该指令机器码存放在存储器中第一个字节的地址。
标号必须以字母开头,气候跟1-8个字母或数字,并以“:”结尾。
80C51的寻址方式
寻址方式就是寻找操作数的方式,由于80C51有片内RAM,片内ROM,片外RAM,片外ROM 4个不同的存储区域,数据存储的方式十分灵活。
在用汇编语言编程时,数据的存放传送,运算都要通过指令来完成。
所以编程者必须自始至终都要十分清楚操作数的位置,以及如何将它们传送到适当的寄存器去参与运算,才能有效地完成汇编程序的编写。
80C51单片机有7种寻址方式,即寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,变址寻址,相对寻址,位寻址。
源操作数和目的操作数都有各自的寻址方式,下面以源操作数为例来讲述寻址方式。
1.立即寻址
操作数就在指令代码中,在操作码之后,是一个8位的二进制数或者16位的二进制数,称为立即数,这种寻址方式称为立即寻址。
例如:
在80C51系统中,采用#作为立即数的前缀。
例如:
2.直接寻址
直接寻址是指令中直接给出操作数所在单元的地址。
采用直接寻址的存储空间有:1)内部RAM的低128字节(00H~7FH)2)位地址空间3)特殊功能寄存器,特殊功能寄存器只能用直接寻址方式操作
例如刚才说的例子就是直接寻址的方式。
在程序的转移,调用指令中,由于指令直接给出了目的地址,执行这些指令后,程序指针PC的内容将直接由指令给出的地址来更新,所以这些指令的寻址方式也可以归属为直接寻址。
3.寄存器寻址
由指令指出某一寄存器的内容为操作数,这种寻址方式称为寄存器寻址。
可以采用的寄存器有R0~R7,累加器A,寄存器B,数据指针DPTR和布尔处理器的位累加器C。
例如:
指令中源操作数R0是寄存器寻址。该指令的功能是将工作寄存器R0中的内容传送到A中,如R0中的内容为44H,则执行该指令后,A的内容也为44H。
在MCS-51中寄存器寻址Rn按所选定的工作寄存器R0~R7进行操作,指令机器码的低3位的8种组合000,001,....,110,111分别对应R0~R7。
例如:
这8条指令对应的机器码分别为E8H~EFH。
4.寄存器间接寻址
指令中给出寄存器的名称,以寄存器的内容为地址再取一次数,该数才是真正的操作数,这种寻址方式称为寄存器间接寻址。
在80C51系统中,可以用作间接寻址的寄存器有R0,R1,以及数据指针寄存器DPTR。
寄存器间接寻址对应的空间为:片内RAM:采用@R0,@R1,或SP片外RAM:采用@R0,@R1,或DPTR
5.变址寻址
以DPTR或PC为基址寄存器,累加器A为变址寄存器。把二者内容相加,结果作为操作数的地址,这种寻址方式称为变址寻址。
这类指令只限于访问ROM,常用语查表操作和指令跳转。
例如:
6.相对寻址
相对寻址方式是以PC的内容为基地址,加上指令中给定的偏移量,所得结果作为转移地址送PC寄存器。
偏移量是8位带符号数的补码,真值在-128~+127之间。以下一条指令的PC值为起点,转移访问范围在-128~+127。
它用于访问程序存储器,常出现在相对转移指令中。
例如:
是一条累加器A为0就转移的双字节指令,则执行该指令时的当前PC为2052H,即当前PC值是相对转移指令取指结束时的值。
偏移量rel是有符号的单字节数。以补码表示,其值范围在-128~+127。
负数表示从当前地址向前转移,正数表示从当前地址向后转移。所以,相对转移指令满足条件后,转移的地址为:
7.位寻址
从本质上来说,位寻址也是直接寻址的一种形式。它的寻址对象是可寻址位空间中的一个位,而不是一个字节。
由于在使用上存在一些特殊性,故单独列出。位寻址方式的寻址范围是可寻址位,包含内部RAM20H~2FH单元中的位和部分SFR位。
位操作指令中的位地址有4种表示方法:
1)直接地址,如00H
2)点操作符,如20H.0,PSW.5
3)位名称,如F0
4)经伪指令定义过的字符名称,如USER BIT PSW.5