MCS51单片机指令系统与汇编语言设计.docx
- 文档编号:6246874
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:24
- 大小:41.18KB
MCS51单片机指令系统与汇编语言设计.docx
《MCS51单片机指令系统与汇编语言设计.docx》由会员分享,可在线阅读,更多相关《MCS51单片机指令系统与汇编语言设计.docx(24页珍藏版)》请在冰豆网上搜索。
MCS51单片机指令系统与汇编语言设计
第2章MCS-51单片机指令系统与汇编语言程序设计
主要内容:
MCS-51单片机的寻址方式,指令系统,基本程序结构及汇编语言的开发和调试.重点在于寻址方式,各种指令的应用,程序设计的规范,程序设计的思想及典型程序的理解和掌握.难点在于控制转移,位操作指令的理解及各种指令的灵活应用,以及程序设计的基本方法和针对具体的硬件设计出最合理的软件.
指令系统:
一台计算机所能识别,执行的指令的集合就是它的指令系统.
机器语言:
指令系统是一套控制计算机执行操作的二进制编码,称为机器语言.机器语言指令是计算机惟一能识别和执行的指令.
汇编语言:
指令系统是利用指令助记符来描述的,称为汇编语言.
计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的.指令系统没有通用性.
单片机一般是空机,未含任何系统软件.因此在第一次使用前,必须对其进行编程,
2.1概述
2.1.1汇编语言指令格式与伪指令
1.常用单位与术语
位(bit):
位是计算机所能表示的最小的,最基本的数据单位,位通常是指一个二进制位.
字节(Byte):
一个连续的8位二进制数码称为一个字节,即1Byte=8bit.
字(Word):
通常由16位二进制数码组成,即1Word=2Byte.
字长:
字长是指计算机一次处理二进制数码位的多少.MCS-51型单片机是8位机,所以说它的字长为8位.
MCS-51系列单片机都是以Intel公司最早的典型产品8051为核心,增加了一定的功能部件后构成的.本章以8051为主介绍MCS-51系列单片机.
2.汇编语言指令格式
指令格式:
指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排.完整的指令格式如下:
[标号:
]操作码[操作数][,操作数][;注释]
其中:
[]项是可选项.
标号:
指本条指令起始地址的符号,也称为指令的符号地址.代表该条指令在程序编译时的具体地址.
操作码:
又称助记符,它是由对应的英文缩写构成的,是指令语句的关键.它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中不可缺少的内容.
操作数:
它既可以是一个具体的数据,也可以是存放数据的地址.
注释:
注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码.
伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值,保留和初始化存储空间,控制用户程序代码的位置.
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是CPU不能执行的指令.
(1)定位伪指令ORG
格式:
ORGn
其中:
n通常为绝对地址,可以是十六进制数,标号或表达式.
功能:
规定编译后的机器代码存放的起始位置.在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠.
例如程序:
ORG1000H
START:
MOVA,#20H
MOVB,#30H
┇
3.伪指令
(2)结束汇编伪指令END
格式:
[标号:
]END[表达式]
功能:
放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬.
(3)赋值伪指令EQU
格式:
字符名称xEQU赋值项n
功能:
将赋值项n的值赋予字符名称x.程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效.赋值项n可以是常数,地址,标号或表达式.在使用时,必须先赋值后使用.
"字符名称"与"标号"的区别是"字符名称"后无冒号,而"标号"后面有冒号.
(4)定义字节伪指令DB
格式:
[标号:
]DBx1,x2,…,xn
功能:
将8位数据(或8位数据组)x1,x2,…,xn顺序存放在从当前程序存储器地址开始的存储单元中.xi可以是8位数据,ASCII码,表达式,也可以是括在单引号内的字符串.两个数据之间用逗号","分隔.
xi为数值常数时,取值范围为00H~FFH.xi为ASCII码时,要使用单引号'',以示区别.xi为字符串常数时,其长度不应超过80个字符.
(5)定义双字节伪指令DW
格式:
[标号:
]DWx1,x2,…,xn
功能:
将双字节数据[或双字节数据组]顺序存放在从标号指定地址单元开始的存储单元中.其中,xi为16位数值常数,占两个存储单元,先存高8位(存入低位地址单元中),后存低8位(存入高位地址单元中).
(6)预留存储空间伪指令DS
格式:
[标号:
]DSn
功能:
从标号指定地址单元开始,预留n个存储单元,汇编时不对这些存储单元赋值.n可以是数据,也可以是表达式.
(7)定义位地址符号伪指令BIT
格式:
字符名称xBIT位地址n
功能:
将位地址n的值赋予字符名称x.程序中凡出现该字符名称x就代表该位地址.位地址n可以是绝对地址,也可以是符号地址.
(8)数据地址赋值伪指令DATA
格式:
字符名称xDATA表达式n
功能:
把表达式n的值赋值给左边的字符名称x.n可以是数据或地址,也可以是包含所定义的"字符名称x"在内的表达式,但不能是汇编符号.
DATA与EQU的主要区别是:
EQU定义的"字符名称"必须先定义后使用,而DATA定义的"字符名称"没有这种限制.所以,DATA伪指令通常用在源程序的开头或末尾.
2.1.2指令的分类
MCS-51指令系统有111条指令,可按下列几种方式分类:
按指令字节数分类
单字节指令(49条),双字节指令(46条)和三字节指令(16条).
2.按指令执行时间分类
单机器周期指令(65条),双机器周期指令(44条)和四机器周期指令(2条).
3.按功能分类
数据传送指令(29条),算术操作指令(24条),逻辑操作指令(24条),控制转移指令(17条)和位操作指令(17条).
2.1.3指令中的常用符号
Rn(n=0~7):
表示当前工作寄存器R0~R7中的任一个寄存器.
Ri(i=0或1):
表示通用寄存器组中用于间接寻址的两个寄存器R0,R1.
#data:
表示8位直接参与操作的立即数.
#data16:
表示16位直接参与操作的立即数.
direct:
表示片内RAM的8位单元地址.
addr11:
表示11位目的地址,主要用于ACALL和AJMP指令中.
addr16:
表示16位目的地址,主要用于LCALL和LJMP指令中.
rel:
用补码形式表示的8位二进制地址偏移量,取值范围为128~+127,主要用于相对转移指令,以形成转移的目的地址.
DPTR:
数据指针,用于寄存器间接寻址方式和变址寻址方式.
bit:
表示片内RAM的位寻址区,或者是可以位寻址的SFR的位地址.
A(或ACC),B:
表示累加器,B寄存器.
C:
表示PSW中的进位标志位Cy.
@:
在间接寻址方式中,表示间接寻址寄存器指针的前缀标志.
$:
表示当前的指令地址.
/:
在位操作指令中,表示对该位先求反后再参与操作.
(X):
表示由X所指定的某寄存器或某单元中的内容.
((X)):
表示由X间接寻址单元中的内容.
←:
表示指令的操作结果是将箭头右边的内容传送到左边.
→:
表示指令的操作结果是将箭头左边的内容传送到右边.
∨,∧,0:
表示逻辑或,与,异或.
2.1.3指令中的常用符号
2.2MCS-51单片机的寻址方式
寻址方式:
在计算机中,说明操作数所在地址的方法称为指令的寻址方式.
计算机执行程序实际上是在不断寻找操作数并进行操作的过程.
每种计算机在设计时已决定了它具有哪些寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂.
MCS-51单片机的指令系统提供了7种寻址方式,分别为立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,变址寻址,相对寻址和位寻址.一条指令可能含多种寻址方式.
2.2.1立即寻址
定义:
将立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址.
特点:
指令中直接含有所需的操作数.该操作数可以是8位的,也可以是16位的,常常处在指令的第二字节和第三字节的位置上.立即数通常使用#data或#data16表示,在立即数前面加"#"标志,用以和直接寻址中的直接地址(direc或bit)相区别.
2.2.2直接寻址
定义:
将操作数的地址直接存放在指令中,这种寻址方式称为直接寻址.
特点:
指令中含有操作数的地址.该地址指出了参与操作的数据所在的字节单元地址或位地址.计算机执行它们时便可根据直接地址找到所需要的操作数.
寻址范围:
ROM,片内RAM区,SFR和位地址空间.
2.2.3寄存器寻址
定义:
操作数存放在MCS-51内部的某个工作寄存器Rn(R0~R7)或部分专用寄存器中,这种寻址方式称为寄存器寻址.
特点:
由指令指出某一个寄存器的内容作为操作数.存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中.
寻址范围:
四组通用寄存器Rn(R0~R7),部分专用寄存器(A,B,DPTR,Cy).
2.2.4寄存器间接寻址
定义:
指令给出的寄存器中存放的是操作数据的单元地址.这种寻址方式称为寄存器间接寻址,简称为寄存器间址.
特点:
指令给出的寄存器中存放的是操作数地址.寄存器间接寻址是一种二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号"@".不能用于寻址特殊功能寄存器SFR.
寻址范围:
内部RAM低128B(只能使用R0或R1作间址寄存器),外部RAM(只能使用DPTR作间址寄存器).对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器.
2.2.5变址寻址
定义:
操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中.这种寻址方式称为基址加变址寄存器间接寻址,简称为变址寻址.
特点:
指令操作码中隐含作为基址寄存器用的DPTR(或PC)和作为变址用的累加器A.在执行变址寻址指令时,MCS-51单片机先把基地址(DPTR或PC的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作.变址寻址方式是单字节指令.
寻址范围:
只能对程序存储器ROM进行寻址,主要用于查表性质的访问.
注意:
累加器A中存放的操作数地址相对基地址的偏移量的范围为00H~FFH(无符号数).MCS-51单片机共有以下三条变址寻址指令:
MOVCA,@A+PC;(A)←(A)+(PC)+1
MOVCA,@A+DPTR;(A)←(A)+(DPTR)
JMP@A+DPTR;(PC)←(A)+(DPTR)
2.2.6相对寻址
定义:
将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字节给出的偏移量(rel)相加,形成新的转移目标地址.称为相对寻址方式.
特点:
相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码.
如:
SJMPrel;(PC)←(PC)+2+rel
相对转移指令的目的地址=指令地址+指令字节数+偏移量
寻址范围:
只能对程序存储器ROM进行寻址.相对地址偏移量(rel)是一个带符号的8位二进制补码,其取值范围为128~+127(以PC为中间的256个字节范围).
2.2.7位寻址
定义:
指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式.
特点:
位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作.
寻址范围:
片内RAM低128B中位寻址区,部分SFR(其中有83位可以位寻址).
可位寻址的位地址的表示形式如下:
(1)直接使用位地址形式.如:
MOV00H,C;(00H)←(Cy)
其中:
00H是片内RAM中20H地址单元的第0位.
(2)字节地址加位序号的形式.如:
MOV20H.0,C;(20H.0)←(Cy)
其中:
20H.0是片内RAM中20H地址单元的第0位.
(3)位的符号地址(位名称)的形式.对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位.如:
ANLC,P;(C)←(C)∧(P)
其中:
P是PSW的第0位,C是PSW的第7位.
(4)字节符号地址(字节名称)加位序号的形式.对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位.如:
CPLPSW.6;(AC)←()
其中:
PSW.6表示该位是PSW的第6位.
[例题1]指出下列指令的寻址方式
MOVA,R1;(A)←(R1)寄存器寻址
ADDA,#05H;(A)←(A)+立即数05H立即寻址
MOVA,@R1;(A)←((R1))寄存器间接寻址
MOV30H,4AH;(30H)←(4AH)直接寻址
MOVCA,@A+DPTR;(A)←((A)+(DPTR))变址寻址
SJMPLP;(PC)←(PC)+2+偏移量相对寻址
MOV65H,C;(65H)←(Cy)位寻址
2.3MCS-51单片机的指令系统
MCS-51指令系统使用44种助记符,它们代表着33种功能,可以实现51种操作.指令助记符与操作数的各种可能的寻址方式的结合一共可构造出111条指令.
MCS-51单片机指令系统按其功能可分为数据传送类指令,算术运算类指令,逻辑运算和移位类指令,控制转移类指令和位操作类指令五大类.
学习指令系统时,应注意:
(1)指令的格式,功能.
(2)操作码的含义,操作数的表示方法.
(3)寻址方式,源,目的操作数的范围.
(4)对标志位的影响.
(5)指令的适用范围.
(6)正确估算指令的字节数.
一般地,操作码占1字节;操作数中,直接地址derict占1字节,#data占1字节,#data16占两字节;操作数中的A,B,R0~R7,@Ri,DPTR,@A+DPTR,@A+PC等均隐含在操作码中.
2.3.1数据传送指令
CPU在进行算术和逻辑操作时,绝大多数指令都有操作数,所以数据传送是一种最基本,最主要的操作.
数据传送指令共29条,可分为内部RAM数据传送,外部RAM数据传送,程序存储器数据传送,数据交换和堆栈操作等五类.
寻址范围:
累加器A,片内RAM,SFR,片外RAM.
功能:
(目的地址)←(源地址).
可表示为:
←
源地址单元的内容不变.
对标志位的影响:
除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位.
1.内部RAM数据传送指令(16条)
格式:
MOV,
其中:
表示目的操作数,表示源操作数.
范围:
源,目的操作数均在片内RAM,SFR中.
指令形式:
按目的操作数可将内部数据传送指令分为以下几类.
(1)以累加器A为目的操作数(4条)
MOVA,
其中:
包括Rn,@Ri,direct,#data.(各个符号的意义见2.1.3节指令中的常用符号,以下同)
只影响PSW中的P标志位,不影响其他标志位.
(2)以工作寄存器Rn为目的操作数(3条)
MOVRn,
其中:
包括A,direct,#data.
(3)以直接地址单元为目的操作数(5条)
MOVdirect,
其中:
包括A,Rn,@Ri,direct,#data.
(4)以间址寄存器@Ri为目的操作数(3条)
MOV@Ri,
其中:
包括A,direct,#data.
(5)16位数据传送指令(1条)
MOVDPTR,#data16
注:
(2),(3),(4),(5)均不影响标志位.
内部数据传送指令的传送关系如右图所示.
2.外部RAM数据传送指令(4条)
CPU与外部数据存储器之间进行数据传送时,必须使用外部传送指令,只能通过累加器A,采用寄存器间接寻址(用R0,R1和DPTR三个间接寻址的寄存器)方式完成.
指令格式:
MOVXA,
MOVX,A
其中:
包括@DPTR,@Ri.Ri(R0,R1)只能访问片外RAM的低256个单元;DPTR可以访问片外RAM的全部64KB的空间.
对标志位的影响:
MOVXA,指令只影响PSW中的P标志位,不影响其他标志位;MOVX,A指令不影响标志位.
3.程序存储器(ROM)数据传送指令(查表指令)(2条)
程序存储器的数据传送是单向的,并且只能读到累加器A中.这类指令专门用于查表,又称为查表指令.
指令格式:
MOVCA,@A+DPTP;(A)←((A)+(DPTR))
MOVCA,@A+PC;(PC)←(PC)+1
(A)←((A)+(PC))
两条指令的异同:
其功能完全相同,但使用中存在着差异.
(1)查表的位置要求不同
采用DPTR作为基地址寄存器,表可以放在64KB程序存储器空间的任何地址,使用方便,故称为远程查表.
采用PC作为基地址寄存器,具体的表在程序存储器中只能在查表指令后的256B的地址空间中,使用有限制,故称为近程查表.
(2)偏移量的计算方法不同
采用DPTR作为基地址寄存器,查表地址为(A)+(DPTR).采用PC作为基地址寄存器,查表地址为(A)+(PC)+1.因此偏移量的计算方法不同.
采用DPTR作为基地址寄存器,A为欲查数值距离表首地址的值;采用PC作为基地址寄存器,A的值必须预先设置为:
A的值=表首地址-当前指令的PC值-1
4.数据交换指令(5条)
数据传输时,若需要保存目的操作数,则经常采用数据交换指令.
(1)半字节数据交换指令(2条)
指令格式:
SWAPA;(A)3~0←→(A)7~4
XCHDA,@Ri;(A)3~0←→((Ri))3~0
(2)字节交换指令(3条)
指令格式:
XCHA,
其中:
包括Rn,@Ri,direct.
5.堆栈操作指令(2条)
指令格式:
PUSHdirect;SP←(SP)+1,((SP))←(direct)
POPderect;(direct)←((SP)),SP←(SP)1
特点:
堆栈操作指令是一种特殊的数据传送指令,是根据栈指针SP中的栈顶地址进行数据操作.堆栈操作指令的实质是以栈指针SP为间址寄存器的间址寻址方式.堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H.为了避免重叠,一般初始化时要重新设置SP.
功能:
实现RAM单元数据送入栈顶或由栈顶取出数据送至RAM单元.
适用场合:
用于执行中断,子程序调用,参数传递等程序的断点保护和现场保护.
书写方式:
堆栈操作指令是直接寻址指令,直接地址不能是寄存器名,因此应注意指令的书写格式.例如:
PUSHACC(不能写成PUSHA)
POP00H(不能写成POPR0)
2.3.2算术运算指令
算术运算指令的两个参与运算的操作数,一个存放在累加器A中(此操作数也为目的操作数);一个存放在R0~R7或@Ri(片内RAM)中,或是#data(立即数).
算术运算指令可以分为加法指令,带进位的加法指令,带借位的减法指令,十进制调整指令,加1指令,减1指令,乘除指令.
1.加法指令(4条)
指令格式:
ADDA,;(A)←(A)+
其中:
包括Rn,@Ri,direct,#data.
对标志位的影响:
ADD对PSW中的所有标志位均产生影响.
2.带进位的加法指令(4条)
指令格式:
ADDCA,;(A)←(A)++(Cy)
其中:
包括Rn,@Ri,direct,#data.
对标志位的影响:
ADDC对PSW中的所有标志位均产生影响.
3.带借位的减法指令(4条)
指令格式:
SUBBA,;(A)←(A)--(Cy)
其中:
包括Rn,@Ri,direct,#data.
对标志位的影响:
SUBB对PSW中的所有标志位均产生影响.
注意:
MCS-51指令系统中没有不带借位的减法指令,欲实现不带借位的减法计算,应预先置Cy=0(利用CLRC指令),然后利用带借位的减法指令SUBB实现计算.
4.十进制调整指令(1条)
功能:
跟在加法指令ADD或ADDC后面,对运算结果的十进制数进行BCD码修正,使它调整为压缩的BCD码数,以完成十进制加法运算功能.
特点:
十进制调整指令也称为BCD码修正指令,这是一条专用指令.两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和.源操作数只能在累加器A中,结果存入A中.
指令格式:
DAA
注意:
十进制调整指令不能对减法指令进行修正.BCD码减法必须采用BCD补码运算法则,变减法为补码加法(被减数+减数的补码,减数的补码=9AH-减数).然后对其进行十进制调整来实现.
5.加1指令(5条)
功能:
加1指令又称为增量指令,其功能是使操作数所指定的单元的内容加1.
指令格式:
INC;←+1
其中:
即是源操作数又是目的操作数(即只有一个操作数),包括A,Rn,direct,@Ri,DPTR.
对标志位的影响:
除对累加器A操作影响P标志位外,其他操作均不影响PSW的各标志位.
6.减1指令(4条)
功能:
减1指令又称为减量指令,其功能是使操作数所指定的单元的内容减1.
指令格式:
DEC;←-1
其中:
即是源操作数又是目的操作数(即只有一个操作数),包括A,Rn,direct,@Ri.
对标志位的影响:
同加1指令.
7.乘除指令(2条)
功能:
实现乘法或除法操作.
特点:
乘除指令在MCS-51指令系统中执行时间最长,均为四周期指令.
指令格式:
MULAB;(B)(A)←(A)×(B)
DIVAB;(A)←(A)/(B)…(B)
对标志位的影响:
乘除指令影响PSW中的Cy,OV,P标志位.其中,Cy位总是被清0的,P是由累加器A中1的个数的奇偶性决定的.乘法运算中,若乘积大于FFH,则OV标志位置1,否则清0.除法运算中,若除数为0,则OV标志位置1,否则清0.
2.3.3逻辑运算和移位指令
对标志位的影响:
逻辑运算和移位指令中除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位.但当目的操作数是累加器A时,影响PSW中的奇偶校验位P.
常用的逻辑运算和移位类指令有:
逻辑与,逻辑或,逻辑异或,循环移位,清0,求反(非)等24条指令,它们的操作数都是8位的.逻辑运算都是按位进行的,除用于逻辑运算外,还可用于模拟各种数字逻辑电路的功能,进行逻辑电路的设计.
1.逻辑与运算指令(6条)
功能:
实现两个操作数的逻辑与.
指令格式:
ANLA,
其中:
包括Rn,@Ri,direct,#data.
ANLdirest,
其中:
包括A,#data.
适用场合:
实现逻辑与,主要用于操作数的某些位不变(这些位与"1"),某些位置0(这些位与"0").
2.逻辑或运算指令(6条)
功能:
实现两个操作数的逻辑或.
指令格式:
ORLA,
其中:
包括Rn,@Ri,direct,#data.
ORLdirest,
其中:
包括A,#data.
适用场合:
实现逻辑或,主要用于操作数的某些位不变(这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS51 单片机 指令系统 汇编语言 设计