嵌入式计算机系统及实践之7-MCS-51指令系统(二)_第1页
嵌入式计算机系统及实践之7-MCS-51指令系统(二)_第2页
嵌入式计算机系统及实践之7-MCS-51指令系统(二)_第3页
嵌入式计算机系统及实践之7-MCS-51指令系统(二)_第4页
嵌入式计算机系统及实践之7-MCS-51指令系统(二)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

目录Contents56789本章附录逻辑运算类指令(24条)控制转移类指令(17条)

位操作指令思考题5、逻辑运算类指令

逻辑运算类指令,主要用于对2个操作数按位进行逻辑操作,结果送到A或直接寻址单元。主要操作与、或、异或、移位、取反、清零等。对标志位的影响除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。5、逻辑运算类指令

5.1逻辑或指令(6条)ORLogicInstructionORLA,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端口,则为“读-改写”操作。5、逻辑运算类指令

读引脚读锁存器源操作数目的操作数5、逻辑运算类指令

例:MOVA,#45HMOVR1,#25HMOV25H,#39HORLA,@R1ORL25H,#13HORL25H,A;A=45H;R1=25H;(25H)=39H;45H∨39H=7DH→A;39H∨13H=3BH→(25H);3BH∨7DH=7FH→(25H)实验验证一下本例5、逻辑运算类指令

5.2逻辑与指令(6条)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端口,则为“读-改写”操作。ANdLogicInstruction5、逻辑运算类指令

例:MOVA,#45HMOVR1,#25HMOV25H,#79HANLA,@R1ANL25H,#15HANL25H,A;A=45H;R1=25H;(25H)=79H;45H∧79H=41H→A;79H∧15H=11H→(25H);11H∧41H=01H→(25H)实验验证一下本例5、逻辑运算类指令

例:71H和56H相异或:

01110001(71H) ⊕)01010110(56H)5.3逻辑异或指令(6条)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标志00100111即27H后两条指令,若直接地址为I/O端口,则为“读-改写”操作。eXclusive-oRLogicInstruction5、逻辑运算类指令

例:MOVA,#45HMOVR1,#25HMOV25H,#39HXRLA,@R1XRL25H,#13HXRL25H,A;A=45H;R1=25H;(25H)=39H;45H⊕39H=7CH→A;39H⊕13H=2AH→(25H);2AH⊕7CH=56H→(25H)5.4清0与取反指令(2条)取反:CPLA;/A→A例:若A=5CH,执行CPLA

结果:A=A3H清0:CLRA ;0→A5、逻辑运算类指令

5.5循环移位指令(4条)RLA RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后两条指令,影响P标志和CY。RotateLogicinstruction5、逻辑运算类指令

例:若A=5CH,CY=1,执行RLCA后,对RLC、RRC指令,在CY=0时,RLC相当于乘以2,RRC相当于除以2结果:A=B9H,CY=0,P=1010111001101110010综合举例:ANLA,#0FH ;屏蔽A的高4位SWAPAANLP1,#0FH ;清P1口高4位ORLP1,A;P1口高4位输出A的低4位;把累加器A中的低4位状态,通过P1口的高4位输出,P1口的低4位状态不变。目录Contents56789本章附录逻辑运算类指令(24条)控制转移类指令(17条)

位操作指令思考题6、控制转移类指令

控制转移类指令(17条)BranchingInstruction共有控制程序转移类指令(不包括位操作类的转移指令)。此类指令一般不影响PSW。包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令6、控制转移类指令

6.1无条件转移类指令(4条)

短转移类指令:AJMPaddr11

长转移类指令:LJMPaddr16

相对转移指令:SJMPrel

间接转移指令:JMP@A+DPTR(1)上面的前三条指令,统统理解成:PC值改变,即跳转到一个标号处。那么它们的区别何在呢?转移范围:2KB64KB-128~+127指令构成不同。AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。

指令长度不同原则上,所有用SJMP或AJMP的地方都可以用

LJMP来替代。6、控制转移类指令

间接转移指令:JMP@A+DPTR

这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。转移地址由A+DPTR形成,并直接送入PC。指令对A、DPTR和标志位均无影响。本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。(2)第四条指令与前三条指令相比有所不同6、控制转移类指令

例:MOVDPTR,#TAB;将TAB代表的地址送入DPTRJMP@A+DPTR;跳转TAB:AJMPROUT0;跳转ROUT0开始的程序段TAB+2:AJMPROUT1;跳转ROUT1开始的程序段TAB+4:AJMPROUT2;跳转ROUT2开始的程序段TAB+6:AJMPROUT3;跳转ROUT3开始的程序段

...ROUT0:

...ROUT1:

...ROUT2:

...ROUT3:执行该段程序后,程序将根据A中的内容转移到不同的程序段去执行----散转。A=0,转ROUT0A=2,转ROUT1A=4,转ROUT2A=6,转ROUT36、控制转移类指令

6.2条件转移指令(8条)条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。一、判A内容是否为0转移指令(2条)JZrel;如果A=0,则转移,否则顺序执行。

JNZrel;如果A≠0,就转移。转移到相对于当前PC值的8位移量的地址去。即:新的PC值=当前PC+偏移量rel我们在编写汇编语言源程序时,可以直接写成:

JZ标号 ;即转移到标号处。6、控制转移类指令

例:MOVA,R0JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFHL2:SJMPL2END

在执行上面这段程序前:如果R0=0,结果R1=0FFH。而如果R0

0,则结果是R1=00H。把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么?

如果R0=0,结果R1=00H。如果R0

0,结果是R1中的值为0FFH。6、控制转移类指令

二、比较不等转移指令(4条)CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。同样地,使用时,我们可以将rel理解成标号,即:

CJNEA,#data,标号

CJNEA,direct,标号

CJNERn,#data,标号

CJNE@Ri,#data,标号6、控制转移类指令

利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。6、控制转移类指令

举例: MOVA,R0CJNEA,#10H,L1MOVR1,#0;如R0=10H,则不转移R1=00H;

AJMPL3L1:JCL2 ;如CY=1即R0<10H,则转移

MOVR1,#0AAH;否则CY=0即R0>10H,则转移

AJMPL3L2:MOVR1,#0FFHL3:SJMPL3因此最终结果是:本程序执行前,如果R0=10H,则R1=00H;如果R0>10H,则R1=0AAH;如果R0<10H,则R1=0FFH。6、控制转移类指令

三、减1不为0转移指令(2条)DJNZRn,relDJNZdirect,relDJNZ指令的执行过程是这样的:它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。例:

DJNZ10H,LOOP...LOOP:...6、控制转移类指令

例:

MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的执行过程是:将23H单元中的数连续相加,存至A中,每加一次,23H单元中的数值减1,直至减到0,共加(23H)次。6、控制转移类指令

6.3调用与返回指令(4条)一、调用指令(2条)LCALLaddr16;长调用指令(3字节)ACALLaddr11;短调用指令(2字节)上面两条指令都是在主程序中调用子程序,两者的区别:对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。使用时可以用:

LCALL标号;标号表示子程序首地址

ACALL标号来调用子程序。1.执行指令之后跳转的地址(PC)中的16位是如何形成的呢?1)高5位,是下条指令的高5位地址。2)接下里的3位是操作码的5-7位,3)指令的后8位。6、控制转移类指令深究这条指令很有趣注意:上面的操作使得子程序在程序存储器中的位置必须与ACALL指令后面的语句在同一个2K的页内,也就是高五位地址必须一致,否则出错,跳转的地址就不对,无法正确执行子函数,也不能正确返回。6、控制转移类指令

指令的执行过程是:当前PC压栈,子程序首地址送PC,实现转移。二、返回指令(2条)子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。RET ;子程序返回指令RETI ;中断子程序返回指令两者不能互换使用。6、控制转移类指令

6.4空操作指令(1条)NOP空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。RET指令的执行过程是:堆栈栈顶内容(2字节,调用时保存的当前PC值)弹出给PC,实现返回。RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。6、控制转移类指令

目录Contents56789本章附录逻辑运算类指令(24条)控制转移类指令(17条)

位操作指令思考题7、位操作指令(17条)BooleanOperations

MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在MCS-51中,有一部份RAM和一部分SFR是支持位寻址功能的。位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位00~7FH);可以位寻址的特殊功能寄存器:8051中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除,如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。在进行位处理时,CY用作“位累加器”。7、位操作指令

以PSW中位4(RS1)为例。直接(位)地址方式:如D4H;点操作符号方式:如PSW.4,D0H.4;位名称方式:如RS1;用户定义名方式:如用伪指令bit SUB.REGbitRS1定义后,可用SUB.REG代替RS1。位地址表达方式7、位操作指令

7.1位传送指令(2条)MOVC,bit ;bit→CMOVbit,C ;C→bit这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。例:MOVC,P1.0 ;将P1.0的状态送给C。

MOVP1.0,C;将C中的状态送到P1.0

;引脚上去。7、位操作指令

7.2位清0和置位(4条)

位清0指令

CLRC;使CY=0CLRbit;使指令的位地址等于0。例:CLRP1.0;即使P1.0变为0

位置1指令

SETBC;使CY=1SETBbit;使指定的位地址等于1。例:SETBP1.0;使P.0变为17、位操作指令

7.3位逻辑运算指令(6条)位与指令ANLC,bit;Cy与指定位的值相与,结果送CyANLC,/bit;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。但注意:指定的位地址中的值本身并不发生变化。例:ANLC,/P1.0位或指令ORLC,bitORLC,/bit位取反指令CPLC;使Cy值取反。CPLbit;使指定的位的值取反。例:CPLP1.07、位操作指令

7.4位条件转移指令(5条)判Cy转移指令

JCrel JNCrel

第一条指令的功能是如果Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。同样理解:JNC标号7、位操作指令

判位变量转移指令JBbit,relJNBbit,relJBCbit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。同样理解:JBbit,标号第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。7、位操作指令

2026/6/1037P3.2和P3.3上各接有一只按键,要求它们分别按下时(P3.2=0或P3.3=0),分别使P1口为0或FFH。

START:MOVP1,#0FFH MOVP3,#0FFHL1:JNBP3.2,L2; JNBP3.3,L3;P3.2=1,P3.3=1,等待

LJMPL1L2:MOVP1,#00H;P3.2=0,使P1口全为“0” LJMPL1L3:MOVP1,#0FFH;P3.3=0,使P1口全为“1” LJMPL1课堂思考题:如果P3.2端口保持长时间按下状态,请问正常检测到P3.3的状态?举例:+5VP3.2P3.38051目录Contents56789本章附录逻辑运算类指令(24条)控制转移类指令(17条)

位操作指令思考题8、思考题

一、选择题1.通常以___为目的操作数的指令会影响状态寄存器的标志位。A)P0,B)R0,C)A寄存器,D)B寄存器2.下列哪条指令__在程序存储器中可跳转的范围更大?A)AJMP,B)LJMP,C)SJMP3.指令ORLdirect,A;(direct)∨A→(direct),如果其中的direct指的是P0,那么访问的是P0口锁存器的状态,还是P0口引脚的状态,____。A)锁存器,B)引脚,C)不确定,D)两者都可以。4.RLCA为左循环移位指令,参与循环移位的标志位是___.CY,B)AC,C)P,D)OV5.用汇编编写散转分支程序时,通常使用的指令是___A)短转移类指令:AJMPaddr11,B)长转移类指令:LJMPaddr16C)相对转移指令:SJMPrelD)间接转移指令:JMP@A+DPTR8、思考题

6.JZrel;条件跳转指令,判断的是__寄存器的值是否为0,发生跳转。A)B寄存器,B)P0寄存器,C)R0寄存器,D)A寄存器7.关于子函数短调用指令ACALLaddr11;,理解正确的是____。A)子函数入口地址只能小于11位,高5位必须为0,否则调用返回会出错;B)子函数入口地址需要与该指令下面一条指令的距离在2K的范围内;C)子函数入口地址需要与该指令下面一条指令在同一个2K的页内;D)子函数入口地址需要与该指令下面一条指令的高5位地址相同;8.下列哪些符号表示的一定是位地址_______。A)P1.0,B)C,C)PSW.4,D)D0H.4,E)D4H9.以8位表示,-8的反码是___A)10001000,B)11110111,C)11111000,D)000010008、思考题

二、是非题1、MCS51处理器不支持位操作。()2.

LCALLaddr16和ACALLaddr11的主要区别是所调用的子函数在程序存储器中的地址范围有差别。()3.中断服务程序返回指令RETI,

温馨提示

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

评论

0/150

提交评论