微机原理与控制第三章(季).ppt
第3章 MCS-51单片机的指令系统,3.1 指令格式3.2 寻址方式3.3 数据传送指令3.4 算术运算指令3.5 逻辑运算和环移指令3.6 位操作指令3.7 控制转移指令3.8 调用和返回指令3.9 伪指令3.10汇编语言程序设计,3.1 指令格式,单片机要执行某种操作,用户必须按照格式编写指令,单片机才能识别并准确操作。指令的编码规则称为指令格式。3.1.1 指令的格式1指令的一般格式MCS-51单片机指令的一般格式为:操作码 操作数。例如指令:74H 30H。1)操作码 用来表示执行什么样的操作,例如传送、加、减等。MCS-51系列单片机的操作码为8位二进制的机器码,在指令中为第一字节。用机器码写成的指令是机器指令,也称为指令代码。,3.1 指令格式,2)操作数 表示参与操作的数据或数据的存储地址,不同类型的指令,操作数的个数是不一样的,可以有3个、2个、1个等。在具有多个操作数的指令中,把它们分别称为第一操作数、第二操作数等。如果操作数是一个直接参加操作的数据,这种操作数称为立即数;而大部分操作数存放于寄存器或数据存储器的某个存储单元,操作数字段仅指出操作数所在的寄存器或存储器地址。2常用指令格式编写指令时,要记住各种由“0”和“1”二进制数组成的代码和他们的含义是很困难的,既容易出错,又不易检查。所以常用的指令格式是以助记符表示的符号指令,也称汇编语言,由标号、操作码助记符、操作数和注释4个字段组成,格式如下:标号:操作码助记符 操作数1,操作数2;注释其中,方括号内的项为任选项,需要此项时,指令中不写方括号;两操作数之间应以逗号分开。,3.1 指令格式,例如,指令:START:MOV A,#79H;A79H1)标号 标号是用户定义的符号,由以字母开始的18个字符(字母或数字)组成,它代表指令的符号地址,通常在程序分支、转移等所需要的地方加上一个标号,并不是每条指令都必须有标号。当将指令转换成机器指令时,指令第一字节(也称首字节)的存储单元地址值赋给该标号。2)操作码助记符 助记符是一些代表操作含义的英文缩写,一般由25个英文字母组成,如“MOV”表示“传送”、“ADD”表示“加”等。操作码助记符对应的机器码是指令的第一字节,也是指令不可缺少的部分。3)操作数 与机器指令格式中的操作数相似。4)注释 注释是对本指令或本段程序的功能说明,便于对程序的阅读理解,在转换成机器指令时不予考虑。注释的前面需加分号“;”。,3.1 指令格式,单片机识别机器指令,编程人员使用符号指令,机器指令与符号指令之间有一一对应的关系,绝没有重复。各种指令的机器码不需要记忆,编程人员可查阅机器指令与符号指令的映射表将符号指令译成机器指令,这个过程称为汇编;但更多的是用专门的软件来完成汇编过程。3.1.2 指令的分类MCS-51指令系统有33种操作功能。指令助记符与寻址方式组合,得到111种指令。分类如下:,3.1 指令格式,1按字节数分类 1)单字节指令,有49条。2)双字节指令,有45条。3)3字节指令,有17条。2按指令执行时间分类 1)单周期指令,有64条。2)双周期指令,有45条。3)四周期指令,乘、除各有1条。,3.1 指令格式,3按功能分类1)数据传送指令,有28条。这类指令主要用于单片机片内RAM和特殊功能寄存器SFR之间传送数据,也可以用于单片机片内和片外存储单元之间传送数据。数据传送指令是把源地址中操作数传送到目的地址(或目的寄存器)的指令,在该指令执行后源地址中的操作数不被破坏。源操作数有8位和16位之分,前者称为8位数传送指令,后者叫做16位数传送指令。交换指令也属于数据传送指令,是把两个地址单元中内容相互交换。因此,这类指令中的操作数或操作数地址是互为“源操作数”和“目的操作数”的。,3.1 指令格式,2)算术运算指令,有24条。算术运算指令用于对两个操作数进行加、减、乘、除等算术运算。在两个操作数中,一个应放在累加器A中,另一个可以在某个寄存器或片内RAM单元中,也可以放在指令码的第二和第三字节中。指令执行后,运算结果便可保留在累加器A中,运算中产生的进位标志、奇偶标志和溢出标志等皆可保留在PSW中。参加运算的两数可以是8位的,也可以是16位的。3)逻辑运算和环移指令,有25条。这类指令包括逻辑运算和环移两类指令。逻辑操作指令用于对两个操作数进行逻辑乘、逻辑加、逻辑取反和异或等操作,大多数指令也需要把两个操作数中的一个预先放入累加器A,操作结果也在累加器A中。环移指令可以对累加器A中的数进行环移。环移指令有左环移和右环移之分,也有带进位位Cy和不带进位位Cy之分。,3.1 指令格式,4)位操作指令,有12条。位操作指令又称布尔变量操作指令,共分为位传送、位置位、位运算和位控制转移指令等四类。其中,位传送、位置位和位运算指令的操作数不是以字节为单位进行操作的,而是以字节中某位为单位进行的;位控制转移指令不是以检测某个字节的结果为条件而转移的,而是以检测字节中的某一位的状态来转移的。5)控制转移指令,有22条。控制转移指令分为条件转移、无条件转移、调用和返回等指令。这类指令的共同特点是可以改变程序执行的流向,或者是使CPU转移到另一处执行,或者是继续顺序地执行。无论是哪一类指令,执行后都会改变程序计数器PC中的值。,3.1 指令格式,3.1.3 指令的存放空间指令是单片机执行某种操作的命令,用户若要单片机完成一件事情,必须先编写指令,再转成机器码形式,从键盘等设备输入到程序存储器存放。存放在程序存储器的哪个空间,用户应首先给程序计数器PC一个首地址,指令就从这个首地址开始存放,一个字节存放到一个单元后,程序计数器PC自动加1,指令的下一字节存放在PC当前值的地址单元。3.1.4 指令常用的缩写符号说明在描述MCS一51指令系统的功能时,经常使用一些缩写符号,各符号的含义如下:(1)A 累加器ACC。常用ACC表示其地址,用A表示其名称。(2)AB 累加器ACC和寄存器B组成的寄存器对。通常在乘、除法指令中出现。,3.1 指令格式,(3)Rn(n=07),选定的当前工作寄存器,范围为R0R7。(4)Ri(i=0或1),工作寄存器R0或R1。(5)间接寻址符号,简称间址符,常与Ri配合用,如Ri,表示指令对Ri寄存器间接寻址。(6)#data 8位立即数,“#”表示后面的data是立即数而不是直接地址。(7)direct 表示片内RAM存储单元的8位直接地址,立即数和直接地址可用二进制码表示,后缀为“B”;也可用十六进制码表示,后缀为“H”;如果是以字母开头的十六进制数,在其前面应加一个“0”。如,二进制码10101000B也可转成十六进制码A8H,但必须写成“0A8H”。,3.1 指令格式,(8)DPTR:表示以DPTR为数据指针的间接寻址,用于对外部64K RAMROM寻址。(9)rel 以补码形式表示的8位地址偏移量,范围为-128+127。(10)Bit 位地址。(11)$:当前指令的地址。指令中还经常使用到下列符号,含义如下:加;减;乘;除;,3.1 指令格式,逻辑与;逻辑或;逻辑异或;大于;不等于;取代或替换;(X)表示X寄存器或X地址单元中的内容;(X)表示以X寄存器或X地址单元中的内容为地址的存储单元中的内容;()将X寄存器的内容取反;rrr 机器指令三位值由工作寄存器Rn确定,R0R7对应的rrr分别为000111。,3.1 指令格式,例31 已知数据存储器各单元内容如图31所示,说明(50H)、(A)、()、(50H)各为多少?解(50H):表示地址为50H存储单元里的内容01110000B。(A):表示累加器A中的内容,因A的地址为0EOH,所以(A)为00100001B。():表示地址为50H存储单元里的内容取反,为10001111B。(50H):以50H存储单元的内容70H为地址的存储单元内的内容,为00111001B。,图31,0EOH,70H,50H,3.2 寻址方式,指令包含操作码和操作数,有些指令直接给出参与运算和操作的数,但更多指令只是以各种方式给出操作数所在的地址。单片机通过地址信息寻找操作数的方式,称为寻址方式。寻址方式越多,表明计算机的功能越强,灵活性越大。在MCS一51单片机中,操作数的存放范围是很宽的,可以放在片外ROMRAM中,也可以放在片内ROMRAM以及特殊功能寄存器SFR中。为了适应这一操作数范围内的寻址,MCS一51的指令系统共使用了七种寻址方式,它们是立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。,3.2 寻址方式,3.2.1 立即寻址指令中的操作数只是数据,而不是地址,这样的操作数就称为立即数,立即数直接参与操作,这种寻址方式称为立即寻址。其实立即寻址并没有寻址过程。这类指令的立即数大多数是一个字节的8位二进制数。指令中,操作数前有“#”符号,据此可以判定是立即寻址,并有相应的操作码。例如,指令:MOV A,#64H;A64H这条指令的功能是把数据64H(立即数)送到累加器A中,在MCS一51指令系统中有相应操作码为74H,立即寻址的示意如图32所示,设程序计数器PC=70H。,图3-2 立即寻址的示意图,3.2 寻址方式,3.2.2 直接寻址指令中直接给出操作数所在地址的寻址方式称为直接寻址。例如,指令:MOV A,64H;A(64H)这条指令的功能是把内部数据存储器地址为64H的存储单元内容送至累加器A,这个指令的操作码为0E5H,直接寻址的示意图如图33所示,设程序计数器PC=38H。由图可知,地址为64H的存储单元内容为87H,则指令执行结果是将87H送到ACC。,图3-3 直接寻址的示意图,3.2 寻址方式,应注意直接寻址方式与立即寻址方式的区别:虽然两者指令的第二字节相同,但在助记符指令中相差一个“#”号,由于符号指令与机器指令有一一对应的关系,故操作码不同,所以执行结果不一样,而在操作码中含有寻址方式的信息。3.2.3 寄存器寻址由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器寻址对所选的工作寄存区R0R7进行操作,操作码字节的低3位000111指明了所用的寄存器。例如,指令:MOV A,R7;A(R7),3.2 寻址方式,这条指令的功能是把寄存器R7的内容送人累加器A中,但数据存储器的4个工作寄存器区都有寄存器R7,并都有相应地址,怎样确定R7的地址呢?首先由程序状态字寄存器(PSW)中的D3位和D4位决定寄存器区,再与操作码低3位组合(n=7,为111)形成地址0FH,就是工作寄存器区1区中的R7寄存器。寄存器寻址方式执行过程如图34所示。3.2.4 寄存器间接寻址由指令指出某一个寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。特别注意:寄存器的内容不是操作数,而是操作数所在的存储器地址。例如,指令:MOV A,Ri这条指令中,i=0指R0;i=1,则指R1。,图3-4 寄存器寻址方式,3.2 寻址方式,指令功能是将以寄存器R0或R1内容为地址的存储单元中的数据送入A。执行这条指令首先应找到Ri地址,Ri的8位地址A7A0中:A7A6A5=000,A2A1=00,A0由i决定,A4A3由程序状态字寄存器PSW中D4D3位决定,其作用实际是选定工作寄存器区域。寄存器间接寻址执行过程如图35所示,图中i=1,将以工作寄存器区l的R1内容64H为地址的存储单元的数据51H送人A。3.2.5 变址寻址变址寻址也称基地址寄存器加变址寄存器间接寻址,它是以程序计数器PC或数据指针DPTR作为基地址寄存器,以累加器A作为变址寄存器,把两者内容相加形成操作数的地址。这种寻址方式用于读取程序存储器中常数表,或访问外部数据存储器。例如,指令:MOVC A,A+DPTR;A(A)+(DPTR),图3-5 寄存器间接寻址方式,3.2 寻址方式,这条指令的功能是把DPTR的内容作为基地址,DPTR是16位寄存器,其高8位在DPH中,低8位在DPL中。把累加器A的内容作为地址偏移量,两者相加后得到16位地址,把该地址对应的程序存储器ROM单元中的内容送到A中,A中原数据自动擦除。寻址过程示意图如图36所示。3.2.6 位寻址MCS一51指令系统有一些指令是用于位的操作。位操作指令能对内部RAM中的位寻址区和某些有位地址的特殊功能寄存器进行位操作,也就是说可对位地址空间的每个位进行位变量传送、状态控制、逻辑运算等操作,常用的位处理器是程序状态字寄存器的CY位。例如,指令:MOV C,06H;CY(06H),图3-6 变址寻址方式,3.2 寻址方式,C累加器只有一位,指令是位寻址方式,操作码是0A2H,06H是位地址。指令含义是将内部RAM的20H单元的D6位的内容送入累加器C,其指令执行过程如图37所示。这条指令应区别于指令“MOV A,06H”,A是8位累加器,意思是将RAM中06H单元的内容送入A中,操作码是0E5H。3.2.7 相对寻址相对寻址以程序计数器PC的当前值作为基地址,与指令中给定的相对偏移量rel相加,作为程序逻辑的转移地址。这种寻址方式用于相对转移指令中。,图3-7 位寻址方式,3.3 数据传送指令,在MCS一51单片机中,数据传送是最基本和最主要操作。数据传送操作可以在片内RAM和SFR内进行,也可以在累加器A和片外存储器之间进行。指令中必须指定传送数据的源地址和目的地址,以便机器执行指令时把源地址中内容传送到目的地址中,但不改变源地址中内容。在这类指令中,除以累加器A为目的操作数寄存器指令会对奇偶标志位P有影响外,其余指令执行时均不会影响任何标志位。MCS一51单片机的数据传送指令共有28条,分为内部数据传送指令、外部数据传送指令、堆栈操作指令和数据交换指令等四类。本节将分类进行介绍,并给出相应的机器代码,以便相互对照加以理解。,3.3 数据传送指令,3.3.1 内部数据传送指令(15条)1.以A为目的操作数的指令这类指令的格式为:MOV 目的操作数,源操作数1)指令与指令代码指令 指令代码 操作MOV A,Rn 11101rrr A(Rn)MOV A,direct 11100101 direct A(direct)MOV A,Ri 1110011i A(Ri)MOV A,#data 01110100 data Adata,3.3 数据传送指令,对Rn寻址的指令,其机器码字节的低三位为rrr,对应于8个工作寄存器之一,当为000时,表示R0;为001时,表示R1;依次类推。2)指令功能 这组指令的功能是把源操作数的内容送入累加器A。3)源操作数寻址方式 立即寻址;直接寻址;寄存器寻址;寄存器间接寻址等寻址方式。例32 说明下列指令的功能及寻址方式。MOV A,R6MOV A,64HMOV A,R0MOV A,#78H,3.3 数据传送指令,解 MOV A,R6;A(R6),寄存器寻址 MOV A,64H;A(64H),直接寻址 MOV A,R0;A(R0),寄存器间接寻址 MOV A,#78H;A78H,立即寻址4)指令字节 表面看来,这组指令由三部分组成:操作码、A和源操作数,但操作码含有向A送数的信息,所以累加器A不占程序存储器的存储空间,故这个指令是两字节指令。一般来说,不占程序存储器的存储空间的还有各区的工作寄存器。,3.3 数据传送指令,2以Rn为目的操作数的指令1)指令与指令代码指令 指令代码 操作MOV Rn,A 1111lrrr Rn(A)MOV Rn,direct 10101rrr direct Rn(direct)MOV Rn,#data 01111rrr data Rndata2)功能 这组指令的功能是将源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。3)源操作数寻址方式 立即寻址;直接寻址;寄存器寻址。,3.3 数据传送指令,例34 指出下列指令的功能和寻址方式。MOV R2,#64HMOV R3,64HMOV R7,A解 MOV R2,#64H;R264H,立即寻址 MOV R3,64H;R3(64H),直接寻址 MOV R7,A;R7(A),寄存器寻址,3.3 数据传送指令,3以直接寻址的单元为目的操作数指令1)指令与指令代码指令 指令代码 操作MOV direct,A 11110101 direct direct(A)MOV direct,Rn 10001rrr direct direct(Rn)MOV direct1,direct2 10000101 direct2 direct1(direct2)MOV direct,Ri 1000011i direct direct(Ri)MOV direct,#data 01110101 direct,data directdata,3.3 数据传送指令,应注意:“MOV direct1,direct2”指令译成指令代码时,源地址(direct2)在前,目的地址direct1在后。2)功能 这组指令的功能是把源操作数送人由直接地址指向的存储单元,直接寻址时,direct可以是特殊功能寄存器的地址、内部RAM区的地址,因此允许对端口直接操作。例如,指令:“MOV P1,40H”的含义是将40H单元的内容送入P1端口,机器指令为“10000101 01000000 10010000”,是三字节指令。第一字节是操作码,第二字节是源操作数的地址,第三字节是目的操作数P1的地址。3)源操作数寻址方式 立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。,3.3 数据传送指令,例37 若(64H)=70H,(A)=78H,说明执行指令“MOV 64H,A”的结果。解 执行后结果为(64H)=78H,(A)=78H不变。4以寄存器间接寻址的单元为目的操作数指令1)指令与指令代码指令 指令代码 操作MOV Ri,A 111101li(Ri)(A)MOV Ri,direct 101001li direct(Ri)(direct)MOV Ri,#data 011101li data(Ri)data,3.3 数据传送指令,2)功能 本组指令是将源操作数送人以R0或R1内容为地址的存储单元中。3)源操作数寻址方式 立即寻址;直接寻址;寄存器寻址。例310 若(30H)=35H,(R1)=70H,说明执行指令“MOV R1,30H”的结果。解 70H单元的内容为35H,同时(30H)=35H,(R1)=70H不变。3.3.2 外部数据传送指令(7条)116位数据传送指令1)指令与指令代码指令 指令代码 操作MOV DPTR,#data16 10010000 dataH8dataL8 DPTRdatal6,3.3 数据传送指令,2)功能 把16位常数送入DPTR,16位的数据指针DPTR由DPH和DPL组成,执行结果把高位立即数送入DPH,低位立即数送入DPL,本指令是三字节指令。2.外部ROM的字节传送指令由于外部程序存储器只读不写,因此数据传送是单向的,即只从外部程序存储器中读出数据,并且只能向累加器A传送。这类指令共有两条,均属于变址寻址指令,因专门用于查表而又称为查表指令。(1)指令 MOVC A,A+PC,3.3 数据传送指令,本指令的指令代码是10000011,为一字节指令,当CPU读取本条指令后,PC已自动加1,指向下一条指令的首字节的地址。如果该指令存放单元为1000H,则PC的当前值为1001H。执行该指令时,把A的内容作为无符号数和PC当前内容相加后得到一个16位的地址,并将该地址指出的程序存储器单元内容送到累加器A。而A的内容从00H-0FFH共256个,所以(A)和(PC)相加得到的地址只能在该查表指令以下256个单元地址内。“MOVC”中的“C”表示程序存储器。例313 设(A)=30H,执行指令“1000H:MOVC A,A+PC”的结果。解 该指令将程序存储器中1031H单元内容送入累加器A中。,3.3 数据传送指令,(2)指令 MOVC A,A+DPTR这条指令的指令代码是10010011,它的操作是以DPTR作为基地址寄存器,由A中的无符号数与DPTR中的内容相加得到一个16位的程序存储器的地址,并将该地址的内容送到A。例315 设(DPTR)=8100H,(A)=40H,说明执行指令后的结果。MOVC A,A+DPTR解 将程序存储器中8140H单元内容送人累加器A。该指令只与A的内容相关,与该指令存放的地址无关,因此表格大小和位置可在64K字节程序存储器中任意安排,只要在查表之前对DPTR和A赋值,就使一个表格可被各个程序所公用。,3.3 数据传送指令,3.外部RAM的字节传送指令1)指令与指令代码指令 指令代码 操作MOVX A,DPTR 11100000(DPTR)AMOVX A,Ri 1110001i(Ri)+(P2)AMOVX DPTR,A 11110000(A)(DPTR)MOVX Ri,A 1111001i(A)(Ri)十(P2),3.3 数据传送指令,2)功能 这组指令是将累加器A和外部扩展的RAM的数据传送,由于DPTR是16位地址指针,因此用DPTR间接寻址的指令寻址范围是064K字节;而Ri是8位寄存器,故用Ri间接寻址的指令寻址范围是外部RAM的低256单元。外部RAM的数据传送,只有通过累加器A来进行。在片外容量大于256个单元时,地址高8位由P2口输出,而Ri中的地址作为低8位地址经P0口输出,这些(Ri)与(P2)组合后,可对片外064KB范围寻址。例316 将外部RAM 30H单元的内容送入内部RAM 20H的单元。解 MOV R0,#30H MOVX A,R0 MOV 20H,A,3.3 数据传送指令,3.3.3 堆栈操作指令(2条)在MCS一51内部RAM中可以设定一个后进先出的堆栈,地址为30H7FH,堆栈指针SP中的内容总是堆栈区中最后一个进栈数据所在的存储单元地址。堆栈操作包括进栈和出栈两种。1.进栈指令与指令代码指令 指令代码 操作PUSH direct 11000000 direct SPSP+1(SP)(direct)这条指令首先将堆栈指针SP+1,然后把直接地址里的内容传送到堆栈指针SP指出的内部RAM存储单元中。,3.3 数据传送指令,例318 设(SP)=30H,(ACC)=60H,(B)=70H,执行下列指令后结果怎样?PUSH ACCPUSH B解 操作过程是:PUSH ACC;(SP)+1,31HSP,(ACC)31HPUSH B;(SP)+1,32HSP,(B)32H结果为(31H)=60H,(32H)=70H,(sp)=32H,3.3 数据传送指令,2.出栈指令与指令代码指令 指令代码 操作POP direct 11010000 direct(SP)direct SPSP-1这条指令的功能是将堆栈指针SP指出的内部RAM单元的内容送入直接地址指出的存储单元中,堆栈指针SP减1。出栈指令用于恢复CPU现场。例319 设(SP)=32H,(32H)=70H,(31H)=60H,执行下述指令后结果怎样?POP DPHPOP DPL,3.3 数据传送指令,解 操作过程是:POP DPH;(SP)DPH,(SP)-1SPPOP DPL;(SP)DPL,(SP)-1SP结果为(DPH)=70H,(DPL)=60H,所以,DPTR=7060H,(SP)=30H3.3.4 数据交换指令(4条)数据交换指令共有4条,其中字节交换指令3条,半字节交换指令1条。1字节交换指令1)指令与指令代码指令 指令代码XCH A,Rn 11001rrrXCH A,direct 11000101 directXCH A,Ri 1100011i,3.3 数据传送指令,2)功能 将累加器A的内容和源操作数内容相互交换。3)源操作数寻址方式 寄存器寻址;直接寻址;寄存器间接寻址。例3一20 设(A)=80H,(R1)=74H,(74H)=60H,(60H)=50H,(80H)=40H,顺序执行下列指令后结果怎样?XCH A,R1XCH A,60HXCH A,R1解 执行指令结果:(A)=74H,(R1)=80H 结果:(A)=50H,(60H)=74H 结果:(A)=40H,(80H)=50H,3.3 数据传送指令,2半字节交换指令1)指令与指令代码指令 指令代码XCHD A,Ri 1101011i2)功能 这条指令将A的低4位与R0或R1指出的RAM单元低4位相互交换,各自高4位不变。3)源操作数寻址方式为寄存器间接寻址。,3.3 数据传送指令,例322 设(A)=15H,(R0)=30H,(30H)=40H,执行下列指令后结果怎样?XCHD A,R0解:执行结果为:(A)=10H,(30H)=45H以上所述的均为传送类指令,数据传送指令对标志位的影响:(1)只有PSW寄存器直接参加操作,被改写了内容的情况下,标志位受影响。(2)PSW中P标志位(奇偶校验位)总是追踪累加器A的状态。如果A中有奇数个1,则P=1,否则P=0。其他标志位不受影响。,3.4 算术运算指令,MCS一51指令系统的算术运算指令比较丰富,包括加、减、乘、除法指令,数据运算能力较强。3.4.1 加法指令(14条)加法指令使用助记符“ADD”。1不带进位的加法指令1)指令与指令代码指令 指令代码ADD A,Rn 00101rrrADD A,direct 00100101 directADD A,Ri 0010011iADD A,#data 00100100 data,3.4 算术运算指令,2)功能 将源操作数与累加器A的内容相加,其结果放于累加器A中。3)源操作数的寻址方式 寄存器寻址;直接寻址;寄存器间接寻址;立即寻址。4)对标志位的影响 加法运算对程序状态字寄存器PSW的各标志位有一定的影响。如果位7有进位输出,则CY=l,否则CY=0;如果位3有进位输出,则AC=1,否则AC=0;溢出标志位OV=C6C7,如果位6有进位输出而位7没有或者位7有进位而位6没有,则OV=1,否则OV=0;P标志位始终跟踪累加器A内“1”的个数,如果A中有奇数个“1”,则P=1。,3.4 算术运算指令,例323 设(A)=42H,(R0)=0FCH,说明执行指令“ADD A,R0”的结果。解 01000010+)11111100 00111110因C6与C7均有进位,故OV=0,结果有5个“1”,为奇数,故P=1,AC=0,CY=1,(A)=3EH。,3.4 算术运算指令,2带进位加法指令1)指令与指令代码指令 指令代码ADDC A,Rn 00111rrrADDC A,direct 00110101 directADDC A,Ri 0011011iADDC A,#data 00110100 data2)功能 这组指令同时把源操作数、进位标志位和累加器A的内容相加,结果存放在累加器A中。,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指令相同。例325 设(A)=85H,(20H)=0FFH,CY=1执行指令“ADDC A,20H”的结果。解 10000101 11111111+)1(1)10000101则(A)=85H,CY=1,AC=l,P=1,OV=0,3.4 算术运算指令,3增量指令1)指令与指令代码指令 指令代码INC A 00000100INC Rn 00001rrrINC direet 00000101 directINC Ri 0000011iINC DPTR 101000112)功能 这组指令是把源操作数加1,应注意:当用本指令修改输出口P0P3时,原始口数据的值将从口锁存器读入,而不是从引脚读入。,3.4 算术运算指令,3)对标志位影响 若原来为0FFH,加1后将溢出为00H,对A的操作可能影响P外,不影响任何标志。4)寻址方式 直接寻址;寄存寻址;寄存器间接寻址。例326 设(A)=0FFH,(R3)=0FH,(30H)=0FOH,(R0)=40H,(40H)=00H,执行下列指令的结果。INC A;(A)+1AINC R3;(R3)+1R3INC 30H;(30H)+l30HINC R0;(R0)+1(R0)解(A)=00H,(R3)=10H,(30H)=0F1H,(R0)=40H不变,(40H)=01H,PSW状态不改变。,3.4 算术运算指令,4十进制调整指令1)指令与指令代码指令 指令代码DA A 110101002)功能 若该指令上一条指令是一条加法指令,加数和被加数为十进制BCD码,相加结果不是十进制的BCD码,所以必须将结果调整为BCD码,该指令自动选择调整值00H、06H、60H、66H,将结果调整为十进制BCD码。,3.4 算术运算指令,例327 设(A)=56H,(R5)=67H,说明执行指令后的结果。ADD A,R5DA A解 01010110+)01100111 10111101自动选择66H与上述结果相加来调整如下:10111101+)01100110 00100011结果为(A)=23H,CY=1。,3.4 算术运算指令,3.4.2 减法指令(8条)1带进位减法指令1)指令与指令代码指令 指令代码SUBB A,Rn 10011rrrSUBB A,direct 10010101 directSUBB A,Ri 100101liSUBB A,#data 10010100 data,3.4 算术运算指令,2)功能 这组指令功能是从累加器A中减去源操作数和进位标志,结果在累加器A中。3)对标志位影响如果位7需借位,则CY=1,否则CY=0;如果位3需借位,则AC=1,否则AC=0;如果位6需借位而位7不需借位或位7需借位而位6不需借位,则OV=1,否则OV=0。,3.4 算术运算指令,4)源操作数寻址方式 立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。例328 设(A)=0C9H,(R2)=5CH,CY=1,执行指令“SUBB A,R2”的结果。解 11001001 01011100-)1 01101100结果:(A)=6CH,CY=0,AC=1(位3有借位),OV=1(位7无借位,位6有借位),P=0(结果有4个“1”),3.4 算术运算指令,2减1指令1)指令与指令代码指令 指令代码DEC A 00010100DEC Rn 00011rrrDEC direct 00010101 directDEC Ri 000101li2)功能 将源操作数减1,若原来为00H,减1后为0FFH,不影响标志位;但(A)减1时,将影响P标志位。当本指令用于修改输出口,用作原始VI数据的值将从口锁存器P0P3读入而不从引脚读入。,3.4 算术运算指令,例329 设(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,说明执行下列指令的结果。DEC A;(A)-1ADEC R7;(R7)-lR7DEC 30H;(30H)-130HDEC R1;((R1)-1(R1)解 结果为:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影响其他标志。,3.4 算术运算指令,3.4.3 乘法指令(1条)1)指令与指令代码指令 指令代码MUL AB 101001002)功能 将累加器A和寄存器B中的8位无符号整数相乘,其中16位积的低位8位字节放在累加器A中,高8位字节放在寄存器B中。如果积大于255(0FFH),则置位溢出标志OV,否则清0。进位标志CY总是清0。该指令执行时间是4个机器周期。例330 设(A)=50H,(B)=0AOH,执行指令“MUL AB”的结果。解 结果为(B)=32H,(A)=00H,即为3200H。,3.4 算术运算指令,3.4.4 除法指令(1条)1)指令与指令代码指令 指令代码DIV AB 100001002)功能 把A中的8位无符号整数除以寄存器B的8位无符号整数,所得的整数部分放在A中,余数放在B中。如果原来的B中的内容为0,即除数为0,则A和B中的内容不定,并使标志位OV=1,表明除法没有意义。在任何情况,CY都清“0”。该指令执行时间是4个机器周期。,3.5 逻辑运算和环移指令,MCS一51指令系统的逻辑运算和环移指令包括逻辑与、或、异或等指令,以及对累加器A进行清0、取反、循环移位、半字交换等操作指令。3.5.1 逻辑运算指令(20条)这20条指令可以对两个八位二进制数进行与、或、非和异或等逻辑运算、常用来对数据进行逻辑处理,使之适合于传送、存储和输出打印等。在这类指令中,除以累加器A为目标寄存器指令外,其余指令均不会影响PSW中任何标志位。1逻辑与指令指令助记符为“ANL”,表示是“AND”(与)和“LOG”(逻辑)的组合。1)指令与指令代码,3.5 逻辑运算和环移指令,1)指令与指令代码指令 指令代码ANL A,Rn 0101lrrrANL A,direct 01010101 directANL A,Ri 0101011iANL A,#data 01010100 dataANL direct,A 01010010 directANL direct,#data 01010011 direct data,3.5 逻辑运算和环移指令,2)功能 该组指令将源操作数和目的操作数之间按位进行逻辑与操作,结果存放在目的操作数中。所谓“位”进行逻辑与,是指两个8位操作数的对应位的两个码之间进行相与,只有同为1,结果才是1。当这条指令用于修改一个输出口时,作为原始口数据的值将从输出口数据锁存器(P0P3)读人,而不是读引脚状态。3)寻址方式 立即寻址;寄存器寻址;直接寻址;寄存器间接寻址。例331 设(A)=77H,(R0)=0DH,说明执行指令“ANL A,R0”的结果。解 01110111)00001101 0000010l结果为:(A)=05H。,3.5 逻辑运算和环移指令,指令助记符“ORL”,由“OR”(或)和“LOG”(逻辑)的组合。1)指令与指令代码指令 指令代码ORL A,Rn 01001rrrORL A,direct 01000101 directORL A,Ri 010001liORL A,#data 01000100 data0RL direct,A 01000010 directORL direct,#data 01000011 direct data,3.5 逻辑运算和环移指令,2)功能 这组指令将源操作数和目的操作数之间按位进行逻辑或操作,结果存到目的操作数。该指令与“逻辑与”类似,用于修改P0P3数据时,原始数据值为口锁存器内容,结果也存放于口锁存器中。3)寻址方式 立即寻址;寄存器寻址;直接寻址;寄存器间接寻址。例333 设(P1)=51H,(A)=33H,说明执行指令“ORL P1,A”的结果。解 01010001)00110011 01110011结果为(P1)=73H,3.5 逻辑运算和环移指令,3逻辑异或指令指令助记符“XRL”,XR表示异或,比较的两数码,相同出0,不同出1,“L”表示“逻辑”。1)指令与指令代码指令 指令代码XRL A,Rn 01101rrrXRL A,direct 01100101 directXRL A,Ri 011001liXRL A,#data 01100100 dataXRL direct,A 01100010 directXRL direct,#data 0110001 1 direct data,3.5 逻辑运算和环移指令,2)功能 这组指令将源操作数和目的操作数之间执行按位的逻辑异或操作,结果存放到目的操作数中。同样,对P1P3口的数据修改,原始数据为口锁存器内容,结果也存放于口锁存器中。3)寻址方式 立即寻址;直接寻址;寄存器寻址;寄存器间接寻址。例335 设(A)=64H,(R5)