首页 单片机原理及应用 教学课件 ppt 作者 徐泳龙 主编 第3章 MCS-51单片机的指令系统

单片机原理及应用 教学课件 ppt 作者 徐泳龙 主编 第3章 MCS-51单片机的指令系统

举报
开通vip

单片机原理及应用 教学课件 ppt 作者 徐泳龙 主编 第3章 MCS-51单片机的指令系统 第一节指令系统概述一、指令的概念 指令是计算机所能执行的一种基本操作的描述。1、机器码指令与汇编语言指令(1)机器码指令用二进制代码(或十六进制数) 表示的指令称为机器码指令或目标代码指令。这 种形式的指令能够直接被计算机硬件识别和执行。例如指令INCA执行累加器A加1操作,其二进制代 码为“00000100B”,用十六进制数表示的机器码指 令为“04H”。(2)汇编语言指令机器码指令不易阅读和记忆, 为了方便记忆,便于程序的编写和阅读,用助记 符来表示的指令称为...

单片机原理及应用 教学课件 ppt 作者 徐泳龙 主编 第3章 MCS-51单片机的指令系统
第一节指令系统概述一、指令的概念 指令是计算机所能执行的一种基本操作的描述。1、机器码指令与汇编语言指令(1)机器码指令用二进制代码(或十六进制数) 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示的指令称为机器码指令或目标代码指令。这 种形式的指令能够直接被计算机硬件识别和执行。例如指令INCA执行累加器A加1操作,其二进制代 码为“00000100B”,用十六进制数表示的机器码指 令为“04H”。(2)汇编语言指令机器码指令不易阅读和记忆, 为了方便记忆,便于程序的编写和阅读,用助记 符来表示的指令称为汇编语言指令。例如用 “MOV”表示数据的传送。用助记符表示的指令不 能被计算机硬件直接识别和执行,必须通过某种 手段(汇编)把它变成机器码指令才能被机器执 行。例如计算机执行操作:把数3FH传送到累加器A中, 实现这种操作的汇编语言指令形式为:MOVA,#3FH其中,“#”号为数3FH的标识符。这条指令的机器码 为“743FH”。 2、指令格式MCS-51系列单片机的指令由操作码和操作数两大部 分组成,其指令格式为:操作码[操作数1][,操作数2][,操作数3]方括号“[]”内的字段表示可有可无。(1)操作码表示指令进行何种操作,即操作性质。 一般为英语单词的缩写。(2)操作数指出了参加操作的数据或数据存放的 地址,即操作对象。它以一个或几个格与操作 码隔开,根据指令功能的不同,操作数可以有3个、 2个、1个或没有,操作数之间以逗号“,”分开。 •例如下列四条指令:••••CJNEA,#30H,LOOPADDA,@R1INCR0RET•分别为3个、2个、1个和没有操作数的指令。二、指令系统说明1、常用符号在MCS-51系列单片机指令系统中,约定了一 些指令格式描述中的常用符号。现将这些 符号的标记和含义说明如下:·A:累加器(ACC),通常用ACC表示累加器的地址,A表示它的名称;·AB:累加器(ACC)和寄存器B组成的寄存器对;·direct:8位片内RAM低128B区或SFR块的存储单元地址;·#data:8位立即数;·#data16:16位立即数;·addr16:16位地址码;·addr11:11位地址码;·rel:以补码表示的8位偏移量,其值为+127~-128;·bit:片内RAM或SFR中可直接寻址的位地址;·Rn:工作寄存器,其中n=0~7;·Ri:工作寄存器,其中i=0,1;·@:间接寻址符号;·+:加;·-:减;·*:乘;·/:除;·∧:与;·∨:或;·⊕:异或;·=:等于;·<:小于;·>:大于;·<>:不等于;·←:取代(即右边的源操作数送到左边的目的操作数单元中);·(X):X寄存器的内容;·((X)):由X寄存器中的内容作为地址的存储单元内容;·(X):X寄存器的内容取反;·rrr:指令代码中rrr三位的值由工作寄存器Rn确定,R0~R7对应的rrr为000~111;·$:当前指令的地址。2、指令对标志位的影响MCS-51系列单片机指令系统中有些指令的执 行结果要影响PSW中的标志位。表3-1列出 了MCS-51系列单片机影响标志位的指令。表中×表示指令执行时对标志有影响。第二节寻址方式 所谓寻址方式,就是指寻找操作数所在地址的方式。这里,地址泛指一个存储单元或某个寄存器。寻址方式越是多样,越是灵活,指令系统将越有效,计算机的功能也随之越强。 MCS-51系列单片机指令系统的寻址方式有七种。它们是:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址寄存器加变址寄存器间接寻址、相对寻址和隐含寻址。位寻址属于直接寻址的一类。寻址方式通常是针对源操作数的,否则需特别指明是针对目的操作数的,以免弄错。一、立即寻址这种寻址方式在指令中给出直接参与操作的常数(称为立即数)。这样的操作数前面以“#”号标识,可以是一个8位或16位的二进制常数。例如:MOVA,#73H;将常数73H送入累加器A中,MOVDPTR,#2100H;将16位立即数2100H送入16位寄存器DPTR中。二、直接寻址 在指令中直接给出操作数所在存储单元的地址(一个8位二进制数),称为直接寻址。直接地址用direct表示。直接寻址方式中操作数存储的空间有三种:1、内部数据RAM的128个字节单元(00H~7FH例如:MOVA,60H;(A)←(60H)指令功能是把内部RAM60H单元中的内容送入累加器A。2、位地址位寻址指令均采用直接寻址。位地址分布在MCS-51系列单片机内部两个区域:一个是片内RAM20H~2FH单元的128个位地址;另一个是字节地址能被8整除的特殊功能寄存器SFR中的92个位地址。位地址常用下列两种方式表示:(1)直接使用位地址。对片内RAM20H~2FH单元的128个位地址00H~7FH的操作。例如:CPL08H;对片内RAM21H单元中的D0位(位地址08H)内容取反。(2)对于某些特殊功能寄存器SFR,可以直接用寄存器名字加位数表示,例如:CLRPSW.3;将PSW.3中的RS0清0。3、特殊功能寄存器SFR特殊功能寄存器SFR只能用直接寻址方式进行访问。例如:MOVA,P1;将P1口(地址为90H)的内容读入累加器A中。三、寄存器寻址 这种寻址方式由指令指出某一寄存器的内容作为 操作数。寄存器为4组R0~R7中的某一个。例如:INCR0;(R0)←(R0)+1 在这类指令的操作码中,有三个寄存器的选择位,如指令“INCRn”的操作码是00001rrr,由rrr的8种组合(000~111)决定寄存器R0~R7中的哪一个,由此得到该指令的8个不同的操作码08H~0FH。 工作寄存器的选择由PSW中的RS1和RS0的状态决定。RS1和RS0的状态,可使用指令通过对PSW赋值而改变其状态。 四、寄存器间接寻址指令中一个寄存器的内容是操作数的地址。对于片内RAM的高128B区,即地址为80H~0FFH单元,只能用此种寻址方式。此类指令执行时,以所指定的寄存器的内容作为地址,再到该地址单元取得操作数。这是一种二次寻址方式,被称为寄存器间接寻址。指定的寄存器代号前用“@”号标识。(注意:规定只有R0、R1和DPTR可用于间接寻址.)采用@Ri间接寻址指令如:MOVR0,#38HMOVA,@R0 ;(R0)←38H;(A)←((R0)) 内部RAM和外部RAM都可以寄存器间接寻址。 通过@Ri可以访问8052内部RAM的256个存储单元(地址为00H~0FFH)和外部RAM的256个存储单元(地址为00H~0FFH)。 使用数据指针DPTR作为寄存器间接寻址时,可以访问外部RAM的64KB空间。堆栈操作也是间接寻址的。采用@DPTR间接寻址指令如:MOVDPTR,#1234H;将立即数1234H送数据指针MOVX@DPTR,A;将累加器A中内容送外部RAM1234H存储单元中五、基址寄存器加变址寄存器间接寻址(变址寻址) 它又叫变址寻址。以16位寄存器DPTR(数据指针) 或PC(程序计数器)作为基址寄存器,以8位累加器A 作为变址寄存器,用基址寄存器内容和变址寄存器内容 相加,其和形成一个16位新地址,该新地址即为操作数 的存储地址。(该寻址方式主要用于访问程序存储器)变址寻址方式有两类第一类变址寻址以程序计数器PC当前值为基址,以累加器A中内容为偏移量,例如:MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC)) 这是一条单字节指令(机器码为83H),该指令执行时,先使PC指向下一条指令地址(即指令当前值),然后再与累加器A的内容相加,形成变址寻址单元地址.第二类变址寻址以数据指针DPTR内容为基 址,以累加器A中内容为偏移量,例如:MOVDPTR,#2345H;DPTR赋值MOVA,#10H;A赋值MOVCA,@A+DPTR;(A)←((A)+(DPTR))这三条指令的执行结果是将程序存储器 2355H单元内容送A中 六、相对寻址这种寻址方式主要用于转移指令,用于指 定转移的目标地址,它是以当前的PC值加 上指令中规定的偏移量rel(以8位二进制补 码表示)而形成实际的转移地址。一般将 相对转移指令操作码所在地址称为源地 址,转移后的地址称为目的地址。于是有:目的地址=源地址+2(相对转移指令字节数)+rel例如指令: JC75H;设CY=1,rel=75H。这是一条以CY为条件的转移指令。因为“JC75H”指令是双字节指令,当CPU取出第二个字节时,PC的当前值已是原PC的内容加2,由于CY=1,所以程序转向(PC)+75H单元地址去执行。 在实际应用中,经常需要根据已知的源地址和目的地址计算偏移量rel。若为3B指令,则rel的计算为:rel=目的地址-源地址-3计算得到的rel不论正负,均应用8位二进制补码表示。(表明程序跳转在当前地址相距-128~127范围内) 七、隐含寻址操作数的地址隐含在操作码中,不需要指明,这种方式称为隐含寻址。 例如INCA指令,其指令的含义是累加器A中的内容加1,指令代码为04H,但并没有给出A的地址,A的地址隐含在操作码中。 再如ADDA,#55H指令,其指令的含义是A的内容与55H相加,结果放在A中,指令代码为24H55H,其中24H是操作码,55H是立即数,也没有给出A的地址,A的地址是隐含的。所以针对目的操作数的寻址方式是隐含寻址。 MCS-51系列单片机中,累加器A除了在堆栈操作指令中是直接寻址外,在其它指令中都是隐含寻址;寄存器B则只在乘法、除法指令中是隐含寻址,在其它指令中都是直接寻址;数据指针DPTR、位累加器C也是隐含寻址。MCS-51系列单片机的指令系统,按其功能可分为:·数据传送类指令(28条)·算术运算类指令(24条)·逻辑运算类指令(25条)·位操作类指令(12条)·控制转移类指令(22条)一、数据传送类指令 所谓“传送”,是把源地址单元的内容传送到目的地址单元中去,而源地址单元内容不变;或者源、目的单元内容互换。数据传送操作可以在片内RAM和SFR内进行,也可以在累加器A和片外存储器之间进行。在这类指令中,除以累加器A为目的操作数寄存器指令会对奇偶标志位P有影响外,其余指令执行时均不会影响任何标志位。1、内部数据传送指令MOV这类指令的源操作数和目的操作数地址都在单片机内 部,可以是片内RAM地址,也可以是特殊功能寄存 器SFR地址。(1)以累加器A为目的地址的指令 指令MOVA,Rn 操作(A)←(Rn) 指令代码11101rrrMOVA,direct(A)←(direct)11100101directMOVA,@Ri(A)←((Ri))1110011iMOVA,#data(A)←data11100100data这组指令的功能是把源操作数送入累加器A中。源操 作数的寻址方式分别为寄存器寻址、直接寻址、寄 存器间接寻址和立即寻址方式。 例3-1MOVA,R5;(A)←(R5)MOVA,P1;(A)←(P1),这是一条输入指令,P1口引脚上的电平通过单片机模数转换传给P1口锁存器90H单元和累加器A中MOVA,@R0;(A)←((R0))MOVA,#78H;(A)←78H(2)以Rn为目的地址的指令 指令MOVRn,A操作 (Rn)←(A)指令代码 11111rrrMOVRn,direct(Rn)←(direct)MOVRn,#data(Rn)←data 10101rrrdirect01111rrrdata这组指令的功能是把源操作数送入当前工作寄存器区R0~R7中的某一寄存器中。源操作数的寻址方式分别为隐含寻址、直接寻址和立即寻址方式。例3-2MOVR2,A;(R2)←(A)MOVR7,60H;(R7)←(60H)MOVR5,#0FAH;(R5)←0FAH (3)以直接地址为目的地址的指令指令操作指令代码MOVdirect,A(direct)←(A)11110101directMOVdirect,Rn(direct)←(Rn)10001rrrdirectMOVdirect,@Ri(direct)←((Ri))1000011idirectMOVdirect1,direct2(direct1)←(direct2)10000101direct2direct1MOVdirect,#data(direct)←data01110101directdata这组指令的功能是将源操作数送入由直接地址指出的存储单元中。源操作数的寻址方式分别为隐含寻址、寄存器寻址、寄存器间接寻址、直接寻址和立即寻址方式。例3-3MOVP1,A;(P1)←(A),这是一条输出指令,累加器A中内容传送到P1口引脚(电平形式)和P1口锁存器90H单元MOV70H,R3;(70H)←(R3)MOV45H,@R0;(45H)←((R0))MOV0E0H,72H;(0E0H)←(72H)MOV01H,#50H;(01H)←50H(4)以寄存器间接地址为目的地址的指令 MOV@Ri,A((Ri))←(A)1111011i MOV@Ri,direct((Ri))←(direct)1010011idirect MOV@Ri,#data((Ri))←data0111011idata这组指令的功能是把源操作数送入R0或R1指出的片内RAM存储单元中。源操作数的寻址方式分别为隐含寻址、直接寻址和立即寻址方式。例3-4MOV@R1,A;((R1))←(A)MOV@R0,50H;((R0))←(50H)MOV@R1,#0D8H;((R1))←0D8H上述指令中,累加器A是一个特别重要的8位寄存器,Rn为CPU当前选择的工作寄存器区中的R0~R7,在指令代码中对应的rrr=000~111,直接地址指出的存储单元为片内RAM的00H~7FH和特殊功能寄存器(SFR),在间接寻址中,用R0和R1作为地址指针访问片内RAM的00H~0FFH这256个单元。例3-5设(70H)=60H,(60H)=20H,(P1)=0B7H,执行下面程序: MOVR0,#70H;(R0)←70HMOVA,@R0MOVR1,AMOVA,@R1 ;(A)←60H;(R1)←60H ;(A)←20H MOV@R0,P1;(70H)←0B7H结果为:(70H)=0B7H,(A)=20H, (R1)=60H,(R0)=20H。 2、外部数据传送指令(1)16位数据传送指令 指令操作MOVDPTR,#data16(DPTR)←data16指令代码10010000立即数立即数 高8位低8位这条指令的功能是把一个16位的立即数送入DPTR。16位的数据指针DPTR由DPH和DPL组成,这条指令把立即数的高8位送DPH,低8位送DPL。 这个被机器作为立即数看待的数其实就是外部RAM/ROM的地址,是专门配合外部数据传送指令来用的。 (2)外部RAM数据传送指令MOVX 功能:实现片外数据存储器(或扩展I/O口)与 累加器A之间的数据传送。寻址方式只能用间接寻址。 这组指令有: 指令操作指令代码MOVXA,@DPTR(A)←((DPTR))MOVXA,@Ri(A)←((Ri)) 111000001110001iMOVX@DPTR,AMOVX@Ri,A ((DPTR))←(A)11110000((Ri))←(A)1111001i由于片外扩展的RAM和I/O口是统一编址的,共同使用64KB的空 间,所以指令本身看不出是对片外RAM还是对扩展I/O口操 作,而是由硬件的地址分配所定。用Ri进行间接寻址时,因为Ri是一个8位寄存器,用它只能寻址 256个单元,当片外RAM容量小于256个单元时可直接采用这 种寻址方式,当片外RAM超过256个字节时,就要利用DPTR 进行间接寻址。 例3-6设R0的内容为21H,R1的内容为43H,外部RAM43H单元内容为65H,执行下列指令:MOVXA,@R1;(A)←((R1))=(43H)=65HMOVX@R0,A;((R0))=(21H)←(A)=65H结果是把外部RAM43H单元内容65H送入累加器A和外部RAM21H单元。例3-7将片内RAM单元20H的内容送到片外RAM单元3000H中。MOVR0,#20H;(R0)←20HMOVDPTR,#3000H;(DPTR)←3000HMOVA,@R0;(A)←((R0))=(20H)MOVX@DPTR,A;((DPTR))=(3000H)←(A)(3)外部ROM数据传送指令MOVC 功能:从程序存储器中读取源操作数送入累加器A。 寻址方式只能用基址寄存器加变址寄存器间接寻址方 式,这组指令包括以下两条指令:1)指令操作指令代码MOVCA,@A+PC(A)←((A)+(PC))10000011 这条指令以当前PC作为基址寄存器,A的内容作为无符号数,相加得到一个16位的地址,将该地址指出的程序存储单元的内容送入累加器A。 例3-8设(A)=30H,执行指令: 1000HMOVCA,@A+PC 执行结果是当前PC值1001H与A中内容30H相加得1031H,然后将程序存储器中1031H单元的内容送入累加器A。 2)指令操作指令代码MOVCA,@A+DPTR(A)←((A)+(DPTR))10010011 这条指令以DPTR作为基址寄存器,A的内容作为 无符号数与DPTR的内容相加得到一个16位地址,由该 地址指出的程序存储单元的内容送入累加器A中。 这组指令常用于在程序存储器中的查表操作,故也 称作查表指令,它是MCS-51系列单片机的特色指令之 一,其中MOVCA,@A+PC指令称为近程查表指令(因为它只能在以当前PC为基准的+256B范围内查表),而MOVCA,@A+DPTR称为远程查表指令(它可以在64KB范围内查表)。 例3-9编制根据累加器A中的数(0~9之 间),查其平方表的程序。解:把平方表用伪指令DB存放在程序存储器 中,把表的首址置入DPTR中,把数0~9存 放在变址寄存器A中,程序如下: MOVDPTR,#TABLE MOVCA,@A+DPTR ┇TABLE:DB00H,01H,04H,09H,10H, 19H,24H DB31H,40H,51H 3、数据交换指令(1)字节交换指令XCH指令操作指令代码XCHA,Rn(A)(Rn)11001rrrXCHA,direct(A)(direct)11000101directXCHA,@Ri(A)((Ri))1100011i这组指令的功能是将累加器A的内容和源操作数相 互交换。源操作数的寻址方式分别为寄存器寻址、 直接寻址和寄存器间接寻址。例3-10设(A)=20H,(R3)=6FH,执行指令: XCHA,R3结果:(A)=6FH,(R3)=20H (2)半字节交换指令XCHD 指令XCHDA,@Ri 操作(A)低4位 指令代码((Ri))低4位 1101011i这条指令的功能是A的低4位和(R0)或(R1)指出 的RAM单元低4位相互交换,各自的高4位不变。例3-11设(A)=15H,(R1)=30H,(30H) =34H,执行指令: XCHDA,@R1结果:(A)=14H,(30H)=35H,(R1)=30H 4、栈操作指令 在MCS-51系列单片机的片内RAM中,可以 设置一个后进先出(LIFO)的堆栈,特殊功能寄 存器SP作为堆栈指针,在进行栈操作时,它始终 指向栈顶所在的位置。在指令系统中有两组用于 数据传送的栈操作指令。它们是直接寻址方式, 但其操作实质上是寄存器间接寻址方式。(1)进栈(压栈)指令PUSH 指令PUSHdirect 操作(SP)←(SP)+1指令代码 11000000direct ((SP))←(direct) 这组指令的功能是首先将栈指针SP的内容加1,然后把直接地址指出的内容传送到栈指针(SP)所寻址的片内RAM单元中。 例3-12设(SP)=60H,(A)=30H,(B)=70H,执行指令:PUSHACC;(SP)←(SP)+1=61H,((SP))←(ACC)PUSHB;(SP)←(SP)+1=62H,((SP))←(B)结果:(61H)=30H,(62H)=70H,(SP)=62H(2)出栈(弹栈)指令POP 指令POPdirect 操作(direct)←((SP))指令代码 11010000direct (SP)←(SP)-1这组指令的功能是将堆栈指针(SP)寻址的片内RAM单元内容送入直接地址指出的存储单元中,然后SP的内容减1。例3-13设(SP)=62H,(62H)=70H,(61H) =30H,执行指令:POPDPH;(DPH)←((SP))=(62H), (SP)←(SP)-1=61HPOPDPL;(DPL)←((SP))=(61H), (SP)←(SP)-1=60H结果:(DPTR)=7030H,(SP)=60H 二、算术运算指令 MCS-51系列单片机算术运算指令包括:加法指令、带进位加法指令、带进位减法指令、加1指令、减1指令、十进制调整指令、乘法和除法指令,共24条。大部分算术运算指令要影响标志寄存器PWS有关位的内容.如C、AC、P、OV等。1、加法指令(1)不带进位的加法指令ADD指令操作指令代码 ADDA,Rn 00101rrrADDA,direct 00100101directADDA,@Ri 0010011iADDA,#data (A)←(A)+(Rn) (A)←(A)+(direct)(A)←(A)+((Ri)) (A)←(A)+data 00100100data这组加法指令的功能是指令源字节变量的内容和目的字节变量A的内容相加,其结果存放在A中。 若结果的D7位产生进位,则进位位CY被置1,否则CY被清0;若结果的D3位产生进位,则辅助进位位AC被置1,否则AC被清0。对溢出标志OV的影响是:如果结果的D6位有进位而D7位无进位,或者D7位有进位而D6位无进位,则OV标志被置1,否则被清0。从另一方面看,若把参加运算的数看作是8位二进制补码,当运算结果超过二进制补码所表示的范围(+127~-128)时,OV被置1,否则OV被清0。对于带符号数的补码运算,溢出标志OV=1,表示运算结果出错。奇偶标志位P将随累加器A中1的个数的奇偶性变化。若A中1的个数为奇,则P置1,否则P置0。源操作数分别为寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式。例3-14设(A)=84H,(30H)=8DH,执行指 令: ADDA,30H (A)=10000100+)(30H)=10001101--------------------------------------------------------- 结果=100010001产生进位产生辅助进位结果:(A)=11H,(CY)=1,(AC)=1, (OV)=1,(P)=0 例3-15设(A)=53H,(R0)=20H,(20H)=0FCH,执行指令:ADDA,@R0(A)=01010011+)((R0))=11111100-------------------------------------------------结果=101001111产生进位结果:(A)=4FH,(CY)=1,(AC)=0,(OV)=0,(P)=1(2)带进位加法指令ADDC指令操作指令代码ADDCA,Rn 00111rrrADDCA,direct(A)←(A)+(Rn)+(CY) (A)←(A)+(direct)+(CY)00110101directADDCA,@Ri(A)←(A)+((Ri))+(CY)0011011iADDCA,#data(A)←(A)+data+(CY) 00110100data 这组指令的功能是把指令所指出的字节变量、进 位位CY和A的内容相加,结果留在A中。ADDC指令对PSW标志位的影响与ADD指令相同, 这组指令多用于多字节加法运算,使得在进行高 字节加法时,考虑到低位字节向高位字节的进位 情况。 ·例3-16设(A)=42H,(R3)=68H, (CY)=1,执行指令:ADDCA,R3(A)=01000010(R3)=01101000+)(CY)=1-----------------------------------------------------(A)=10101011结果:(A)=0ABH,(CY)=0,(AC) =0,(OV)=1,(P)=1 (3)加1指令INC指令操作指令代码AINCINCRn(A)←(A)+1(Rn)←(Rn)+100000100 00001rrrINCdirect(direct)←(direct)100000101 directINC@Ri((Ri))←((Ri))+10000011iINCDPTR(DPTR)←(DPTR)+110100011 这组指令的功能是把指令所指出的变量加1,若原 来为0FFH,则将溢出为00H,本组指令除“INCA”指 令影响P标志外,其余不影响任何标志,操作数可采 用寄存器寻址、直接寻址或寄存器间接寻址方式。 当用本组指令修改输出口P0~P3时,原来口数据的 值将从口锁存器读入,而不是从引脚读入。 例3-17设(A)=0FFH,(R2)=0FH,(30H) =0F0H,(R0)=40H,(40H)=00H,执行 指令:INCAINCR2INC30HINC@R0 结果:(A)=00H,(R2)=10H,(30H) =0F1H,(40H)=01H,(P)=0。 (4)十进制调整指令DA指令指令代码DAA11010100这条指令对累加器A中由前两个BCD码变量的加法所获得的8位结果进行十进制调整。两个压缩型BCD码,按二进制加法指令相加后,必须经过十进制调整方能得到正确的压缩型BCD码和数。该指令的执行过程如图3-9所示。例3-18设(A)=56H,(R7)=78H,执行 指令:ADDA,R7DAA结果:(A)=34H,(CY)=1 2、减法指令(1)带进位减法指令SUBB指令操作指令代码SUBBA,Rn(A)←(A)-(Rn)-(CY)SUBBA,direct(A)←(A)-(direct)-(CY)SUBBA,@Ri(A)←(A)-((Ri))-(CY)SUBBA,#data(A)←(A)-data—(CY)这组指令的功能是从累加器A中减去指令指定的变量及借位标志CY内容,结果留在A中。运算结果若D7位需借位,则置(CY)=1,否则(CY)=0。若D3需借位,则(AC)=1,否则(AC)=0。若D6位需借位而D7位不需借位,或D7位需借位而D6位不需借位,则溢出标志(OV)=1,否则(OV)=0。源操作数可采用寄存器寻址、直接寻址、寄存器间接寻址或立即寻址方式。 例3-20设(A)=0C9H,(R2)=54H,(CY)=1, 执行指令:SUBBA,R2(A)=11001001(R2)=01010100-)(CY)=1-----------------------------------------------------(A)=01110100结果:(A)=74H,(CY)=0,(AC) =0,(OV)=1,(P)=0。若需进行不带借位的减法运算,则应该先将 CY清0,然后再执行SUBB指令。 (2)减1指令DEC指令操作指令代码DECA(A)←(A)-100010100DECRn(Rn)←(Rn)-100011rrrDECdirect(direct)←(direct)-100010101directDEC@Ri((Ri))←((Ri))-10001011i这组指令的功能是将指定的变量减1,若原来为00H,减 1后下溢为0FFH,除“DECA”指令影响P标志外,其余 均不影响任何标志。当这组指令用于修改输出口时,用作原始数据的值将从 口锁存器P0~P3读入,而不是从引脚读入。 例3-21设(A)=0FH,(R5)=20H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令:DECADECR5DEC30HDEC@R1结果为:(A)=0EH,(R5)=1FH, (30H)=0FFH,(40H)=0FEH,(P) =1。 3、乘法指令MUL指令指令代码 MULAB10100100这条指令是把累加器A和寄存器B中的无符号8位二 进制数相乘,16位乘积的低8位留在累加器A中, 高8位存放在寄存器B中。如果乘积大于0FFH,则(OV)=1,否则(OV)=0。 CY标志总是被清0。例3-22设(A)=50H,B=0A0H,执行指令:MULAB结果:(B)=32H,(A)=00H(即积为 3200H),(OV)=1,(CY)=0。 4、除法指令DIV指令指令代码 DIVAB10000100 这条指令的功能是把累加器A中的8位无符号二进制数 除以寄存器B中的8位无符号二进制数,所得商的整数部 分存放在累加器A中,余数部分存放在寄存器B中。如果原来B的内容为0,即除数为0,则结果A和B的内容 不定,且溢出标志位(OV)=1。CY标志总是被清0。 例3-23设(A)=0FBH,(B)=12H,执行指令: DIVAB 结果为:(A)=0DH,(B)=11H,(CY)=0, (OV)=0。 三、逻辑运算指令1、累加器A的逻辑操作指令(1)清0指令指令操作指令代码CLRA(A)←00H11100100 这条指令的功能是将累加器A清0。只影响P标志。(2)取反指令指令操作指令代码CPLA(A)←(Ā)11110100这条指令的功能是将累加器A的每一位逻辑取反, 不影响标志。例3-24CPLA 设(A)=11001010B,执行指令:结果:(A)=00110101B (3)左环移指令指令操作指令代码这条指令的功能是将累加器A的内容向左环移1 位,ACC.7移入ACC.0。不影响标志。 (4)带进位左环移指令指令操作指令代码RLCACY←D7←D000110011这条指令的功能是将累加器A的内容和进位标志 (CY)一起向左环移1位,ACC.7移入CY,CY移 入ACC.0。不影响其它标志。 (5)右环移指令指令指令代码操作 ARRAD7→D000000011这条指令的功能是将累加器A的内容向右环移1位。ACC.0移入ACC.7。不影响标志。 (6)带进位右环移指令指令指令代码操作 ARRCACYD7→D000010011这条指令的功能是将累加器A的内容和进位标志CY的内容一起向右环移1位,ACC.0移入CY,CY移入ACC.7。不影响其它标志。 (7)累加器半字节交换指令 指令操作指令代码 ASWAPAD7~D4D3~D011000100这条指令的功能是将累加器A的高4位与低4位互换,不影响标志位。 (1)逻辑与指令ANL 指令操作指令代码ANLA,Rn(A)←(A)∧(Rn)01011rrrANLA,direct(A)←(A)∧(direct) 1010101directANLA,@Ri(A)←(A)∧((Ri))0101011iANLA,#data(A)←(A)∧data01010100dataANLdirect,A(direct)←(direct)∧(A) 01010010directANLdirect,#data(direct)←(direct)∧data 01010011directdata 这组指令的功能是对指令所指出的两个变量以位为单位进行逻辑与操作,结果存放在目的变量中。源操作数可采用寄存器寻址、直接寻址、寄存器间接寻址或立即寻址方式。当这条指令用于修改一个输出口时,作为原始数据的值将从输出口的数据锁存器P0~P3读入,而不是读引脚状态。除前4条指令影响P标志外,这组指令不影响其它标志。例3-26设(A)=27H,(R0)=0FDH,执行 指令: ANLA,R0 (A)=00100111∧)(R0)=11111101--------------------------------------------- (A)=00100101结果:(A)=25H,(P)=1。 (2)逻辑或指令ORL 指令操作指令代码ORLA,Rn(A)←(A)∨(Rn)01001rrrORLA,direct(A)←(A)∨(direct)01000101ORLA,@Ri(A)←(A)∨((Ri))0100011iORLA,#data(A)←(A)∨data01000100dataORLdirect,A(direct)←(direct)∨(A) 000010directORLdirect,#data(direct)←(direct)∨data 01000011directdata 这组指令的功能是将指令所指出的两个变量以位为单位进行逻辑或操作,结果送回目的变量中。源操作数同样可采用寄存器寻址、直接寻址、寄存器间接寻址或立即寻址方式,同ANL指令类似,用于修改输出口数据时,原始数据值为输出口锁存器内容。前4条指令只影响P标志。例3-27设(P1)=25H,(A)=33H,执行指令:ORLP1,A(P1)=00100101∨)(A)=00110011----------------------------------------------------(P1)=00110111结果:(P1)=37H(3)逻辑异或指令XRL 指令操作指令代码XRLA,Rn(A)←(A)⊕(Rn)01101rrrXRLA,direct(A)←(A)⊕(direct)01100101directXRLA,@Ri(A)←(A)⊕((Ri))0110011iXRLA,#data(A)←(A)⊕data01100100dataXRLdirect,A(direct)←(direct)⊕(A) 01100010directXRLdirect,#data(direct)←(direct)⊕data 01100011directdata 这组指令的功能是将指令所指出的两个变量以位为单位进行异或操作,结果存放在目的变量中。源操作数的寻址方式同样可采用寄存器寻址、直接寻址、寄存器间接寻址或立即寻址方式。与ANL指令类似,对输出口操作是对输出口锁存器内容读出修改。前4条指令只影响P标志。例3-28设(A)=94H,(R3)=53H,执行指令:XRLA,R3(A)=10010100⊕)(R3)=01010011(A)=11000111结果:(A)=0C7H,(P)=1。例3-29试 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 下列程序执行结果MOVA,#0FFHANLP1,#00HORLP1,#55H ;(A)=0FFH ;P1口清零;P1口内容为55HXRLP1,A;P1口内容为0AAH四、位操作指令1、位变量传送指令 指令操作指令代码MOVC,bit(CY)←(bit)10100010bit MOVbit,C(bit)←(CY)10010010bit这组指令的功能是在以bit表示的位和进位位CY之间 进行数据传送,不影响其它标志。例3-30MOVC,16H;(CY)←(22H.6) MOVP1.5,C;(P1.5)←(CY) 结果:(P1.5)←(16H) 2、位变量修改指令 指令操作指令代码CLRCCLRbit(CY)←011000011 (bit)←011000010bitCPLCCPLbit(CY)←() (bit)←()10110011 10110010bit SETBCSETBbit (CY)←111010011(bit)←111010010bit这组指令的功能是将变量指出的位清0、取反、置 1,不影响其它标志位。 例3-31CLRC;CLR27H;(CY)←0 (24H.7)←0CPL08H;(21H.0)←()SETBP1.0;(P1.0)←1 3、位变量逻辑操作指令(1)位变量逻辑与指令指令操作指令代码ANLC,bit(CY)←(CY)∧(bit)0000010bitANLC,/bit(CY)←(CY)∧()10110000 bit这组指令是将指定的位地址单元内容(或取反后 的内容)与位累加器CY的内容进行逻辑与操 作,结果送CY中,源位地址单元内容不变。 不影响其它标志。 (2)位变量逻辑或指令指令操作指令代码ORLC,bit(CY)←(CY)∨(bit) 01110010bitORLC,/bit(CY)←(CY)∨() 10100000bit这组指令与ANL指令类似,是将指定位地址 单元中的内容(或取反后的内容)与位累 加器(CY)进行逻辑或操作,结果送入CY 中。不影响其它标志。 五、控制转移指令 控制转移指令是用改变程序计数器PC的值,使PC有条件地,或者无条件地,或者通过其它方式,从当前的位置转移到一个指定的地址单元去,从而改变程序的执行方向。 控制转移指令分为无条件转移指令、条件转移指令、调用和返回指令。这类指令共有22条。1、无条件转移指令 (1)短跳转指令指令指令代码AJMPaddr11a10a9a800001a7……a0这是2KB范围内的无条件转移指令,该指令 在运行时,将当前PC值(本指令地址加2) 的高5位和addr11相连(PC15~PC11a10~a0) 而得到转移的目标地址送入PC,因此目标 地址必须写在它下一条指令存放地址的同 一个2KB区域内。 (2)相对转移指令指令SJMPrel指令代码 10000000rel这也是一种无条件转移指令,转移的目标地 址是由当前PC值加上相对偏移量rel组成。 rel是8位二进制补码表示的带符号数,因此 本指令的转移范围是当前PC值-128B~+ 127B。 (3)长跳转指令指令代码指令LJMPaddr16 操作(PC)←addr16 00000010a15~a8a7~a0这条指令的功能是将指令提供的16位目标地址送 入PC,然后程序无条件转向目标地址。 (4)基址寄存器加变址寄存器间接转移指令 (散转指令)指令操作指令代码JMP@A+DPTR(PC)←(A)+(DPTR) 01110011这条指令的功能是将累加器A中8位无符号二进 制数与数据指针DPTR的内容相加,结果送 入PC作为下次执行指令的地址。该指令不影 响标志。利用这条指令可实现程序的散转。 2、条件转移指令条件转移指令是指令依照某一特定条件转移,当条件满足时,程序转移到由相对偏移量与当前PC值(或称源地址,即下一条指令第一字节地址)相加得到的地址处,条件不满足,则程序执行下一条指令。(1)条件满足转移指令指令转移条件指令代码JZrelJNZrelJCrelJNCrelJBbit,relJNBbit,relJBCbit,rel(A)=001100000rel (A)<>001110000rel (CY)=101000000rel (CY)=001010000rel(bit)=100100000bitrel (bit)=000110000bitrel (bit)=100010000bitrel 例3-33将外部RAM的一个数据块(首址为DATA1)传送 到内部RAM(首址为DATA2),遇到传送的数据为零 时停止。START:MOVR0,#DATA2;置内部RAM数据指针 MOVDPTR,#DATA1;置外部RAM数据指针LOOP1:MOVXA,@DPTR;外部RAM单元内容送A JZLOOP2; 判传送数据是否为零,A为零则转移 MOV@R0,A;传送数据不为零,送内部RAM INCR0 INCDPTR SJMPLOOP1LOOP2:RET;修改地址指针 ;继续传送 ;结束传送,返回主程序 (2)比较不相等转移指令指令指令代码CJNECJNECJNECJNEA,direct,relA,#data,relRn,#data,rel @Ri,#data,rel10110101 10110100 10111rrr 1011011idirect data data data relrel relrel这组指令的功能是比较指令中两个操作数的值是否相等,如果 它们的值不相等,则转移,转移的目标地址为当前PC值(源 地址)与偏移量rel相加所得地址。如果第一操作数(无符 号数)小于第二操作数,则置(CY)=1,否则(CY)=0。如 果两数相等,则程序顺序执行下一条指令。该组指令不影响 任何操作内容及其它标志。 (3)减1不为0转移指令 指令 DJNZRn,relDJNZdirect,rel指令代码 11011rrrrel 11010101directrel这组指令的功能是将指令中源变量指出的内容减1, 结果仍送回源变量中。如果结果不为0,则转移, 目标地址为当前PC值(源地址)与偏移量rel相加所 得地址。如果结果为0,则程序顺序执行下一条指 令。这组指令常用于循环计数,允许编程者把工作寄存器 或片内RAM单元用作程序循环计数器。 例3-34延时程序:START:SETBP1.1;(P1.1)←1 DL:MOV30H,#03H;(30H)←03HDL0:MOV31H,#0F0H;(31H)←0F0HDL1:DJNZ31H,DL1;(31H)←(31H)-1,若(31H)<>0,重复执行DJNZ30H,DL0;(30H)←(30H)-1,若(30H)<>0,则转DL0CPLP1.1;(P1.1)←AJMPDL;转DL例3-35将片内RAM30H至4FH单元的内容分别送入片 外RAM1000H开始的单元中。MOVR0,#30H;置片内RAM起始地址MOVDPTR,#1000H;置片外RAM起始地址MOVR1,#20H;置传送数据个数LOOP:MOVA,@R0;从片内RAM读出数据MOVX@DPTR,A;读出数据送入片外RAM;地址指针分别加1INCINCDPTRR0DJNZR1,LOOP;R1减1不为0转移RET;返回3、调用和返回指令主程序转子断点子程序SUB1 主 程 序转子断点1 子程序 SUB1转子断点2子程序SUB2(1)短调用指令指令指令代码ACALLaddr11a10a9a810001a7~a0指令执行时,先将当前PC值压入堆栈(先PCL后PCH),栈指针SP值+2,然后把PC的高5位与addr11相连接(PC15~PC11a10~a0),获得子程序的地址并送入PC,使CPU转向执行子程序。该指令的操作为:(PC)←(PC)+2,(SP)←(SP)+1, ((SP))←(PCL),(SP)←(SP)+1,((SP))←(PCH),(PC10~PC0)←addr11,(PC15~PC11)不变该指令所调用的子程序的地址必须在ACALL指令后的 2KB区城内。 例3-36设(SP)=60H,标号MA值为 0123H,子程序位于0345H,执行指令: MA:ACALLSUB结果: (SP)=62H, (61H)=25H, (62H)=01H, (PC)=0345H。 (2)长调用指令指令代码 指令LCALLaddr1600010010a15~a8a7~a0该指令的操作为:(PC)←(PC)+3,(SP)←(SP)+ 1,((SP))←(PCL),(SP)←(SP)+1, ((SP))←(PCH),(PC)←addr16,从而使 得CPU转到从addr16的地址处开始执行程序。该指令可调用64KB范围内程序存储器中任何一个子 程序,执行后不影响任何标志。 (3)返回指令返回指令是使CPU从子程序返回执行主程序。 在子程序的末尾必须是一条返回指令,才能使 CPU从子程序中返回主程序执行。1)从子程序返回指令指令指令代码 RET00100010操作:(PCH)←((SP)),(SP)←(SP)-1, (PCL)←((SP)),(SP)←(SP)-1。使得 CPU从堆栈中弹出的PC值处开始执行程序,该指 令不影响任何标志。 2)从中断返回指令指令指令代码 RETI00110010该指令除了执行类似RET指令的操作外,还清除内部相应的中断优先级有效触发器(该触发器由CPU响应中断时置位,指示CPU当前是否在处理高级或低级中断),因此,中断服务程序必须以RETI为结束指令。在执行完RETI指令之后,返回断点处需执行完一条指令后,才能响应新的中断。在子程序或中断服务子程序中,PUSH指令必须与POP指令成对使用,否则,不能正确返回主程序。 4、空操作指令指令指令代码 NOP00000000执行该指令仅使PC加1,然后继续执行下条指 令,本指令无任何操作。它为单周期指令, 在时间上占用一个机器周期,因而常用于程 序的延时。 例3-39试 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 程序,从P1.2输出持续时间为5个机
本文档为【单片机原理及应用 教学课件 ppt 作者 徐泳龙 主编 第3章 MCS-51单片机的指令系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
科技制造的艺术美
暂无简介~
格式:ppt
大小:270KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2019-11-22
浏览量:29