单片机原理及应用第三章课件_第1页
单片机原理及应用第三章课件_第2页
单片机原理及应用第三章课件_第3页
单片机原理及应用第三章课件_第4页
单片机原理及应用第三章课件_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

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

文档简介

第3章MCS-51系列单片机指令系统.知识点:单片机指令的格式7种寻址方式常用的指令伪指令.3.1MCS-51单片机指令系统概述3.1.1概述1.指令的定义指令是使计算机完成某种操作的命令。计算机能够执行的全部操作所对应的指令集合,称为该计算机的指令系统。.2.指令的属性指令一般由功能、时间和空间三种属性。功能属性是指每条指令所对应一个特定的操作功能;时间属性是指一条指令执行所用的时间,一般用机器周期来表示;空间属性是指一条指令在程序存储器中存储所占用的字节数。.1、振荡周期:为单片机提供定时信号的振荡源的周期。2、状态或时钟周期(S):振荡脉冲经二分频后得到的时钟信号,把时钟信号的周期称为状态,用S表示。一个状态包括两个拍P1和P2(前拍和后拍)。是最基本的时间单位。拍(P):振荡脉冲的周期,用P表示。是晶体的振荡周期,或是外部振荡脉冲的周期,是MCS-51单片机中最小的时序单位。.3、机器周期:CPU完成一个基本操作所需的时间称为机器周期。由6个状态(12拍)组成。4、指令周期:是执行一条指令所需要的时间。是MCS-51单片机最大的时序单位。一个指令周期通常含有1~4个机器周期。.P1P2S1振荡周期时钟周期机器周期机器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P2.举例:若MCS-51单片机外接晶振为12MHz时,则单片机的四个周期的具体值分别为:振荡周期=1/12MHz=(1/12)μs=0.0833μs时钟周期=1/6μs=0.167μs机器周期=1μs指令周期=1~4μs.3.1.2指令格式[标号:]操作码[目的操作数][,源操作数][;注释]操作码(Opcode)表示计算机执行该指令将进行何种操作操作数(Operand)表示参加操作的数的本身或操作数所在的地址,可以有1~3。例:LOOP:MOVA,#40H;取参数.3.1.3操作数的类型[标号:]操作码[目的操作数][,源操作数][;注释]立即数寄存器操作数存储器操作数.3.1.4指令描述约定

Rn——当前寄存器组的8个通用寄存器R7~R0;@Ri——通过寄存器R1或R0间接寻址的8位片内数据RAM单元;direct——内部RAM或SFR,表示对它们直接寻址,直接寻址中的地址,若以十六进制数A~F开头,其前面应加前导0。#data——指令中的8位立即数,立即数若以十六进制数A~F开头,其前面应加前导0;bit——内部RAM或SFR中的直接寻址位;(X)——X中的内容;((X))——X所指向单元中的内容。.3.2MCS-51单片机的寻址方式3.2.1概述寻址就是寻找指令中操作数或操作数所在的地址。MCS-51单片机寻址方式有7种:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、基寄存器加变址寄存器间接寻址、相对寻址、位寻址。.3.2MCS-51单片机的寻址方式3.2.2寻址方式说明1.立即寻址操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找,故称为立即寻址。汇编指令中,在一个数的前面冠以"#"符号作前缀,就表示该数为立即寻址。.

MOVA,#5;将字节数据05H送A,指令执行后A=05HMOVDPTR,#0A000H;字A000H送DPTR,指令执行后DPTR=A000HADDA,#64H;将A的内容和立即数64H相加,结果再送A。若指令执行前,A=12H;指令执行后,A=76H立即寻址方式主要用来给寄存器或内部数据存储器赋初值,也可以与累加器A作加减运算,还可以和累加器A、内部数据存储器、特殊功能寄存器进行逻辑运算。.2.寄存器寻址

操作数据在寄存器(累加器ACC,数据指示器DPTR,通用寄存器Rn,寄存器B)中,如:例:MOVA,R0若执行前,A=35H,R0=78H;执行该指令后,A=R0=78H。例:ADDA,R1若执行前,A=20H,R1=85H;执行该指令后,A=A5H,R1=85H。.3.直接寻址

操作数据在内部数据存储器或特殊功能寄存器中。内部数据存储器或特殊功能寄存器的地址由指令直接给出,也可以给出特殊功能寄存器的名称。例:设存储器两个单元的内容如图所示,执行指令MOVA,40H后A=?41H

78H40H

56H注意:采用直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。.MOV20H,#20H;将立即数20H送给内部RAM20H单元MOVPSW,#08H;立即数8送PSW,选择1组通用寄存器MOVA,80H;(MOVA,P0).4.寄存器间接寻址

操作的数据在数据存储器中,存储器的地址在指令给出的寄存器中,即寄存器的内容为操作数据的地址。

只有寄存器R1,R0和DPTR可以用作数据存储器的间址寄存器。DPTR间址仅用于MOVX传送指令,对外部数据存储器或扩展I/O间接寻址。间接寻址用@后跟间址寄存器名表示。MOV@R0,#86H

MOVX@DPTR,#78H

.图3.1寄存器间接寻址示意图MOVA,@R1.例: MOVA,@R0 ;A¬(R0)设指令执行前A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=?,R0=?,(40H)=?间接寻址的主要优点是只要对间址寄存器作适当的修改,一条指令就可以对许多不同的数据存储器单元进行访问。循环程序设计中,多用间接寻址。

41H 67H

40H34H34H40H34H.5.基寄存器加变址寄存器间接寻址

操作数为程序存储器的地址,该地址是由数据寄存器DPTR或程序计数器PC加上累加器A的内容形成的16位地址。MOVCA,@A+DPTR210085DPTRA51地址:2185相加51程序存储器.6.位寻址

操作数据就是指令给出的内部数据存储器或特殊功能寄存器的位。MCS-51单片机只有内部RAM20H~2FH的16个单元和部分SFR有位寻址,因此要注意位寻址的寻址范围。

例:MOVC,40H ;Cy¬(位地址40H)。设指令执行前Cy=1,位地址40H存储器单元如图,执行指令后,Cy=?28H0110001029H11010111位寻址区0.位寻址的表示方式:(1)直接位地址,如0D5H(立即数和直接寻址中的地址,若以十六进制数A~F开头,其前面应加前导0);(2)点操作符,如PSW.5或0D0H.5;(3)位名称,如F0;(4)用户定义名,如用位定义伪指令BIT将位地址D1即PSW.1定义为用户标志位F1,其定义为:

F1BITPSW.1注意:由于位地址与内部RAM,SFR的单元地址在形式上相同,因此位地址最好不用直接位地址形式,而用其他形式。如:MOVC,24H.0.练习:说明下列源操作数的寻址方式?MOVA,#80HPUSHACCMOV28H,R4MOVXA,@DPTRMOVCA,@A+DPTRMOVA,@R0CLRCSETB00H.MCS-51单片机指令系统共有111条指令。从功能上可划分成数据传送、算术操作、逻辑操作、程序转移位操作等五大类;从空间属性上分为单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条)。从时间属性上可分成单机器周期指令(64条)、双机器周期指令(45条)和只有乘、除法两条4个机器周期的指令。3.3MCS-51单片机的指令系统.3.3.1数据传送类指令

数据传送是一种最大量﹑最基本﹑最主要的操作。数据传送类指令的特点是把数据从计算机的一个部位传送到另一个部位。把发送的部位称之为源(source),接收的部位称之为目的地(dest)。MCS-51单片机设置了数据传送指令和数据交换指令两种数据传送类指令。..3.3.1数据传送类指令(一)数据传送指令指令格式:MOVdest,sourceMOVCA,sourceMOVXA,source或MOVXdest,A指令的意义是将一个字节操作数从源传送到目的地(源保持不变)。

.3.3.1数据传送类指令传送指令的操作数及其传送方向如图所示@Ri内部RAM@A+DPTR@A+PC程序存储器@Ri、@DPTR外部RAM#datadirectARnDPTR16位数MOVC(1)(5)(3)(7)(6)(15)(9)(4)(16)(10)(8)(11)(12)(2)(13)(14)MOVX.由图可知:立即操作数和程序存储器操作数只能作源操作数;外部数据存储器和程序存储器操作数仅能与累加器A进行数据传送;仅立即数送数据寄存器DPTR的指令为字操作,其余指令均为字节操作。

.3.3.1数据传送类指令1.MOV指令MOV指令有如下16种形式:(1)MOVA,#data;立即数送累加器A(2)MOVRn,#data;立即数送通用寄存器R7~R0(3)MOVdirect,#data;立即数送内部RAM或特殊功能寄存器(4)MOV@Ri,#data;立即数送R1或R0间址的内部RAM(5)MOVDPTR,#data;立即数送数据寄存器DPTR(6)MOVdirect,direct;内部RAM或SFR间的数据传送(7)MOVdirect,Rn;通用寄存器R7~R0送内部RAM或SFR(8)MOVRn,direct;内部RAM或SFR送通用寄存器R7~R0(9)MOVdirect,A;累加器A送内部RAM或SFR(10)MOVA,direct;内部RAM或SFR送累加器A(11)MOVRn,A;累加器A送通用寄存器R7~R0(12)MOVA,Rn;通用寄存器R7~R0送累加器A(13)MOV@Ri,A;累加器A送R1或R0间址的内部RAM(14)MOVA,@Ri;R1或R0间址的内部RAM送累加器A(15)MOVdirect,@Ri;R1或R0间址的内部RAM送内部RAM或SFR(16)MOV@Ri,direct;内部RAM或SFR送R1或R0间址的内部RAM.例:内部数据传送MOV4EH,#3FHMOV3DH,AMOV3CH,RnMOV3BH,@RiMOV39H,3AHMOV3EH,3FHMOVPSW,#08HMOV30H,#30HMOVR7,3FHMOVR0,#30HMOV40H,@R0MOV@R0,#20HMOV@R0,20H.例:顺序执行下列指令序列,求每一步执行结果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30H.例:设内部RAM30H单元内容为40H,40H单元的值为10H,P1口作为输入口,其输入的数据为0CAH,试判断下列程序的执行结果。MOVR0,#30HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1(R0)=?(A)=?(B)=?(40H)=?(P2)=?.例:用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。解:MOVA,#60HMOVR0,#60HMOVA,@R0MOVR0,60HMOVA,@R0解:MOVA,60H对么?对么?.说明:1.一条指令中不能同时出现两个工作寄存器:

非法指令: MOVR1,R2

MOVR2,@R02.间址寄存器只能使用R0、R1。

非法指令:MOVA,@R23.SFR区只能直接寻址,不能用寄存器间接寻址。

非法指令:MOVR0,#80H

MOVA,@R0.3.3.1数据传送类指令2.MOVC指令:该指令是通过A+DPTR或A+PC变址,将程序存储器中的数据送累加器A的数据传送指令。MOVC指令有如下2种形式:

(1)MOVCA,@A+DPTR(2)MOVCA,@A+PC.3.3.1数据传送类指令3.MOVX指令:该指令是外部扩展的数据存储器或I/O端口与累加器A间传送数据的指令,外部扩展的数据存储器或I/O端口仅能用Ri或DPTR间址。

MOVX指令有如下4种形式:(1)MOVX@Ri,A(2)MOVX@DPTR,A(3)MOVXA,@Ri(4)MOVXA,@DPTR.例:设工作寄存器R0的内容为21H,R1的内容为43H,(P2)=40H,外部RAM4043H单元内容为65H,执行下列指令:MOVP2,#40HMOVR0,#21HMOVR1,#43HMOVXA,@R1MOVX@R0,A结果:?对于@Ri来说,它以当前寄存器区的R0或R1的内容作为低8位地址,地址与数据分时从P0口输出,高8位地址由P2口默认给出,这种地址形式最多可访问256个外部RAM存储单元。.例:设单片机系统配有2KB的外部RAM,试设计一程序把第250(0FAH)单元内容传送到04FFH单元中。MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,@R0MOVX@DPTR,A.例:实现片外数据存储器数据传送(2000H)®(2100H)。 MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A ;DPTR=2000H ;A=X ;DPTR=2100H ;(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000HMOVX2100H,2000H.3.3.1数据传送类指令(二)数据交换指令

数据交换指令的目的操作数均为累加器。1.字节交换指令2.半字节交换指令3.累加器A的高4位与低4位交换指令

.1.字节交换指令

指令格式:XCHA,source指令的意义是将源地址中的内容与累加器A中的内容交换。源地址仅能为通用寄存器R0~R7、内部RAM或SFR和Ri间址的内部RAM。XCH指令有如下3种形式:(1)XCHA,Rn(2)XCHA,direct(3)XCHA,@Ri.例:设R0寄存器内容为20H,累加器A内容为36H,内部RAM的20H单元内容为75H,执行指令:XCHA,@R0结果:?例:将片内RAM60H单元与61H单元的数据交换。XCH60H,61H←对吗?.2.半字节交换指令

指令格式:XCHDA,@Ri

指令的意义是将累加器A中的低四位与Ri间址的内部RAM中的低四位交换。它们各自的高四位都不变。例:设R0内容为20H,累加器内容为36H,内部RAM的20H单元内容为75H,执行指令XCHDA,@R0结果:?.3.累加器A的高4位与低4位交换指令

指令格式:SWAPA指令的意义是将累加器A中的高4位和低4位交换。利用交换指令可以方便地将一字节中的高4位和低4位拆开。.例:将内部RAM50H单元中的两位压缩BCD数转换成非压缩BCD数,放到内部RAM60H和61H两个单元。MOVR0,#61H;R0指向内部RAM61H

(半字节交换指令只能Ri间址!)MOV@R0,#0;将内部RAM61H单元清0XCHA,50H;把内部RAM50H单元中的2位BCD数送AXCHDA,@R0;将50H的低4位与61H的低4位(0)交换SWAPA;将50H的高4位与低4位(0)交换MOV60H,A.例:将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元。85HR1→R0→MOVA,#0MOVR0,#2AHMOVR1,#2BHXCHDA,@R0SWAPAXCHDA,@R1XCHA,20H.3.3.2算术运算指令

加减运算指令的目的操作数仅能是累加器A,源操作数可以为立即数、通用寄存器、内部RAM或SFR和Ri间址的内部RAM。

Rn@RidirectA#data.3.3.2算术运算指令

(一)加法类指令1.加指令ADD(addition)

指令格式:ADDA,source指令的意义是将累加器A和源相加,其相加结果送累加器A,源保持不变。

.源操作数有4种寻址方式,所以ADD指令有如下4种形式:(1)ADDA,#data(2)ADDA,Rn(3)ADDA,direct(4)ADDA,@Ri.例:A=3BH,PSW=0,执行指令ADDA,#3BH求:A=,Cy=,OV=,AC=,P=, PSW=?

00111011

+00111011

0111011076H001101000001=41H.3.3.2算术运算指令

(一)加法类指令2.带进位的加指令ADDC(additonwithcarry)

指令格式:ADDCA,source指令的意义是将累加器A、不同寻址方式的源操作数以及进位标志CY的状态相加。相加的结果送累加器A,源保持不变。ADDC指令的4种形式及对状态标志位的影响同ADD指令。.例:设(A)=0C3H,(R0)=0AAH,(Cy)=1,执行:ADDCA,R0结果为:(A)=?(Cy)=?(AC)=?(OV)=?.带进位的加指令常用于多字节数的加法运算。例如3字节无符号数相加。被加数放在内部RAM20H~22H(低字节在低地址,高字节在高地址)。加数放在内部RAM23H~25H。结果放到内部RAM26H~29H。其程序段如下:

.

MOVA,20H;被加数最低字节送累加器AADDA,23H;加加数最低字节MOV26H,A;存其和的最低字节MOVA,21H;被加数中间字节送AADDCA,24H;加加数中间字节MOV27H,A;存其和的中间字节MOVA,22H;被加数的最高字节送累加器AADDCA,25H;加加数的最高字节MOV28H,A;存其和的高字节

.MOVA,#0;清累加器AADDCA,#0;处理最高字节相加产生的进位MOV29H,A;存最高字节相加产生的进位.3.3.2算术运算指令

(一)加法类指令3.增量指令INC(incrementdestinationbyone)

指令格式:INCdest指令只有一个操作数,该操作数可以是累加器A、通用寄存器、内部RAM或SFR、Ri间址的内部RAM以及数据指示器DPTR。可以将该指令执行的操作看成是ADDdest,#1。

.该指令有如下5种形式:(1)INCA(2)INCRn(3)INCdirect(4)INC@Ri(5)INCDPTR.例:设(R0)=7EH,(7EH)=0FFH,(7FH)=40H,执行下面的指令:

INC@R0INCR0INC@R0结果:?.3.3.2算术运算指令

(二)减法类指令减法指令只有带借位减法指令。若进行不减借位的减法运算,需先使用能清借位的指令把借(进)位标志位CY清0。减法类指令对状态标志位的影响与加法类指令相同。.1.带借位减法指令SUBB(subtractionwithborrow)指令格式:SUBBA,source源操作数有4种寻址方式,所以减借位减法指令有如下4种形式:(1)SUBBA,#data(2)SUBBA,Rn(3)SUBBA,direct(4)SUBBA,@Ri.例:设(A)=0C9H,(R2)=54H,(Cy)=1,执行:SUBBA,R2结果为:(A)=?(Cy)=?(AC)=?(OV)=?.3.3.2算术运算指令

(二)减法类指令

2.减量指令DEC(decrement)

指令格式:DECdest同INC指令一样,该指令也只有一个操作数。执行的操作是将该操作数的内容减去1,再送回该操作数中。减量指令有如下4种形式:(1)DECA(2)DECRn(3)DECdirect(4)DEC@Ri.需要注意的是,在MCS-51单片机的指令系统中,数据指示器DPTR只有增量指令,而没有减量指令。

没有指令DECDPTR可用指令DECDPL 代替.例:设(R0)=7FH,(7EH)=00H,(7FH)=40H,执行下面的指令:

DEC@R0DECR0DEC@R0结果:?.3.3.2算术运算指令

(三)乘除法指令

MCS-51的乘除法指令只有无符号数的乘除法指令。.1.乘法指令MUL(multiply)指令格式:MULAB

乘法指令所执行的操作是A乘以B,乘积放回到B和A(高位字节放在B中,低位字节放在A中)。ABABX低位字节高位字节如果积大于255,则OV置1,否则OV清0,进位标志总是清0。.例:设(A)=50H,(B)=0A0H,执行指令:MULAB结果:.2.除法指令DIV(divide)指令格式:DIVAB

除法指令所执行的操作是用B除A,商放入A,余数放入B。AABB....商余数

除法运算和乘法运算一样,一定不产生进位,因此进位标志位CY总是被清0;溢出标志位OV则反应除数情况,当除数为零(B=0)时,OV置1,其他情况OV均被清0。.例:设(A)=0FBH,(B)=12H,执行指令:DIVAB结果:.3.BCD数加法调整指令DAA1.计算机对BCD数的运算是首先使用二进制数算术运算指令进行运算,然后执行一条能把算术运算结果转换成正确的BCD数的专用调整指令来处理BCD数的运算。2.DAA指令的意义是将A中的数当作两个BCD数相加之和来进行调整,得到两位BCD数。具体操作是,若(A&0FH)>9或AC=1,则A加上6;若(A&0F0H)>90H或CY=1,则A加上60H。.3.由调整指令所执行的具体操作可以看到,对结果进行调整时要用到进位标志和辅助进位标志,所以调整指令应紧跟在BCD数作为加数的加法指令之后。所谓“紧跟”是指在调整指令与加法指令之间不得有改变CY和AC标志位的指令。例:设(A)=56H,(R5)=67H,执行指令:ADDA,R5DAA结果:.3.3.3逻辑运算及移位类指令

(一)逻辑运算指令

逻辑运算都是按位进行的,对进位标志CY、溢出标志OV等都不影响。MCS-51单片机有与、或、异或和非4种逻辑运算指令。MCS-51单片机的求反指令的操作数仅能为A,求反操作是单操作数指令。与、或、异或3种逻辑指令的操作数

.Rn@RidirectAAdirect#data#data.3.3.3逻辑运算及移位类指令

(一)逻辑运算指令1.逻辑与指令

指令格式ANLdest,source指令的意义是对目的操作数和源操作数按位进行与操作,将结果回送到目的操作数中,源操作数不变。逻辑与指令有如下6种形式:(1)ANLA,#data(2)ANLA,Rn(3)ANLA,direct(4)ANLA,@Ri(5)ANLdirect,#data(6)ANLdirect,A.例:(A)=0C3H,(R0)=0AAHANLA,R0.

ANL指令可用于对累加器A,对由直接地址所指定的内部RAM单元以及对特殊功能寄存器进行清0操作。可以对指定的位进行清0(即屏蔽某些位),决定使哪些清0的控制字可以是指令中的常数或运行时累加器的值。思考:如何将A中的数据高四位清0,低四位保持不变?.3.3.3逻辑运算及移位类指令

(一)逻辑运算指令2.逻辑或指令指令格式:ORLdest,source指令的意义是对目的操作数和源操作数按位进行或操作,将结果回送到目的操作数中,源操作数不变。逻辑或指令有如下6种形式:(1)ORLA,#data(2)ORLA,Rn(3)ORLA,direct(4)ORLA,@Ri(5)ORLdirect,#data(6)ORLdirect,.例:(A)=0F0H,(R0)=0FHORLA,R0.思考:如何将累加器A中的低3位内容传送到P1口中并保持P1口的高5位数据不变?ANLA,#07HANLP1,#F8HORLP1,A.3.3.3逻辑运算及移位类指令

(一)逻辑运算指令

3.逻辑异或指令XRL指令格式:XRLdest,source指令的意义是对目的操作数和源操作数按位进行异或操作,将结果回送到目的操作数中,源操作数不变。逻辑异或指令有如下6种形式:(1)XRLA,#data(2)XRLA,Rn(3)XRLA,direct(4)XRLA,@Ri(5)XRLdirect,#data(6)XRLdirect,A.XRL指令可以用来将累加器A置0,指令:XRLA,ACCMCS-51指令系统还有一条累加器A清0的专门指令:CLRAXRL指令还可以用来将目的操作数的内容求反,如指令:XRLA,#OFFH.例:执行一条指令,使得P1.5,P1.4,P1.0的输出取反。XRLP1,#31H.例:A=01××××××B,×表示随机状态,为1或0,执行下述一组指令执行后A的值如何?

XRLA,#0C0H ;

ORLA,#03H ;

ANLA,#0E7H ;将累加器A的内容D7、D6取反将累加器A的内容D1、D0置1将累加器A的内容D4、D3清0

解:执行上述指令后,A=10×00×11B。.练习(1)使A的最低位置1(2)清除A的高4位(3)使ACC.1和ACC.3置1(4)清除A的中间4位.思考:如何将寄存器R2中的数据奇数位取反,偶数位保持不变?MOVA,R2XRLA,#55HMOVR2,A.3.3.3逻辑运算及移位类指令

(一)逻辑运算指令

4.累加器取反指令指令格式:CPLA指令的意义是将累加器A中的数逐位取反后再送回A中。MCS-51单片机没有求补指令。若要对累加器A中的数求补,则要执行如下程序段:CPLAINCA.(二)移位指令MCS-51单片机的移位指令只能对累加器A进行逻辑移位,一条指令只能移一位。移位有循环右移、循环左移、带进位循环右移和带进位循环左移4种。

3.3.3逻辑运算及移位类指令

.1、循环右移

指令格式:RRA指令的意义是将累加器A中的8位二进制数向右移动1位,最右边1位(即最低位)移至最左边1位(即最高位)。如:A=abcdefgh(abcdefgh均为二进制数1或0),循环右移指令执行后,A=habcdefg。.(二)移位指令2.循环左移

指令格式:RLA指令的意义是将累加器A中的8位二进制数向左移动1位,最左边1位(即最高位)移至最右边1位(即最低位)。如:A=abcdefgh(abcdefgh均为二进制数1或0),循环左移指令执行后,A=bcdefgha。

3.3.3逻辑运算及移位类指令

.3.带进位循环右移指令格式:RRCA指令的意义是将累加器A和进位CY中的9位二进制数一同向右移动1位,累加器A中的最右边1位(即最低位)移至CY,CY(原内容)移至累加器A的最左边1位(即最高位)。如:A=abcdefgh、CY=i(abcdefghi均为二进制数1或0),带进位循环右移指令执行后,A=iabcdefg、CY=h。.(二)移位指令4.带进位循环左移

指令格式:RLCA指令的意义是将累加器A中的8位二进制数和进位CY一同向左移动1位,累加器A中的最左边1位(即最高位)移至CY,CY(原内容)移至累加器A的最右边1位(即最低位)。3.3.3逻辑运算及移位类指令

.如:A=abcdefgh、CY=i(abcdefghi均为二进制数1或0),带进位循环左移指令执行后,A=bcdefghi、CY=a。

移位指令常用于乘2和除2操作。.例:R7中的无符号数乘以2送R6和R7的操作00000000abcdefgh00000000000000000000000abcdefgh00000000abcdefgh0bcdefgh0abcdefgh00aaa0R6CYR7ACYAR6CYR7CYACYACYR7R6.ADDA,#0;清CYMOVR6,#0;清R6MOVA,R7;R7乘以2RLCAMOVR7,AMOVA,R6;R6乘以2RLCAMOVR6,A.3.3.4位操作指令

位传送位运算位置位复位(清0)

.3.3.4位操作指令

(一)位传送指令位传送指令执行可寻址位bit与累加位C之间的传送操作。位传送指令有如下2种形式:(1)MOVC,bit(2)MOVbit,C应注意的是,位传送指令的双操作数中,一定有一个累加位C,可寻址位间不能进行直接传送。.虽然累加位就是进位位CY,但指令MOVCY,CY就是非法的,然而指令MOVC,CY或指令MOVCY,C却是合法的。.(一)位传送指令如需实现可寻址位间的传送,应使用累加位C作为中介来实现。例如将20H位的内容传送给27H位,其程序段如下:MOV10H,C;暂存CYMOVC,20HMOV27H,CMOVC,10H;恢复CY3.3.4位操作指令.(二)位运算指令

位运算都是逻辑运算,有与、或、非3种。通过位逻辑运算,可以对各种组合逻辑电路进行模拟,即用软件方法来获得组合电路的逻辑功能。位运算指令有如下6种形式:(1)ANLC,bit(2)ANLC,/bit(3)ORLC,bit(4)ORLC,/bit(5)CPLC(6)CPLbit3.3.4位操作指令.3.3.4位操作指令(三)位置位复位(清0)指令这类指令对累加位和可寻址位进行置位或复位(清0)操作。这类指令有如下4种形式:(1)SETBC;1→CY(2)SETBbit;1→bit(3)CLRC;0→CY(4)CLRbit;0→bit.例:设A=11000101,CY=0,分别执行下列单条指令:CPLARLARLCA求:A=?,CY=?.伪指令不要求计算机做任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助进行汇编的一些指令。它主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。3.4伪指令.1)设置目标程序起始地址伪指令ORG格式:[符号:]ORG地址(十六进制表示)该伪指令的功能是规定其后面的目标程序或数据块的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是ORG后面给出的地址。.例如:ORG2000HSTART:MOVA,#7FH

ORG3000HSECOND:CLRA…….在汇编程序中,有一个位置计数器LC(LocationCounter),用符号“$”表示,它用来记录正在被汇编程序的指令或标号的地址,也就是视其内容标出汇编程序当前的工作位置。汇编地址计数器的值可以用伪指令ORG设置,其值可在0~FFFFH的范围内。在程序的第一条指令之前,若没有设置ORG伪指令,汇编地址计数器的值将被设置为0,即从0单元开始放置程序。.2)结束汇编伪指令END格式:[符号:]ENDEND是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予处理。一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。如果END前面加标号的话,则应与被结束程序段的起始点的标号一致,以表示结束的是哪一个程序段。.3)定义字节伪指令DB格式:[标号:]DB项或项表其中项或项表指一个字节数据,用逗号分开的字节数据串,或以引号括起来的字符串。该伪指令的功能是把项或项表的数据(字符串按字符顺序以ASCII码)存入从标号地址开始的连续存储单元中。.(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H(2004H)=35H(2005H)=41H(2006H)=42H(2007H)=43H(2008H)=44H例如:ORG2000HTAB1:DB30H,8AH,7FH,73DB'5','A','BCD'.4)定义字伪指令DW格式:[标号:]DW项或项表DW伪指令与DB相似,但用于定义字的内容。项或项表指所定义的一个字(两个字节)或用逗号分开的字串。汇编时,机器自动按高8位先存入,低8位在后的格式排列。例如:ORG1500HTAB2:DW1234H,80H汇编以后:(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H.5)预留存储空间伪指令DS格式:[标号:]DS表达式该伪指令的功能是从标号地址开始,保留若干个字节的内存空间以备存放数据。保留的字节单元数由表达式的值决定。例如:ORG1000HDS20HDB30H,8FH汇编后从1000H开始,预留32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(1020H)=30H,(1021H)=8FH。.6)等值伪指令EQU格式:字符名称

EQU项该伪指令的功能是将指令中的项的值赋予EQU前面的字符名称。项可以是常数、地址标号或表达式。例如:TAB1EQU1000HAAEQUR1汇编后TAB1、TAB2分别具有值1000H、2000H。用EQU伪指令对某标号赋值后,该标号的值在整个程序中不能再改变。.7)位地址定义伪指令BIT格式:字符名称BIT位地址该伪指令的功能是将位地址赋予BIT前面的字符名称,经赋值后可用该名称代替BIT后面的位地址。例如:PLGBITF0AIBITP1.0经以上伪指令定义后,在程序中就可以把FLG和AI作为位地址来使用。.练习:现有如下定义ORG2000HS1:DB1,2,3,4,5S2:DB‘12345’COUNTEQU$-S2NW:DW120,-256,-3P:DWS1,NW(1)画出上述数据区的存储形式;(2)写出各标号的地址;(3)写出下列指令的执行结果和采用的寻址形式MOVA,#COUNTMOVDPTR,#S2MOVCA,@A+DPTR.3.5指令的时序3.5.1指令周期、机器周期、状态

1.指令周期

我们知道,计算机是在程序的控制下工作的。我们先把程序放到存储器的某个区域,再命令机器运行,CPU就发出读指令的命令,从指定的地址(由PC给定)读出指令,把它送到指令寄存器中,再经过指令译码器分析指令,发出一系列控制信号,以执行指令规定的全部操作,控制各种信息在计算机.各部件之间传送。简单地说,每条指令的执行由取指令(fetch)、译码(decode)和执行(execute)构成。上述的这些操作都是在振荡脉冲的统一控制下一步一步进行的,它们都需要一定的时间。执行一条指令所需要的时间称为指令周期(instructioncycle)。.3.5.1指令周期、机器周期、状态2.机器周期

把指令周期划分为一个个机器周期(machinecycle)。基本的机器周期有取指周期和执行周期。MCS-51单片机的指令周期根据指令的不同,可包含有1~4机器周期。.3.状态与拍节

每个机器周期包含6个状态(state),依次表示为S1~S6,状态就是时钟周期(clockcycle)。每个状态包含2个拍节,依次表示为P1与P2,拍节就是振荡脉冲OSC的周期。因此,一个机器周期总共有12个拍节,分别作S1P1﹑S1P2……S6P6。由于一个机器周期共有12个振荡脉冲周期,因此,当振荡脉冲频率为12MHz时,一个机器周期为1μS,当振荡脉冲频率为6MHz时,一个机器周期为2μS。.3.5.2MCS-51指令的时序

MCS-51共有111条指令,全部指令按其长度可分为单字节指令、双字节指令和三字节指令。执行这些指令所需要的机器周期数是不同的,概括起来共有以下几种情况:单字节指令单机器周期、单字节指令双机器周期、单字节指令四机器周期(乘除指令)、双字节指令单机器周期、双字节指令双机器周期和三字节指令双机器周期。.S1P1P2S6P1P2S5P1P2S4P1P2S3P1P2S2P1P2S1P1P2S6P1P2S5P1P2S4P1P2S3P1P2S2P1P2图指令的时序OSCALE<C>S1S2S3S4S5S6S1S2S3S4S5S6S1读下一个操作码读操作码操作码(丢弃)S1S2S3S4S5S6S1<A>读操作码读下一个操作码(丢弃)读下一个操作码单字节单周期指令(例如INCA)S1S2S3S4S5S6S1<B>读下一个操作码读操作码读第二字节双字节单周期指令(例如ADDA,#data)单字节双周期指令(例如INCDPTR)S1S2S3S4S5S6S1S2S3S4S5S6S1<D>无取指无ALE读操作码读下一个操作码(丢弃)读下一个操作码无取指单字节双周期指令(例如MOVX类指令)地址数据访问外部存储器.3.5.2MCS-51指令的时序单字节单周期指令(例如INCA)只需进行一次读指令操作。当第2个ALE有效时,由于PC没有加1,所以读出来的还是原指令,属于一次无效的操作。双字节单周期指令(例如ADDA,#data)对应于ALE的两次读操作都是有效的,第一次是读指令操作码,第2次是读指令的第2字节(本例中是立即数)。单字节双周期指令(例如INCDPTR)的两个机器周期共进行4次读指令的操作,但其中后3次的读操作完全是无效的。.3.5.3MCS-51指令的执行过程例如为了使单片机进行5+3的操作,并把相加结果8送R0寄存器中存放,需执行如下程序段:

MOVA,#5ADDA,#3MOVR0,A

.计算机不能直接使用助记符形式的汇编指令,因此需把助记符指令转换成二进制代码指令,即机器指令。上述程序段经过汇编后的代码指令和符号指令表示如下:

7405MOVA,#05H2403ADDA,#03HF8MOVR0,A.3.6控制转移类指令3.6.1无条件转移指令表3.4无条件转移指令.1.LJMP(长转指令)LJMP指令执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响标志位。由于指令中提供16位目标地址,所以执行这条指令可以使程序从当前地址转移到64KB程序存储器地址空间的任意地址,故得名为“长转移”。该指令的缺点是执行时间长,字节多(长转移指令是3字节指令,依次是操作码、转移地址的高8位地址和低8位地址)。.例:设当前指令的地址值为0123H,试分析执行在此地址处的指令LJMP3456H的过程。.2.AJMP(绝对转移指令)AJMP的机器码是由11位直接地址addr11和指令操作码00001,按下列分布组成的:a10 a9a800001a7a6a5a4a3a2a1a0该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0转移目的地址(PC).由于11位地址的范围是00000000000~11111111111,即2KB范围,而目的地址的高5位是由PC当前值,所以程序可转移的位置只能是和PC当前值在同一2KB范围内。本指令转移可以向前也可以向后,指令执行后不影响状态标志位。例如:若AJMP指令地址(PC)=2300H。执行指令AJMP0FFH后,结果为:转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。.例:试分析下面的转移指令是否正确。地址指令389AHAJMP3ABCH37FEHAJMP3DEFH3456HAJMP3BCDH.由上可见:若addr11相同,则AJMP指令的机器码相同,但转移的目的地址却可能不同,这是因为转移的目的地址是由PC当前值的高5位与addr11共同决定的。.3.SJMP(相对短转指令)指令的操作数rel用8位带符号数补码表示,占指令的一个字节。因为8位补码的取值范围为-128~+127,所以该指令的转移范围是:相对PC当前值向前转128字节,向后转127字节。即

转移目的地址=SJMP指令所在地址+2+rel

.例如:在2100H单元有SJMP指令,若rel=5AH(正数),则转移目的地址为215CH(向后转);若rel=F0H(负数),则转移目的地址为20F2H(向前转)。例:设当前指令的地址为0101H,标号ADR代表地址0123H,执行指令SJMPADR。结果为:程序转向0123H单元。计算其偏移量。.SJMP指令常用来使程序原地踏步,其指令是:HERE:SJMPHERE或SJMP$

$是汇编地址计数器,代表PC的当前值。该指令的偏移量为:HERE-(HERE+2)=-2=FEH,所以SJMP$指令的机器码为80FEH。在仿真器上调试程序时,使用SJMP$作为程序段的结束。.4.JMP@A+DPTR(相对长转移指令)它是以数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64KB范围内无条件转移。该指令的特点是转移地址可以在程序运行中加以改变。例如,当DPTR为确定值,根据A的不同值就可以实现多分支的转移。该指令在执行后不会改变DPTR及A中原来的内容。.例根据累加器A的值,转不同处理程序的入口。MOVDPTR,#TABLE ;表首地址送DPTRJMP@A+DPTR ;根据A值转移

TABLE:AJMPTAB1 ;当(A)=0时转TAB1执行AJMPTAB2;当(A)=2时转TAB2执行AJMPTAB3;当(A)=4时转TAB3执行…….3.6.2条件转移指令条件转移指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。转移的条件可以是上一条指令或更前一条指令的执行结果(常体现在标志位上),也可以是条件转移指令本身包含的某种运算结果。由于该类指令采用相对寻址,因此程序可在以当前PC值为中心的-128~+127范围内转移。该类指令共有8条,可以分为累加器判零条件转移指令、比较条件转移指令和减1条件转移指令三类。表3.5中列出了这些指令。.表3.5条件转移指令.1.判零条件转移指令判零条件转移指令以累加器A的内容是否为0作为转移的条件。JZ指令是为0转移,不为0则顺序执行;JNZ指令是不为0转移,为0则顺序执行。累加器A的内容是否为0,是由这条指令以前的其它指令执行的结果决定的,执行这条指令不作任何运算,也不影响标志位。.例17将片外RAM首地址为DATA1的一个数据块转送到片内RAM首地址为DATA2的存储区中。外部RAM向内部RAM的数据转送一定要经过累加器A,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:

MOVR0,#DATA1;R0作为外部数据块的地址指针 MOVR1,#DATA1 ;R1作为内部数据块的地址指针LOOP:MOVXA,@R0 ;取外部RAM数据送入AHERE:JZHERE ;数据为零则终止传送 MOV@R1

温馨提示

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

评论

0/150

提交评论