单片机学习第三章_第1页
单片机学习第三章_第2页
单片机学习第三章_第3页
单片机学习第三章_第4页
单片机学习第三章_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

单片机学习第三章第一页,共一百四十页,2022年,8月28日3.1指令格式单片机要执行某种操作,用户必须按照格式编写指令,单片机才能识别并准确操作。指令的编码规则称为指令格式。3.1.1指令的格式1.指令的一般格式MCS一51单片机指令的一般格式为:操作码操作数。例如指令:74H30H。1)操作码用来表示执行什么样的操作,例如传送、加、减等。MCS一51系列单片机的操作码为8位二进制的机器码,在指令中为第一字节。用机器码写成的指令是机器指令,也称为指令代码。下一页返回第二页,共一百四十页,2022年,8月28日3.1指令格式2)操作数表示参与操作的数据或数据的存储地址,不同类型的指令,操作数的个数是不一样的,可以有3个、2个、1个等。在具有多个操作数的指令中,把它们分别称为第一操作数、第二操作数等。如果操作数是一个直接参加操作的数据,这种操作数称为立即数;而大部分操作数存放于寄存器或数据存储器的某个存储单元,操作数字段仅指出操作数所在的寄存器或存储器地址。2.常用指令格式编写指令时,要记住各种由“0”和“1”二进制数组成的代码和他们的含义是很困难的,既容易出错,又不易检查。所以常用的指令格式是以助记符表示的符号指令,也称汇编语言,由标号、操作码助记符、操作数和注释4个字段组成,格式如下:[标号:]操作码助记符[操作数1][,操作数2][;注释]其中,方括号内的项为任选项,需要此项时,指令中不写方括号;两操作数之间应以逗号分开。上一页下一页返回第三页,共一百四十页,2022年,8月28日3.1指令格式例如,指令:START:MoVA,#79H;A←79H1)标号标号是用户定义的符号,由以字母开始的1~8个字符(字母或数字)组成,它代表指令的符号地址,通常在程序分支、转移等所需要的地方加上一个标号,并不是每条指令都必须有标号。当将指令转换成机器指令时,指令第一字节(也称首字节)的存储单元地址值赋给该标号。2)操作码助记符助记符是一些代表操作含义的英文缩写,一般由2~5个英文字母组成,如“MOV”表示“传送”、“ADD”表示“加”等。操作码助记符对应的机器码是指令的第一字节,也是指令不可缺少的部分。3)操作数与机器指令格式中的操作数相似。4)注释注释是对本指令或本段程序的功能说明,便于对程序的阅读理解,在转换成机器指令时不予考虑。注释的前面需加分号“;”。上一页下一页返回第四页,共一百四十页,2022年,8月28日3.1指令格式单片机识别机器指令,编程人员使用符号指令,机器指令与符号指令之间有一一对应的关系,绝没有重复。各种指令的机器码不需要记忆,编程人员可查阅机器指令与符号指令的映射表将符号指令译成机器指令,这个过程称为汇编;但更多的是用专门的软件来完成汇编过程。3.1.2指令的分类MCS一51指令系统有33种操作功能。指令助记符与寻址方式组合,得到111种指令。分类如下:上一页下一页返回第五页,共一百四十页,2022年,8月28日3.1指令格式

1.按字节数分类

1)单字节指令,有49条。

2)双字节指令,有45条。

3)3字节指令,有17条。

2.按指令执行时间分类

1)单周期指令,有64条。

2)双周期指令,有45条。

3)四周期指令,乘、除各有1条。上一页下一页返回第六页,共一百四十页,2022年,8月28日3.1指令格式3.按功能分类1)数据传送指令,有28条。这类指令主要用于单片机片内RAM和特殊功能寄存器SFR之间传送数据,也可以用于单片机片内和片外存储单元之间传送数据。数据传送指令是把源地址中操作数传送到目的地址(或目的寄存器)的指令,在该指令执行后源地址中的操作数不被破坏。源操作数有8位和16位之分,前者称为8位数传送指令,后者叫做16位数传送指令。交换指令也属于数据传送指令,是把两个地址单元中内容相互交换。因此,这类指令中的操作数或操作数地址是互为“源操作数”和“目的操作数”的。上一页下一页返回第七页,共一百四十页,2022年,8月28日3.1指令格式2)算术运算指令,有24条。算术运算指令用于对两个操作数进行加、减、乘、除等算术运算。在两个操作数中,一个应放在累加器A中,另一个可以在某个寄存器或片内RAM单元中,也可以放在指令码的第二和第三字节中。指令执行后,运算结果便可保留在累加器A中,运算中产生的进位标志、奇偶标志和溢出标志等皆可保留在PSW中。参加运算的两数可以是8位的,也可以是16位的。3)逻辑运算和环移指令,有25条。这类指令包括逻辑运算和环移两类指令。逻辑操作指令用于对两个操作数进行逻辑乘、逻辑加、逻辑取反和异或等操作,大多数指令也需要把两个操作数中的一个预先放入累加器A,操作结果也在累加器A中。环移指令可以对累加器A中的数进行环移。环移指令有左环移和右环移之分,也有带进位位Cy和不带进位位Cy之分。上一页下一页返回第八页,共一百四十页,2022年,8月28日3.1指令格式4)位操作指令,有12条。位操作指令又称布尔变量操作指令,共分为位传送、位置位、位运算和位控制转移指令等四类。其中,位传送、位置位和位运算指令的操作数不是以字节为单位进行操作的,而是以字节中某位为单位进行的;位控制转移指令不是以检测某个字节的结果为条件而转移的,而是以检测字节中的某一位的状态来转移的。5)控制转移指令,有22条。控制转移指令分为条件转移、无条件转移、调用和返回等指令。这类指令的共同特点是可以改变程序执行的流向,或者是使CPU转移到另一处执行,或者是继续顺序地执行。无论是哪一类指令,执行后都会改变程序计数器PC中的值。上一页下一页返回第九页,共一百四十页,2022年,8月28日3.1指令格式3.1.3指令的存放空间指令是单片机执行某种操作的命令,用户若要单片机完成一件事情,必须先编写指令,再转成机器码形式,从键盘等设备输入到程序存储器存放。存放在程序存储器的哪个空间,用户应首先给程序计数器PC一个首地址,指令就从这个首地址开始存放,一个字节存放到一个单元后,程序计数器PC自动加1,指令的下一字节存放在PC当前值的地址单元。3.1.4指令常用的缩写符号说明在描述MCS一51指令系统的功能时,经常使用一些缩写符号,各符号的含义如下:(1)A累加器ACC。常用ACC表示其地址,用A表示其名称。(2)AB累加器ACC和寄存器B组成的寄存器对。通常在乘、除法指令中出现。上一页下一页返回第十页,共一百四十页,2022年,8月28日3.1指令格式(3)Rn(n=0~7),选定的当前工作寄存器,范围为R0~R7。(4)Ri(i=0或1),工作寄存器R0或R1。(5)@间接寻址符号,简称间址符,常与Ri配合用,如@Rl,表示指令对R1寄存器间接寻址。(6)#data8位立即数,“#”表示后面的data是立即数而不是直接地址。(7)direct表示片内RAM存储单元的8位直接地址,立即数和直接地址可用二进制码表示,后缀为“B”;也可用十六进制码表示,后缀为“H”;如果是以字母开头的十六进制数,在其前面应加一个“0”。如,二进制码10101000B也可转成十六进制码A8H,但必须写成“0A8H”。上一页下一页返回第十一页,共一百四十页,2022年,8月28日3.1指令格式(8)@DPTR:表示以DPTR为数据指针的间接寻址,用于对外部64KRAM/ROM寻址。(9)rel以补码形式表示的8位地址偏移量,范围为-128~+127。(10)Bit位地址。(11)$:当前指令的地址。指令中还经常使用到下列符号,含义如下:

+加;

-减;*乘;/除;上一页下一页返回第十二页,共一百四十页,2022年,8月28日3.1指令格式∧逻辑与;∨逻辑或;⊕逻辑异或;<小于;>大于;<>不等于;←→取代或替换;(X)表示X寄存器或X地址单元中的内容;((X))表示以X寄存器或X地址单元中的内容为地址的存储单元中的内容;()将X寄存器的内容取反;rrr机器指令三位值由工作寄存器Rn确定,RO~R7对应的rrr分别为000~111。上一页下一页返回第十三页,共一百四十页,2022年,8月28日3.1指令格式例3—1已知数据存储器各单元内容如图3—1所示,说明(50H)、(A)、()、((50H))各为多少?解(50H):表示地址为50H存储单元里的内容01110000B。(A):表示累加器A中的内容,因A的地址为0EOH,所以(A)为00100001B。():表示地址为50H存储单元里的内容取反,为10001111B。((50H)):以50H存储单元的内容70H为地址的存储单元内的内容,为00111001B。上一页返回第十四页,共一百四十页,2022年,8月28日3.2寻址方式指令包含操作码和操作数,有些指令直接给出参与运算和操作的数,但更多指令只是以各种方式给出操作数所在的地址。单片机通过地址信息寻找操作数的方式,称为寻址方式。寻址方式越多,表明计算机的功能越强,灵活性越大。在MCS一51单片机中,操作数的存放范围是很宽的,可以放在片外ROM/RAM中,也可以放在片内ROM/RAM以及特殊功能寄存器SFR中。为了适应这一操作数范围内的寻址,MCS一51的指令系统共使用了七种寻址方式,它们是立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。下一页返回第十五页,共一百四十页,2022年,8月28日3.2寻址方式3.2.1立即寻址指令中的操作数只是数据,而不是地址,这样的操作数就称为立即数,立即数直接参与操作,这种寻址方式称为立即寻址。其实立即寻址并没有寻址过程。这类指令的立即数大多数是一个字节的8位二进制数。指令中,操作数前有“#”符号,据此可以判定是立即寻址,并有相应的操作码。例如,指令:MOVA,#64H;A←64H这条指令的功能是把数据64H(立即数)送到累加器A中,在MCS一51指令系统中有相应操作码为74H,立即寻址的示意如图3—2所示,设程序计数器PC=70H。上一页下一页返回第十六页,共一百四十页,2022年,8月28日3.2寻址方式3.2.2直接寻址指令中直接给出操作数所在地址的寻址方式称为直接寻址。例如,指令:MOVA,64H;A←(64H)这条指令的功能是把内部数据存储器地址为64H的存储单元内容送至累加器A,这个指令的操作码为0E5H,直接寻址的示意图如图3—3所示,设程序计数器PC=38H。由图可知,地址为64H的存储单元内容为87H,则指令执行结果是将87H送到ACC。上一页下一页返回第十七页,共一百四十页,2022年,8月28日3.2寻址方式应注意直接寻址方式与立即寻址方式的区别:虽然两者指令的第二字节相同,但在助记符指令中相差一个“#”号,由于符号指令与机器指令有一一对应的关系,故操作码不同,所以执行结果不一样,而在操作码中含有寻址方式的信息。3.2.3寄存器寻址由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器寻址对所选的工作寄存区R0~R7进行操作,操作码字节的低3位000~111指明了所用的寄存器。例如,指令:MOVA,R7;A←(R7)上一页下一页返回第十八页,共一百四十页,2022年,8月28日3.2寻址方式这条指令的功能是把寄存器R7的内容送人累加器A中,但数据存储器的4个工作寄存器区都有寄存器R7,并都有相应地址,怎样确定R7的地址呢?首先由程序状态字寄存器(PSW)中的D3位和D4位决定寄存器区,再与操作码低3位组合(n=7,为111)形成地址0FH,就是工作寄存器区1区中的R7寄存器。寄存器寻址方式执行过程如图3—4所示。3.2.4寄存器间接寻址由指令指出某一个寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。特别注意:寄存器的内容不是操作数,而是操作数所在的存储器地址。例如,指令:MOVA,@Ri这条指令中,i=0指RO;i=1,则指R1。上一页下一页返回第十九页,共一百四十页,2022年,8月28日3.2寻址方式指令功能是将以寄存器R0或R1内容为地址的存储单元中的数据送入A。执行这条指令首先应找到Ri地址,Ri的8位地址A7~A0中:A7A6A5=000,A2A1=00,A0由i决定,A4A3由程序状态字寄存器PSW中D4D3位决定,其作用实际是选定工作寄存器区域。寄存器间接寻址执行过程如图3—5所示,图中i=1,将以工作寄存器区l的R1内容64H为地址的存储单元的数据51H送人A。3.2.5变址寻址变址寻址也称基地址寄存器加变址寄存器间接寻址,它是以程序计数器PC或数据指针DPTR作为基地址寄存器,以累加器A作为变址寄存器,把两者内容相加形成操作数的地址。这种寻址方式用于读取程序存储器中常数表,或访问外部数据存储器。例如,指令:MOVCA,@A+DPTR;A←((A)+(DPTR))上一页下一页返回第二十页,共一百四十页,2022年,8月28日3.2寻址方式这条指令的功能是把DPTR的内容作为基地址,DPTR是16位寄存器,其高8位在DPH中,低8位在DPL中。把累加器A的内容作为地址偏移量,两者相加后得到16位地址,把该地址对应的程序存储器ROM单元中的内容送到A中,A中原数据自动擦除。寻址过程示意图如图3—6所示。3.2.6位寻址MCS一51指令系统有一些指令是用于位的操作。位操作指令能对内部RAM中的位寻址区和某些有位地址的特殊功能寄存器进行位操作,也就是说可对位地址空间的每个位进行位变量传送、状态控制、逻辑运算等操作,常用的位处理器是程序状态字寄存器的CY位。例如,指令:MOVC,06H;CY←(06H)上一页下一页返回第二十一页,共一百四十页,2022年,8月28日3.2寻址方式C累加器只有一位,指令是位寻址方式,操作码是0A2H,06H是位地址。指令含义是将内部RAM的20H单元的D6位的内容送入累加器C,其指令执行过程如图3—7所示。这条指令应区别于指令“MOVA,06H”,A是8位累加器,意思是将RAM中06H单元的内容送入A中,操作码是0E5H。3.2.7相对寻址相对寻址以程序计数器PC的当前值作为基地址,与指令中给定的相对偏移量rel相加,作为程序逻辑的转移地址。这种寻址方式用于相对转移指令中。上一页返回第二十二页,共一百四十页,2022年,8月28日3.3数据传送指令在MCS一51单片机中,数据传送是最基本和最主要操作。数据传送操作可以在片内RAM和SFR内进行,也可以在累加器A和片外存储器之间进行。指令中必须指定传送数据的源地址和目的地址,以便机器执行指令时把源地址中内容传送到目的地址中,但不改变源地址中内容。在这类指令中,除以累加器A为目的操作数寄存器指令会对奇偶标志位P有影响外,其余指令执行时均不会影响任何标志位。MCS一51单片机的数据传送指令共有28条,分为内部数据传送指令、外部数据传送指令、堆栈操作指令和数据交换指令等四类。本节将分类进行介绍,并给出相应的机器代码,以便相互对照加以理解。下一页返回第二十三页,共一百四十页,2022年,8月28日3.3数据传送指令3.3.1内部数据传送指令(15条)1.以A为目的操作数的指令这类指令的格式为:MOV[目的操作数,][源操作数]1)指令与指令代码指令指令代码操作MOVA,Rn11101rrrA←(Rn)MOVA,direct11100101directA←(direct)MOVA,@Ri111001liA←((Ri))MOVA,#data01110100dataA←data上一页下一页返回第二十四页,共一百四十页,2022年,8月28日3.3数据传送指令对Rn寻址的指令,其机器码字节的低三位为rrr,对应于8个工作寄存器之一,当为000时,表示RO;为001时,表示R1;依次类推。2)指令功能这组指令的功能是把源操作数的内容送入累加器A。3)源操作数寻址方式立即寻址;直接寻址;寄存器寻址;寄存器间接寻址等寻址方式。例3—2说明下列指令的功能及寻址方式。MOVA,R6MOVA,64HMOVA,@R0MOVA,#78H上一页下一页返回第二十五页,共一百四十页,2022年,8月28日3.3数据传送指令解MOVA,R6;A←(R6),寄存器寻址MOVA,64H;A←(64H),直接寻址MOVA,@R0;A←((R0)),寄存器间接寻址MOVA,#78H;A←78H,立即寻址4)指令字节表面看来,这组指令由三部分组成:操作码、A和源操作数,但操作码含有向A送数的信息,所以累加器A不占程序存储器的存储空间,故这个指令是两字节指令。一般来说,不占程序存储器的存储空间的还有各区的工作寄存器。上一页下一页返回第二十六页,共一百四十页,2022年,8月28日3.3数据传送指令2.以Rn为目的操作数的指令1)指令与指令代码指令指令代码操作MOVRn,A1111lrrrRn←(A)MOVRn,direct10101rrrdirectRn←(direct)MOVRn,#data0111lrrrdataRn←data2)功能这组指令的功能是将源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。3)源操作数寻址方式立即寻址;直接寻址;寄存器寻址。上一页下一页返回第二十七页,共一百四十页,2022年,8月28日3.3数据传送指令例3—4指出下列指令的功能和寻址方式。MOVR2,#64HMOVR3,64HMOVR7,A解MOVR2,#64H;R2←64H,立即寻址

MOVR3,64H;R3←(64H),直接寻址

MOVR7,A;R7←(A),寄存器寻址上一页下一页返回第二十八页,共一百四十页,2022年,8月28日3.3数据传送指令3.以直接寻址的单元为目的操作数指令1)指令与指令代码指令指令代码操作MOVdirect,A11110101directdirect←(A)MOVdirect,Rn10001rrrdirectdirect←(Rn)MOVdirectl,direct210000101direct2directldirectl←(direct2)MOVdirect,@Ri100001lidirectdirect←((Ri))MOVdirect,#data01110101direct,datadirect←data上一页下一页返回第二十九页,共一百四十页,2022年,8月28日3.3数据传送指令应注意:“MOVdirectl,direct2”指令译成指令代码时,源地址(direct2)在前,目的地址directl在后。2)功能这组指令的功能是把源操作数送人由直接地址指向的存储单元,直接寻址时,direct可以是特殊功能寄存器的地址、内部RAM区的地址,因此允许对端口直接操作。例如,指令:“MOVP1,40H”的含义是将40H单元的内容送入P1端口,机器指令为“100001010100000010010000”,是三字节指令。第一字节是操作码,第二字节是源操作数的地址,第三字节是目的操作数P1的地址。3)源操作数寻址方式立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。上一页下一页返回第三十页,共一百四十页,2022年,8月28日3.3数据传送指令例3—7若(64H)=70H,(A)=78H,说明执行指令“MOV64H,A”的结果。解执行后结果为(64H)=78H,(A)=78H不变。

4.以寄存器间接寻址的单元为目的操作数指令1)指令与指令代码指令指令代码操作MOV@Ri,A111101li(Ri)←(A)MOV@Ri,direct101001lidirect(Ri)←(direct)MOV@Ri,#data011101lidata(Ri)←data上一页下一页返回第三十一页,共一百四十页,2022年,8月28日3.3数据传送指令2)功能本组指令是将源操作数送人以R0或R1内容为地址的存储单元中。3)源操作数寻址方式立即寻址;直接寻址;寄存器寻址。例3—10若(30H)=35H,(R1)=70H,说明执行指令“MOV@R1,30H”的结果。解70H单元的内容为35H,同时(30H)=35H,(R1)=70H不变。3.3.2外部数据传送指令(7条)1.16位数据传送指令1)指令与指令代码指令指令代码MOVDPTR,#datal610010000dataH8

操作

dataL8DPTR←datal6上一页下一页返回第三十二页,共一百四十页,2022年,8月28日3.3数据传送指令2)功能把16位常数送入DPTR,16位的数据指针DPTR由DPH和DPL组成,执行结果把高位立即数送入DPH,低位立即数送入DPL,本指令是三字节指令。2.外部ROM的字节传送指令由于外部程序存储器只读不写,因此数据传送是单向的,即只从外部程序存储器中读出数据,并且只能向累加器A传送。这类指令共有两条,均属于变址寻址指令,因专门用于查表而又称为查表指令。(1)指令MOVCA,@A十PC上一页下一页返回第三十三页,共一百四十页,2022年,8月28日3.3数据传送指令本指令的指令代码是10000011,为一字节指令,当CPU读取本条指令后,PC已自动加1,指向下一条指令的首字节的地址。如果该指令存放单元为1000H,则PC的当前值为1001H。执行该指令时,把A的内容作为无符号数和PC当前内容相加后得到一个16位的地址,并将该地址指出的程序存储器单元内容送到累加器A。而A的内容从00H-0FFH共256个,所以(A)和(PC)相加得到的地址只能在该查表指令以下256个单元地址内。“MOVC”中的“C”表示程序存储器。例3—13设(A)=30H,执行指令“1000H:MOVCA,@A+PC”的结果。解该指令将程序存储器中1031H单元内容送入累加器A中。上一页下一页返回第三十四页,共一百四十页,2022年,8月28日3.3数据传送指令(2)指令MOVCA,@A+DPTR这条指令的指令代码是10010011,它的操作是以DPTR作为基地址寄存器,由A中的无符号数与DPTR中的内容相加得到一个16位的程序存储器的地址,并将该地址的内容送到A。例3—15设(DPTR)=8100H,(A)=40H,说明执行指令后的结果。MOVCA,@A+DPTR解将程序存储器中8140H单元内容送人累加器A。该指令只与A的内容相关,与该指令存放的地址无关,因此表格大小和位置可在64K字节程序存储器中任意安排,只要在查表之前对DPTR和A赋值,就使一个表格可被各个程序所公用。上一页下一页返回第三十五页,共一百四十页,2022年,8月28日3.3数据传送指令3.外部RAM的字节传送指令1)指令与指令代码指令指令代码操作MOVXA,@DPTR11100000((DPTR))→AMOVXA,@Ri1110001i((Ri)+(P2))→AMOVX@DPTR,A11110000(A)→(DPTR)MOVX@Ri,A1111001i(A)→(Ri)十(P2)上一页下一页返回第三十六页,共一百四十页,2022年,8月28日3.3数据传送指令

2)功能这组指令是将累加器A和外部扩展的RAM的数据传送,由于DPTR是16位地址指针,因此用DPTR间接寻址的指令寻址范围是0~64K字节;而Ri是8位寄存器,故用Ri间接寻址的指令寻址范围是外部RAM的低256单元。外部RAM的数据传送,只有通过累加器A来进行。在片外容量大于256个单元时,地址高8位由P2口输出,而Ri中的地址作为低8位地址经P0口输出,这些(Ri)与(P2)组合后,可对片外0~64KB范围寻址。例3—16将外部RAM30H单元的内容送入内部RAM20H的单元。解MOVR0,#30HMOVXA,@R0MOV20H,A上一页下一页返回第三十七页,共一百四十页,2022年,8月28日3.3数据传送指令3.3.3堆栈操作指令(2条)在MCS一51内部RAM中可以设定一个后进先出的堆栈,地址为30H~7FH,堆栈指针SP中的内容总是堆栈区中最后一个进栈数据所在的存储单元地址。堆栈操作包括进栈和出栈两种。1.进栈指令与指令代码指令指令代码操作PUSHdirect11000000directSP←SP+1(SP)←(direct)这条指令首先将堆栈指针SP+1,然后把直接地址里的内容传送到堆栈指针SP指出的内部RAM存储单元中。上一页下一页返回第三十八页,共一百四十页,2022年,8月28日3.3数据传送指令例3—18设(SP)=30H,(ACC)=60H,(B)=70H,执行下列指令后结果怎样?PUSHACCPUSHB解操作过程是:PUSHACC;(SP)+1,31H→SP,(ACC)→31HPUSHB;(SP)+1,32H→SP,(B)→32H结果为(31H)=60H,(32H)=70H,(sp)=32H上一页下一页返回第三十九页,共一百四十页,2022年,8月28日3.3数据传送指令2.出栈指令与指令代码指令指令代码操作POPdirect11010000direct(SP)→directSP←SP-1这条指令的功能是将堆栈指针SP指出的内部RAM单元的内容送入直接地址指出的存储单元中,堆栈指针SP减l。出栈指令用于恢复CPU现场。例3—19设(SP)=32H,(32H)=70H,(31H)=60H,执行下述指令后结果怎样?POPDPHPOPDPL上一页下一页返回第四十页,共一百四十页,2022年,8月28日3.3数据传送指令解操作过程是:POPDPH;((SP))→DPH,(SP)一l→SPPOPDPL;((SP))→DPL,(SP)一1→SP结果为(DPH)=70H,(DPL)=60H,所以,DPTR=7060H,(SP)=30H3.3.4数据交换指令(4条)数据交换指令共有4条,其中字节交换指令3条,半字节交换指令1条。1.字节交换指令1)指令与指令代码指令指令代码XCHA,Rn11001rrrXCHA,direct11000101directXCHA,@Ri1100011i上一页下一页返回第四十一页,共一百四十页,2022年,8月28日3.3数据传送指令2)功能将累加器A的内容和源操作数内容相互交换。3)源操作数寻址方式寄存器寻址;直接寻址;寄存器间接寻址。例3一20设(A)=80H,(R1)=74H,(74H)=60H,(60H)=50H,(80H)=40H,顺序执行下列指令后结果怎样?XCHA,R1XCHA,60HXCHA,@R1解执行指令①结果:(A)=74H,(R1)=80H②结果:(A)=50H,(60H)=74H③结果:(A)=40H,(80H)=50H上一页下一页返回第四十二页,共一百四十页,2022年,8月28日3.3数据传送指令2.半字节交换指令1)指令与指令代码指令指令代码XCHDA,@Ri110101li2)功能这条指令将A的低4位与R0或R1指出的RAM单元低4位相互交换,各自高4位不变。3)源操作数寻址方式为寄存器间接寻址。上一页下一页返回第四十三页,共一百四十页,2022年,8月28日3.3数据传送指令例3—22设(A)=15H,(R0)=30H,(30H)=40H,执行下列指令后结果怎样?XCHDA,@R0解执行结果为:(A)=10H,(30H)=45H以上所述的均为传送类指令,数据传送指令对标志位的影响:(1)只有PSW寄存器直接参加操作,被改写了内容的情况下,标志位受影响。(2)PSW中P标志位(奇偶校验位)总是追踪累加器A的状态。如果A中有奇数个1,则P=1,否则P=0。其他标志位不受影响。上一页返回第四十四页,共一百四十页,2022年,8月28日3.4算术运算指令MCS一51指令系统的算术运算指令比较丰富,包括加、减、乘、除法指令,数据运算能力较强。3.4.1加法指令(14条)加法指令使用助记符“ADD”。1.不带进位的加法指令1)指令与指令代码指令指令代码ADDA,Rn00101rrrADDA,direct00100101directADDA,@Ri0010011iADDA,#data00100100data下一页返回第四十五页,共一百四十页,2022年,8月28日3.4算术运算指令2)功能将源操作数与累加器A的内容相加,其结果放于累加器A中。3)源操作数的寻址方式寄存器寻址;直接寻址;寄存器间接寻址;立即寻址。4)对标志位的影响加法运算对程序状态字寄存器PSW的各标志位有一定的影响。①如果位7有进位输出,则CY=l,否则CY=0;②如果位3有进位输出,则AC=1,否则AC=0;③溢出标志位OV=C6⊕C7,如果位6有进位输出而位7没有或者位7有进位而位6没有,则OV=1,否则OV=0;④P标志位始终跟踪累加器A内“1”的个数,如果A中有奇数个“1”,则P=1。上一页下一页返回第四十六页,共一百四十页,2022年,8月28日3.4算术运算指令例3—23设(A)=42H,(R0)=0FCH,说明执行指令“ADDA,R0”的结果。解01000010+)1111110000111110因C6与C7均有进位,故OV=0,结果有5个“1”,为奇数,故P=1,AC=0,CY=1,(A)=3EH。上一页下一页返回第四十七页,共一百四十页,2022年,8月28日3.4算术运算指令2.带进位加法指令1)指令与指令代码指令指令代码ADDCA,Rn00111rrrADDCA,direct00110101directADDCA,@Ri0011011iADDCA,#data00110100data2)功能这组指令同时把源操作数、进位标志位和累加器A的内容相加,结果存放在累加器A中。上一页下一页返回第四十八页,共一百四十页,2022年,8月28日3.4算术运算指令3)对PSW的影响如果位7有进位输出,则进位标志位CY为“1”;否则CY为“0”;如果位3有进位输出,则标志位AC=1;若位3无进位输出,AC=0;如果位6有进位输出而位7没有或者位7有进位输出而位6没有,则溢出标志位OV=1,否则OV=0。4)寻址方式与ADD指令相同。例3—25设(A)=85H,(20H)=0FFH,CY=1执行指令“ADDCA,20H”的结果。解1000010111111111+)1(1)10000101则(A)=85H,CY=1,AC=l,P=1,OV=0上一页下一页返回第四十九页,共一百四十页,2022年,8月28日3.4算术运算指令3.增量指令1)指令与指令代码指令指令代码INCA00000100INCRn00001rrrINCdireet00000101directINC@Ri0000011iINCDPTR101000112)功能这组指令是把源操作数加1,应注意:当用本指令修改输出口P0~P3时,原始口数据的值将从口锁存器读入,而不是从引脚读入。上一页下一页返回第五十页,共一百四十页,2022年,8月28日3.4算术运算指令3)对标志位影响若原来为0FFH,加1后将溢出为00H,对A的操作可能影响P外,不影响任何标志。4)寻址方式直接寻址;寄存寻址;寄存器间接寻址。例3—26设(A)=0FFH,(R3)=0FH,(30H)=0FOH,(R0)=40H,(40H)=00H,执行下列指令的结果。INCA;(A)+1→AINCR3;(R3)+1→R3INC30H;(30H)+l→30HINC@R0;((R0))+1→(R0)解(A)=00H,(R3)=10H,(30H)=0F1H,(R0)=40H不变,(40H)=01H,PSW状态不改变。上一页下一页返回第五十一页,共一百四十页,2022年,8月28日3.4算术运算指令4.十进制调整指令1)指令与指令代码指令指令代码DAA110101002)功能若该指令上一条指令是一条加法指令,加数和被加数为十进制BCD码,相加结果不是十进制的BCD码,所以必须将结果调整为BCD码,该指令自动选择调整值00H、06H、60H、66H,将结果调整为十进制BCD码。上一页下一页返回第五十二页,共一百四十页,2022年,8月28日3.4算术运算指令例3—27设(A)=56H,(R5)=67H,说明执行指令后的结果。ADDA,R5DAA解01010110+)0110011110111101自动选择66H与上述结果相加来调整如下:

10111101+)0110011000100011结果为(A)=23H,CY=1。上一页下一页返回第五十三页,共一百四十页,2022年,8月28日3.4算术运算指令3.4.2减法指令(8条)1.带进位减法指令1)指令与指令代码指令指令代码SUBBA,Rn10011rrrSUBBA,direct10010101directSUBBA,@Ri100101liSUBBA,#data10010100data上一页下一页返回第五十四页,共一百四十页,2022年,8月28日3.4算术运算指令2)功能这组指令功能是从累加器A中减去源操作数和进位标志,结果在累加器A中。3)对标志位影响①如果位7需借位,则CY=1,否则CY=0;②如果位3需借位,则AC=1,否则AC=0;③如果位6需借位而位7不需借位或位7需借位而位6不需借位,则OV=1,否则OV=0。上一页下一页返回第五十五页,共一百四十页,2022年,8月28日3.4算术运算指令4)源操作数寻址方式立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。例3—28设(A)=0C9H,(R2)=5CH,CY=1,执行指令“SUBBA,R2”的结果。解1100100101011100-)101101100结果:(A)=6CH,CY=0,AC=1(位3有借位),OV=1(位7无借位,位6有借位),P=0(结果有4个“1”)上一页下一页返回第五十六页,共一百四十页,2022年,8月28日3.4算术运算指令2.减1指令1)指令与指令代码指令指令代码DECA00010100DECRn00011rrrDECdirect00010101directDEC@Ri000101li2)功能将源操作数减1,若原来为00H,减1后为0FFH,不影响标志位;但(A)减1时,将影响P标志位。当本指令用于修改输出口,用作原始VI数据的值将从口锁存器P0~P3读入而不从引脚读入。上一页下一页返回第五十七页,共一百四十页,2022年,8月28日3.4算术运算指令例3—29设(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,说明执行下列指令的结果。DECA;(A)-1→ADECR7;(R7)-l→R7DEC30H;(30H)-1→30HDEC@R1;((R1))-1→(R1)解结果为:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志。上一页下一页返回第五十八页,共一百四十页,2022年,8月28日3.4算术运算指令3.4.3乘法指令(1条)1)指令与指令代码指令指令代码MULAB101001002)功能将累加器A和寄存器B中的8位无符号整数相乘,其中16位积的低位8位字节放在累加器A中,高8位字节放在寄存器B中。如果积大于255(0FFH),则置位溢出标志OV,否则清0。进位标志CY总是清0。该指令执行时间是4个机器周期。例3—30设(A)=50H,(B)=0AOH,执行指令“MULAB”的结果。解结果为(B)=32H,(A)=00H,即为3200H。上一页下一页返回第五十九页,共一百四十页,2022年,8月28日3.4算术运算指令3.4.4除法指令(1条)1)指令与指令代码指令指令代码DIVAB100001002)功能把A中的8位无符号整数除以寄存器B的8位无符号整数,所得的整数部分放在A中,余数放在B中。如果原来的B中的内容为0,即除数为0,则A和B中的内容不定,并使标志位OV=1,表明除法没有意义。在任何情况,CY都清“0”。该指令执行时间是4个机器周期。上一页返回第六十页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令MCS一51指令系统的逻辑运算和环移指令包括逻辑与、或、异或等指令,以及对累加器A进行清0、取反、循环移位、半字交换等操作指令。3.5.1逻辑运算指令(20条)这20条指令可以对两个八位二进制数进行与、或、非和异或等逻辑运算、常用来对数据进行逻辑处理,使之适合于传送、存储和输出打印等。在这类指令中,除以累加器A为目标寄存器指令外,其余指令均不会影响PSW中任何标志位。1.逻辑与指令指令助记符为“ANL”,表示是“AND”(与)和“LOG”(逻辑)的组合。1)指令与指令代码下一页返回第六十一页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令1)指令与指令代码指令指令代码ANLA,Rn0101lrrrANLA,direct01010101directANLA,@Ri0101011iANLA,#data01010100dataANLdirect,A01010010directANLdirect,#data01010011directdata上一页下一页返回第六十二页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令2)功能该组指令将源操作数和目的操作数之间按位进行逻辑与操作,结果存放在目的操作数中。所谓“位”进行逻辑与,是指两个8位操作数的对应位的两个码之间进行相与,只有同为1,结果才是1。当这条指令用于修改一个输出口时,作为原始口数据的值将从输出口数据锁存器(P0~P3)读人,而不是读引脚状态。3)寻址方式立即寻址;寄存器寻址;直接寻址;寄存器间接寻址。例3—31设(A)=77H,(R0)=0DH,说明执行指令“ANLA,R0”的结果。解01110111∧)000011010000010l结果为:(A)=05H。上一页下一页返回第六十三页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令指令助记符“ORL”,由“OR”(或)和“LOG”(逻辑)的组合。1)指令与指令代码指令指令代码ORLA,Rn01001rrrORLA,direct01000101directORLA,@Ri010001liORLA,#data01000100data0RLdirect,A01000010directORLdirect,#data01000011directdata上一页下一页返回第六十四页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令2)功能这组指令将源操作数和目的操作数之间按位进行逻辑或操作,结果存到目的操作数。该指令与“逻辑与”类似,用于修改P0~P3数据时,原始数据值为口锁存器内容,结果也存放于口锁存器中。3)寻址方式立即寻址;寄存器寻址;直接寻址;寄存器间接寻址。例3—33设(P1)=51H,(A)=33H,说明执行指令“ORLP1,A”的结果。解01010001∨)0011001101110011结果为(P1)=73H上一页下一页返回第六十五页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令3.逻辑异或指令指令助记符“XRL”,XR表示异或,比较的两数码,相同出0,不同出1,“L”表示“逻辑”。1)指令与指令代码指令指令代码XRLA,Rn01101rrrXRLA,direct01100101directXRLA,@Ri011001liXRLA,#data01100100dataXRLdirect,A01100010directXRLdirect,#data01100011directdata上一页下一页返回第六十六页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令2)功能这组指令将源操作数和目的操作数之间执行按位的逻辑异或操作,结果存放到目的操作数中。同样,对P1~P3口的数据修改,原始数据为口锁存器内容,结果也存放于口锁存器中。3)寻址方式立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。例3—35设(A)=64H,(R5)=0F7H,说明执行指令“XRLA,R5”后的结果。解01100100⊕)1111011110010011结果为(A)=10010011即93H。上一页下一页返回第六十七页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令4.累加器清零和取反指令(1)清零指令CLRA该指令的指令代码为11100100,功能是将累加器A清“0”,不影响CY、AC、OV等标志。(2)取反指令CPLA该指令的指令代码为11110100,功能是将累加器A中的每一位取反,原来为1的位变0,原来为0的位变1,不影响标志位。例3—37设(A)=01010101B,说明执行指令“CPLA”的结果。解结果为(A)=10101010B。上一页下一页返回第六十八页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令3.5.2环移指令(5条)1.左环移指令RLA该指令的指令代码为00100011,该指令将累加器A的内容向左循环移1位,位7位移人位0,不影响其他标志位。如图3—9所示。2.带进位左环移指令RLCA该指令的指令代码为00110011,该指令将累加器A的内容和进位标志一起向左环移一位,A中的D7位移入进位位CY,CY的值移入A的DO位,不影响其他标志位。如图3—10所示。

上一页下一页返回第六十九页,共一百四十页,2022年,8月28日3.5逻辑运算和环移指令3.右环移指令RRA该指令的指令代码为00000011,该指令的功能是将累加器A的内容向右环移一位,DO位移入D7位,不影响标志位。如图3—11所示。4.带进位右环移指令RRCA该指令的指令代码为00010011,该指令的功能是累加器ACC的内容和进位标志一起向右环移一位,DO进入CY,CY移入D7。如图3—12所示。5.累加器A半字节交换指令SWAPA该指令的指令代码为11000100,该指令的功能是将累加器A的高半字节(D7~D4)和低半字节(D3~DO)互换。上一页返回第七十页,共一百四十页,2022年,8月28日3.6位操作指令在MCS一51系列单片机中,可以以程序状态字寄存器的进位位CY(PSW.7)作为累加器C,以数据存储器(RAM)和特殊功能寄存器SFR内的位寻址区的位单元作为操作数,进行位变量的传送、修改和逻辑等操作。3.6.1位变量传送指令(2条)1)位操作指令位操作指令的格式是:指令助记符[目标位,][源位]指令指令代码MOVC,bit10100010bitMOVbit,C10010010bit下一页返回第七十一页,共一百四十页,2022年,8月28日3.6位操作指令2)功能该指令把源位单元中的数据送到目标位单元中,其中一个操作数必须是位累加器C,另一个可以是任何直接寻址的位,也就是说位变量的传送必须经过C。3)寻址方式位寻址。例3—38说明下列指令功能。MOVC,13HMOVP1.0,C解①“13H”是位地址,它处于数据存储器22H的存储单元的D3位,执行指令就是将这一位的数码送到累加器C。②将CY中的数码送到P1的口锁存器的D0位。上一页下一页返回第七十二页,共一百四十页,2022年,8月28日3.6位操作指令3.6.2位变量修改指令(6条)1)指令与指令代码指令指令代码CLRC11000011CLRbit11000010bitCPLC10110011CPLbit10110010bitSETBC11010011SETBbit11010010bit上一页下一页返回第七十三页,共一百四十页,2022年,8月28日3.6位操作指令2)功能这组指令将操作数指出的位清“0”、取反、置“1”,不影响其他标志。“CLR”是清0,“CPL”是取反,“SETB”是置“1”。例3—39说明下列指令的功能。CLRCCLR35HCPL08HSETBP1.5解CLRC;0→CYCLR35H;0→(26H).5CPL08H;→(21H).0SETBP1.5;1→P1.5上一页下一页返回第七十四页,共一百四十页,2022年,8月28日3.6位操作指令3.6.3位变量逻辑操作指令(4条)1.位变量逻辑与指令1)指令与指令代码指令指令代码ANLC,bit10000010bitANLC,/bit10110000bit2)功能如果源位的内容为逻辑0,则CY清0,否则CY保持不变。“/bit”的斜线表示用位的内容的逻辑非为源值,但不影响本身值,不影响别的标志。3)寻址方式位寻址。上一页下一页返回第七十五页,共一百四十页,2022年,8月28日3.6位操作指令例3—40设P1为输入口,P3.0作输出口,说明执行下列命令的结果。MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C解结果为(P3.0)=(P1.0)∧(P1.1)∧()2.位变量逻辑或指令1)指令与指令代码指令指令代码ORLC,bit01110010bitORLC,/bit10100000bit上一页下一页返回第七十六页,共一百四十页,2022年,8月28日3.6位操作指令2)功能如果源位的值为1,则进位标志CY=1,否则进位标志CY保持原来状态。斜线“/”表示逻辑非,但源位本身保持不变。例3—4l设P1口为输出口,说明执行下列指令组后的结果。MOVC,00H;(20H.0)→CORLC,01H;(C)V(20H.1)→CORLC,02H;(C)V(20H.2)→CORLC,03H;(C)v(20H.3)→CORLC,04H;(C)V(20H.4)→CORLC,05H;(C)V(20H.5)→CORLC,06H;(C)V(20H.6)→CORLC,07H;(C)V(20H.7)→CMOVP1.0,C;(C)→P1.0解结果为RAM的20H单元中只要有一位为1,P1.0输出高电平。上一页返回第七十七页,共一百四十页,2022年,8月28日3.7控制转移指令单片机在执行程序的过程中,有时需要改变程序的执行顺序,跳转到指定的单元地址再顺序执行。这些使单片机在执行程序的过程中产生跳转的指令就是控制转移指令。3.7.1无条件转移指令(4条)1.长跳转指令1)长跳转指令LJMPaddrl6

指令代码为00000010a15~a8a7~a0。2)功能该指令是三字节指令,执行时把16位地址中的高8a15~a8位送入PCH,低8位a7~a0送人PCL中,无条件地转向指定地址。该指令不影响任何标志,转移的范围可达64K字节,故称长转移指令。下一页返回第七十八页,共一百四十页,2022年,8月28日3.7控制转移指令2.短跳转指令1)短跳转指令AJMPaddrll指令代码为al0a9a800001a7~a0。2)功能该指令是二字节的指令,操作数“addrll”应是一个十六位二进制数,表示转向的目标地址,其中“1l”表示低11位,说明转向的目标地址范围由低11位组合决定,故跳转的范围是2K字节。该指令在2K字节范围内将程序转移到目标地址。因程序是按PC指针来执行的,执行完这条指令后PC按一定规律形成转移的目标地址,实现转移。为保证程序的转移正确执行,编写指令时应保证操作数“addrl1”的高5位与PC当前值的高5位相同。PC当前值为该指令首址加2。上一页下一页返回第七十九页,共一百四十页,2022年,8月28日3.7控制转移指令

例3—42判别下列指令能否正确执行?①2000H:AJMP274FH②3000H:AJMP3A4FH解①PC当前值=2000H+2H=2002H,高5位为00100,指令设定的目标地址为274FH,高5位为00100,二者相等,故指令能正确执行。②PC当前值=3000H+2H=3002H,高5位为00110,指令设定的目标地址为3A4FH,高5位为00111,二者不相等,故指令不能正确执行。上一页下一页返回第八十页,共一百四十页,2022年,8月28日3.7控制转移指令3.相对转移指令1)相对转移指令SJMPrel指令代码为10000000rel。2)功能该指令是无条件跳转指令,执行时程序计数器指针PC+2后成为PC当前值,并把有符号数“rel”值加到PC上,并计算出转向目标地址。rel是个8位二进制数,以补码表示,称为“偏移量”,最高位是符号位,正数为0,负数为“1”,余下部分共7位,表示128个单元。所以rel表示-128~127之间的256个单元。所以转向的目标地址可以在这条指令前128字节列后127字节之间。上一页下一页返回第八十一页,共一百四十页,2022年,8月28日3.7控制转移指令3)偏移量的计算①目标地址大于PC当前值rel=目标地址一源地址一2=地址差一2:②目标地址小于PC当前值rel=[目标地址一源地址一2]补根据补码的计算规则可得:rel=0FEH一地址差。对于三字节相对转移指令只需把原式中的“2”改为“3”即可计算rel值。一般来说,偏移量不需手工计算,在汇编程序中都有偏移量计算功能,本书实验部分偏移量计算就是由实验仪自动完成,而汇编程序中“rel”部分给出符号地址。上一页下一页返回第八十二页,共一百四十页,2022年,8月28日3.7控制转移指令4.基寄存器加变址寄存器间接转移指令1)指令JMP@A+DPTR指令代码为01110011。2)功能把累加器A中8位无符号数与数据指针DPTR中的16位数相加,其结果作为下条地址送人PC,并且不改变累加器A和数据指针内容,也不影响标志,利用这条指令也能实现程序的转移。例3—43执行下列指令组后的PC值为多少?MOVA,#20HMOVDPTR,#1000HJMP@A+DPTR解顺序执行完这3条指令后,PC=1020H。上一页下一页返回第八十三页,共一百四十页,2022年,8月28日3.7控制转移指令该指令的转移目标地址不是指令中直接给出的,而是随着A中的内容在以DPTR为起始地址(可任意设定)的256个字节范围内变化。3.7.2条件转移指令(13条)条件转移指令是指满足一定条件时,程序才进行相对转移,若条件不满足时则顺序执行下面的指令,目的地址在以下一条指令的起始地址为中心的256字节范围中(-

温馨提示

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

评论

0/150

提交评论