东南大学单片机教程1概述4指令系统_第1页
东南大学单片机教程1概述4指令系统_第2页
东南大学单片机教程1概述4指令系统_第3页
东南大学单片机教程1概述4指令系统_第4页
东南大学单片机教程1概述4指令系统_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章MCS-51的指令系统

4.1指令系统概述

指令和助记符:

指令本身是一组二进制数代码,为了便于记忆,将这些代码用具有一定含义的指令助记符来表示,助记符一般采用英文单词的缩写。指令代码助记符功能

740AMOVA,#0AH将十六进制数0AH

放入累加器A中指令分类说明:

MCS-51的基本指令共111条按功能分类(1)数据传送类(28条)

(2)算术操作类(24条(3)逻辑运算类(25条)

(4)控制转移类(17条)

(5)位操作类(17条)按指令所占的字节来分

(1)单字节指令(49条)(2)双字节指令(45条)(3)三字节指令(17条)按指令的执行时间来分(1)1个机器周期(64条)(2)2个机器周期(45条)(3)乘、除两条指令的执行时间为4个机器周期4.2数据传送类指令

通用格式:

MOV<目的操作数>,<源操作数>(属“复制”性质,而不是“搬家”)(数据传送类指令不影响标志位:Cy、Ac和OV,影响奇偶标志位P)1、以累加器为目的操作数的指令

MOVA,Rn;(Rn)→A,n=0~7

MOVA,@Ri;((Ri))→A,i=0,1

MOVA,direct;(direct)→A

MOVA,#data;#data→A例:

MOVA,R6;(R6)→A,寄存器寻址

MOVA,70H;(70H)→A,直接寻址

MOVA,@R0;((R0))→A,间接寻址

MOVA,#78H;78H→A,立即寻址

2、以Rn为目的操作数的指令

MOVRn,A;(A)→Rn,n=0~7

MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#dat;#data→Rn,n=0~7

功能:把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。3、以直接地址direct为目的操作数的指令

MOVdirect,A;(A)→direct

MOV direct,Rn;(Rn)→direct,n=0~7

MOVdirect1,direct2;direct2→direct1

MOVdirect,@Ri;((Ri))→direct

MOV direct,#data;#data→direct

功能:把源操作数送入直接地址指出的存储单元。

direct指的是内部RAM或SFR的地址。4、以寄存器间接地址为目的操作数的指令

MOV@Ri,A;(A)→((Ri)),i=0,1

MOV@Ri,direct;(direct)→((Ri))

MOV@Ri,#data;#data→((Ri))

功能:把源操作数指定的内容送入以R0或R1中内容为地址的片内存储单元。

例:

MOV@R0,AMOV@R1,20HMOV@R0,#34H5、16位数传送指令

MOVDPTR,#data16;#data16→DPTR

唯一的16位数据的传送指令

立即数的高8位送入DPH,立即数的低8位送入DPL。

例:MOVDPTR,#1234H

执行后DPH中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。

如下面两条指令

MOVDPH,#35H MOVDPL,#12H。

相当于执行了

MOVDPTR,#3512H。6、堆栈操作指令

堆栈区先进后出堆栈指针SP(1)进栈指令

PUSHdirect

先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中

例如:当(SP)=60H,(A)=30H,(B)=70H时

PUSHACC

;(SP)+1=61H→SP,(A)→61H

PUSHB

;(SP)+1=62H→SP,(B)→62H

结果:(61H)=30H,(62H)=70H,(SP)=62H

(2)出栈指令

POPdirectSP指示的单元内容送入direct字节单元中,栈指针SP减1。

例如:

当(SP)=62H,(62H)=70H,(61H)=30H时

POPDPH;((SP))→DPH,(SP)-1→SP

POPDPL;((SP))→DPL,(SP)-1→SP

结果:(DPTR)=7030H,(SP)=60H7、累加器A与外部数据存储器传送指令

MOVXA,@DPTR;((DPTR))→A,读外部RAM或I/O

MOVXA,@Ri;((Ri))→A,读外部RAM或I/O

MOVX@DPTR,A;(A)→((DPTR)),写外部RAM或I/O

MOVX@Ri,A;(A)→((Ri)),写外部RAM或I/O

功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。

注意:/RD或/WR信号有效采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)间接寻址,可寻址片外RAM的256个单元范围。高8位地址为P2口上一次锁存输出,低8位地址(Ri)由P0口输出。8、查表指令

共两条,用于读程序存储器中的数据表格的指令

(1)MOVCA,@A+PC

以PC作基址寄存器,A的内容和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。

注意:/PSEN信号有效。

例如:(A)=30H时,执行地址1000H处的指令

1000H:MOVCA,@A+PC(本条指令为1字节指令),执行结果将程序存储器中1031H的内容送入A

表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。(2)

MOVCA,@A+DPTR

以DPTR作为基址寄存器,A的内容和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.

例如:(DPTR)=8100H,(A)=40H,执行指令

MOVCA,@A+DPTR

执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址,表格的大小和位置可以在64K

程序存储器中任意安排,一个表格可为各个程序块公用。9、字节交换指令

XCHA,Rn XCHA,direct XCHA,@Ri

例如:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH

执行下列指令

XCHA,R7;(A)与(R7)互换

XCHA,40H;(A)与(40H)互换

XCHA,@R0;(A)与((R0))互换结果(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H

10、半字节交换指令

XCHDA,@Ri

累加器的低4位与内部RAM低4位交换。

例如:

(R0)=60H,(60H)=3EH,(A)=59H执行

XCHDA,@RO

则(A)=5EH,(60H)=39H。

11、累加器A半字节交换指令

SWAPA

;A4~7

«A0~34.3算术运算类指令主要用于8位无符号数运算;也可用于带符号数运算。包括:加、减、乘、除、加1、减1运算指令.指令操作将影响PSW中有关状态位。1、加法指令

ADDA,#data;A+data→A

ADDA,direct;A+(direct)→A

ADDA,Rn

;A+Rn→A

ADDA,@Ri

;A+(Ri)→A

用途:将A中的值与源操作数所指内容相加,最终结果存在A中。(1)不带进位位的加法指令例1:

ADDA,#47H ADDA,34H ADDA,R7 ADDA,@R0例2:MOVA,#0AEH ADDA,#81H

执行完,A中的值为2FH

PSW中状态位C=1,AC=0,OV=1,P=1

对无符号数:结果为12FH;

对带符号数:OV=1,有错。(2)带进位位的加法指令

ADDCA,Rn

;A+Rn+CY→A

ADDCA,direct

;A+(direct)+CY→A

ADDCA,@Ri

A+(Ri)+CY→A

ADDCA,#data

;A+data+CY→A

用途:将A中的值和操作数的值以及进位位C中的值相加,结果存在A。常用于多字节数运算中。例1:先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,PSW中的CY=1

。换言之,CY就相当于是100H。

然后再做10H+30H+CY,结果是41H,所以最终的结果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H例2:先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H,而PSW中的CY=0。

然后再做10H+30H+CY,结果是40H,所以最终的结果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H(3)

加1指令INCA

;A+1→A,影响P标志INCRn

;Rn+1→RnINCdirect

;(direct)+1→(direct)INC@Ri

;(Rn)+1→(Rn)INCDPTR

;DPTR+1→DPTR例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。

INCA

;A=13H

INCR0

;R0=34HINC21H

;(21H)=33HINC@R0

;(34H)=23H

INCDPTR

;DPTR=1235HDAA在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用来对BCD码加法运算结果进行自动修正。例:A=00010101

ADDA,#8

;A=1DH,按二进制规律加

DAA;A=23H,按十进制规律加(4)

十进制调整指令修正方法应是:(a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正。(b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正。2、减法指令SUBBA,Rn

;A-Rn-CY→ASUBBA,direct

;A-(direct)-CY→ASUBBA,@Ri

;A-(Ri)-CY→ASUBBA,#data ;A-data-CY→A将A中的值减去源操作数所指内容以及进位位C中的值,最终结果存在A中。说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要先将CY清零即可。(1)带借位的减法指令(2)减1指令DECA

;A-1→ADECRn

;Rn-1→RnDECdirect

;(direct)-1→(direct)DEC@Ri

;(Rn)-1→(Rn)

3、乘法指令MULAB

;A×B→BA此指令的功能是将A和B中的两个8位无符号数相乘,结果将为16位无符号数。其中高8位放在B中,低8位放在A中。在乘积大于FFH时,0V置1,否则OV为0;而CY总是0。例:

A=4EH,B=5DH,执行MULAB

指令后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。

4、除法指令DIVAB

;(A÷B)商→A

余数→B此指令的功能是将A中的8位无符号数除B中的8位无符号数,商放在A中,余数放在B中。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1。例:A=11H,B=04H

执行DIVAB

指令后,结果为:A=04H,B=1。4.4逻辑运算与循环类指令主要用于对2个字节操作数(按位)进行逻辑操作,结果送到A或直接寻址单元。主要操作与、或、异或、移位、取反、清零等对标志位的影响除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。1、逻辑或指令ORLA,Rn

;A∨Rn→AORLA,direct

;A∨(direct)→AORLA,@Ri

;A∨(Ri)→AORLA,#data

;A∨data→AORLdirect,A

;(direct)∨A→(direct)ORLdirect,#data

;(direct)∨data→(direct)影响P标志例:71H和56H相或:

01110001(71H) ∨)01010110(56H)

01110111即(77H)后两条指令,若直接地址为I/O端口,则为“读-改写”操作。2、逻辑与指令

ANLA,Rn

;A∧Rn→AANLA,direct

;A∧(direct)→AANLA,@Ri

;A∧(Ri)→AANLA,#data

;A∧data→AANLdirect,A

;(direct)∧A→(direct)ANLdirect,#data

;(direct)∧data→(direct)影响P标志例:71H和56H相与:

01110001(71H)

∧)01010110(56H)

01010000即(50H)后两条指令,若直接地址为I/O端口,则为“读-改写”操作。3、逻辑异或指令

XRLA,Rn

;A⊕Rn→AXRLA,direct

;A⊕(direct)→AXRLA,@Ri

;A⊕(Ri)→AXRLA,#data

;A⊕

data→AXRLdirect,A

;(direct)⊕

A→(direct)XRLdirect,#data

;(direct)⊕

data→(direct)影响P标志例:71H和56H相异或:

01110001(71H)

∧)01010110(56H)

00100111即(27H)后两条指令,若直接地址为I/O端口,则为“读-改写”操作。

4、取反与清0指令取反:

CPLA

;/A→A例:若A=5CH,执行CPLA

结果A=A3H清0:

CLRA

;0→A5、循环移位指令A.7

A.0A.7

A.0循环左移RLA

循环右移RRAA.7

A.0CYCYA.7

A.0此两条指令,影响P和CY标志。带进位位循环左移

RLCA

带进位位循环右移

RRCA例:若A=5CH,CY=1

执行RLCA

后结果A=B9H,CY=0,P=1对RLC、RRC指令,在CY=0时

RLC相当于乘以2 RRC相当于除以2010111001101110010综合举例:ANLA,#0FH

;屏蔽A的高4位SWAPAANLP1,#0FH

;清P1口高4位ORLP1,A

;P1口高4位输出A的低4位;

把累加器A中的低4位状态,通过P1口的高4位输出,P1口的低4位状态不变。4.5程序转移类指令此类指令一般不影响PSW。包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令1、无条件转移类指令短转移指令:AJMPaddr11

长转移指令:LJMPaddr16

相对转移指令:SJMPrel

间接转移指令:JMP@A+DPTR前三条指令区别:跳转的范围不同短转移类指令:AJMPaddr11

长转移类指令:LJMPaddr16

相对转移指令:SJMPrel转移范围:2KB64KB-128~+127指令构成不同。

AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。指令长度不同原则上,SJMP或AJMP都可以用LJMP来替代。散转指令:JMP@A+DPTR这条指令的用途也是跳转,转到什么地方去呢?往往由运算结果决定。转移地址由A+DPTR形成,并直接送入PC。指令对A、DPTR和标志位均无影响。本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。第四条指令不同之处:2、条件转移指令1)判A内容是否为0转移指令

JZrel

;如果A=0,则转移,否则顺序执行。

JNZrel

;如果A≠0,就转移。符合条件,转移到相对偏移量地址去。即:

新的PC值=当前PC+偏移量rel在编写汇编语言源程序时,可以直接写成:

JZ标号;即转移到标号处(目标地址标号)2)比较不等转移指令CJNEA,#data,rel

CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此类指令的功能是先将两个操作数进行比较。如果两者相等,就顺序执行;如果不相等,就转移,并影响C。不影响操作数。指令分析:使用时,可以将rel理解成标号,即:

CJNEA,#data,标号

CJNEA,direct,标号

CJNERn,#data,标号

CJNE@Ri,#data,标号利用这些指令,可以判断两个数是否相等。但有时还想得知两个数哪个大、哪个小,本指令也具有这样的功能。如果两个数不相等,CPU还会用CY来反映哪个数大哪个数小如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。3)减1不为0转移指令DJNZRn,relDJNZdirect,relDJNZ指令的执行过程:将第一个参数中的值减1,然后看这个值是否等于0。如果等于0,就往下执行;如果不等于0,就转移到第二个参数所指定的地方去。

例:

MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$执行过程:将23H单元中的数连续相加,存至A中,每加一次,23H单元中的数值减1,直至减到0,共加0AH次。3、子程序调用与返回指令1)调用指令

LCALLaddr16

;长调用指令

ACALLaddr11

;短调用指令用在主程序中调用子程序。对短调用指令,被调用子程序入口地址必须与调用指令下一条指令的第一字节在相同的2KB存储区之内。使用时可以用标号表示子程序首地址2)返回指令

RET

;子程序返回指令

RETI

;中断子程序返回指令子程序执行完后必须返回到主程序。两者不能互换使用。NOP空操作,停一个周期,一般用作短时间的延时。3)空操作指令

4.6位操作指令8051单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在8051中,有一部份RAM和一部份SFR是具有位寻址功能的。位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位00~7FH);可以位寻址的特殊功能寄存器。以PSW中位4(RS1)为例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论