理论教育 MCS-51系列微控制器指令系统的指令功能解析

MCS-51系列微控制器指令系统的指令功能解析

时间:2023-06-15 理论教育 版权反馈
【摘要】:MCS-51系列微控制器指令系统共分五类,并有单字节、双字节和三字节指令。这两条指令主要用于查表,即完成从程序存储器读取数据的功能。压栈指令用于保护片内某个单元的内容,出栈指令用于恢复片内某个单元的内容。

MCS-51系列微控制器指令系统的指令功能解析

MCS-51系列微控制器指令系统共分五类,并有单字节、双字节和三字节指令。

1.数据传送类指令

数据传送类指令共有28条,是指令系统中使用最频繁的指令,主要用于数据的保存及交换等场合。按其操作方式又可分为数据传送、数据交换和栈操作。

(1)内部数据传送指令MOV指令格式为MOV〈目的操作数〉,〈源操作数〉。这类指令的源操作数和目的操作数都在单片机内部,可以是片内RAM地址,也可以是特殊功能寄存器(SFR)的地址(立即数除外)。指令功能是把源操作数指定的字节变量复制到目的操作数所指定的单元或寄存器中,源字节不变。

(2)数据存储器(或I/O接口)的读写指令MOVX这类指令用于访问片外RAM或扩展的I/O接口。

1)用@DPTR进行间址寻址的指令

MOVXA,@DPTR ;A←((DPTR))

MOVX@DPTR,A ;(DPTR)←(A)

2)用@Ri进行间址寻址的指令

MOVXA,@Ri ;A←((Ri))

MOVX@Ri,A ;(Ri)←(A)

(3)存储器读指令

MOVC A,@A+DPTR ;A←((A)+(DPTR))

MOVC A,@A+PC ;A←((A)+(PC))

指令功能:把累加器A作为变址寄存器,将其中的内容与基址寄存器(DPTR、PC)的内容相加,得到程序存储器某单元的地址,再把该地址单元中的内容送累加器A。指令执行后,不改变基址寄存器内容。这两条指令主要用于查表,即完成从程序存储器读取数据的功能。

(4)堆栈操作指令(PUSH、POP)堆栈操作指令共有2条。压栈指令用于保护片内某个单元的内容,出栈指令用于恢复片内某个单元的内容。PUSHdirect;SP←(SP)+1,(SP)←(direct)POPdirect;direct←((SP)),SP←(SP)-1堆栈中的数据是“后进先出”的方式,由堆栈指针(SP)自动指向栈顶地址。

(5)数据交换指令

1)整字节交换指令:

XCH A,Rn ;将累加器A的内容和Rn内容互相交换。

XCH A,@Ri ;将累加器A的内容和以Ri的内容为地址所对应的单元的内容互相交换。

XCH A,direct ;将累加器A的内容和直接地址所对应的单元的内容互相交换。

以上3条指令把累加器A的内容与内部RAM及SFR中的内容互相交换,影响P标志。

2)低半字节交换指令:

XCHD A,@Ri ;累加器低4位与片内RAM某单元的低4位交换,高4位不变。

3)累加器高低半字节交换指令:

SW AP A ;将累加器A中的高4位与低4位内容互换,不影响标志位。

2.算术运算类指令

算术运算类指令共有24条,可以完成加、减、乘、除四则运算以及增量、减量和二-十进制调整操作。这类指令直接支持8位无符号数操作,借助溢出标志可对带符号数进行补码运算。算术运算指令执行结果将影响程序状态字(PSW)。它有加法指令、带借位减法指令、加1和减1指令、乘法指令、除法指令、二-十进制调整指令。

3.逻辑操作类指令

逻辑操作类指令共有25条,包括“与”、“或”、“异或”、清除、求反和左右移位等逻辑操作,这类指令除以累加器A为目的寄存器指令外,均不影响PSW中的标志位。它有逻辑“与”、“或”、“异或”指令,移位指令和清零、取反指令。

4.控制转移类指令

控制转移类指令共有17条,用于改变程序计数器(PC)值,以控制程序走向,并以程序存储器空间为操作对象。它有无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令。

5.位操作类指令

位操作类指令共有17条,它的操作数是字节中的某一位,每位取值只能是0或1,故又称之为布尔变量操作指令。布尔处理器的累加器Cy在指令中可简写成C。它有位传送指令、位变量修改指令和位逻辑运算指令。

6.主要伪指令功能简介

伪指令没有目标代码与之对应,它主要是为汇编程序服务的,常用的伪指令共有8条。(www.daowen.com)

(1)ORG

功能:汇编起始指令,一般用于规定汇编程序段或数据块的起始地址。

格式:[标号]:ORG 16位地址或标号。

说明:由ORG定义的地址空间必须从小到大,且不允许重叠。

例如:ORG 200H

ORG伪指令规定了LOOP标号地址为200H,则第一条指令及其后续指令汇编后的机器码从200H开始存放。

(2)END

END功能:汇编结束指令,用来指示汇编程序结束汇编的位置。

格式:[标号]:END

说明:END后面的语句将不被汇编成机器码。

(3)EQU

功能:赋值指令,用于给左边的“字符名”赋值。

格式:字符名 EQU 数据或汇编符号。

说明:“字符名”必须先赋值后使用,因此EQU通常放在源程序的开头。

(4)DATA

功能:数据(地址)赋值指令,用于给左边的“字符名”赋值。

格式:字符名DATA表达式;赋成8位数据字符名XDATA表达式;赋成16位数据或地址。

说明:指令功能与EQU相似,可以先使用后定义。表达式可以是一个数据或地址,也可以是包含被定义的“字符名”在内的表达式,但不能是汇编符号,如R0~R7等。

(5)BIT

功能:位地址赋值指令,用于给符号形式的位地址赋值。

格式:字符名 BIT 位地址。

说明:将右边的位地址赋给左边的字符名。

(6)DB

功能:定义字节指令,用于在程序存储器中定义一个或多个字节。

格式:[标号]:DB项或项表。

说明:把右边“项或项表”中的数据依次存入以左边标号地址起始的程序存储器中。

(7)DW

功能:定义字指令,用于在程序存储器中定义一个或多个字。一个字相当于2字节。

格式:[标号]:DW 项或项表。

说明:DW与DB的功能相似,区别在于DB定义1字节,而DW定义2字节。执行汇编程序后,机器自动按高字节在前、低字节在后的格式排列。

(8)DS

功能:定义存储空间指令,用于指示从标号地址开始留出一定量的存储空间。

格式:[标号]:DS 表达式。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈