控制转移类指令_第1页
控制转移类指令_第2页
控制转移类指令_第3页
控制转移类指令_第4页
控制转移类指令_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

控制转移类指令第一页,共六十五页,编辑于2023年,星期六

⒌循环移位指令(4条)①循环左移:RLA

不影响标志位②带Cy循环左移:RLCA

影响Cy,P③循环右移:RRA

不影响标志位

④带Cy循环右移:RRCA

影响Cy,P

第二页,共六十五页,编辑于2023年,星期六二进制数的特点:左移一位增大一倍,右移一位减少一半。在汇编语言程序中,通常用带CY(CY=0)循环左移实现乘2操作,通常用带CY(CY=0)循环右移实现除以2操作。第三页,共六十五页,编辑于2023年,星期六例3某已知数存在R4中,试将其乘以2存在R3中,除以2存在R2中。编程如下:

CLRCMOVA,R4RLCAMOVR3,ACLRCMOVA,R4RRCAMOVR2,A第四页,共六十五页,编辑于2023年,星期六3.3.5控制转移类指令控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移类指令分为:无条件转移指令、条件转移指令及调用和返回指令。第五页,共六十五页,编辑于2023年,星期六四、控制转移类指令第六页,共六十五页,编辑于2023年,星期六三字节指令机器码:02addr15-8addr7-0⒈无条件转移指令(4条)⑴长转移指令

LJMPaddr16;addr15~0→PC,

转移范围:可以转移到16位地址所表示的整个64K

程序存储区(ROM)。第七页,共六十五页,编辑于2023年,星期六例1:2000H:LJMP3000H解:PC=3000H,16位目标地址直接进入PC。例3.11假定在某程序中存在如下指令:

NEXT:MOVA,#00H ;NEXT为指令的标号,代表该指令在 ;程序存储器中存放的地址,假定该 ;指令的存储地址为2000H

请写出指令LJMPNEXT执行后PC的值。

解:执行指令LJMPNEXT之后,PC=2000H,即程序从NEXT标号所指向的指令开始执行。第八页,共六十五页,编辑于2023年,星期六⑵短转移指令

AJMPaddr11 ;PC+2→PC, addr10~0→PC10~0, PC15~11不变双字节指令机器码:a10a9a800001a7a6……a0转移范围:11位地址转移,转移范围为PC+2后的同一2KB区域内。执行步骤:(1)产生当前PC。PC+2PC

(2)形成转移目标地址。第九页,共六十五页,编辑于2023年,星期六⑶相对转移指令

SJMPrel;PC+2→PC,PC+rel→PC双字节指令转移范围:当前PC+127B~-128B

执行步骤:(1)形成当前PC

(2)形成转移目标地址,PC+relPCrel(相对偏移量):有符号数8位二进制数,正数程序向下转移,负数程序向上转移。

第十页,共六十五页,编辑于2023年,星期六例4、2000H:SJMP60H5、2000H:SJMP90H6、2000H:SJMP0FEH解4:(1)当前PC=PC+2=2000H+2=2002H

(2)形成转移目标地址,

PC=PC+rel=2002H+60H=2062H,

向2000H后转移第十一页,共六十五页,编辑于2023年,星期六解5:(1)产生当前PC=PC+2=2000H+2=2002H(2)rel是带符号的补码,当rel80H(负数)时,计算前应加上FF,即rel=FF90H(带符号扩展)

(3)形成转移目标地址,

PC=PC+rel=2002+FF90H=1F92H,向2000H前转移第十二页,共六十五页,编辑于2023年,星期六解6:

(1)产生当前PC,PC=PC+2=2002H(2)形成转移目标地址,

PC=PC+rel=2002+FFFEH=2000H,程序在原地踏步。常写为:SJMP$;$表示0FEH第十三页,共六十五页,编辑于2023年,星期六LJMP、AJMP、SJMP三条无条件转移指令的区别:①转移范围不一样。

LJMP转移范围是64KB;

AJMP转移范围是与当前PC值同一2KB;

SJMP转移范围是当前PC-128B~+127B。使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。②指令字节不一样。

LJMP是3字节指令;

AJMP、SJMP是2字节指令。第十四页,共六十五页,编辑于2023年,星期六

⑷间接转移指令(散转指令)

JMP@A+DPTR ;A+DPTR→PC

指令的目标地址与当前PC值无关,可以在程序运行中加以改变,完成程序的散转。第十五页,共六十五页,编辑于2023年,星期六例3.14假定DPTR=2000H,指出当累加器A的内容分别为02H、04H、06H、08H时,执行指令JMP@A+DPTR后,PC的值分别为多少。解:当累加器A=02H时,执行指令JMP@A+DPTR后,PC=2000H+02H=2002H。当累加器A=04H时,执行指令JMP@A+DPTR后,PC=2000H+04H=2004H。当累加器A=06H时,执行指令JMP@A+DPTR后,PC=2000H+06H=2006H。当累加器A=08H时,执行指令JMP@A+DPTR后,PC=2000H+08H=2008H。第十六页,共六十五页,编辑于2023年,星期六3、条件转移指令(13条)

条件转移指令根据判断条件可分为:(1)判A转移(2)比较不相等转移指令(3)减1非0转移(4)判C转移(位指令)(5)判bit转移(位指令)

满足条件,则转移;不满足条件,则程序顺序执行。

第十七页,共六十五页,编辑于2023年,星期六①A=0转移指令:

JZrel;PC+2→PC,

若A=0,则PC+rel→PC,转移若A0,则程序顺序执行(1)判A转移指令(2条)②A0转移指令:

JNZrel;PC+2→PC,

若A0,则PC+rel→PC,转移若A=0,则程序顺序执行第十八页,共六十五页,编辑于2023年,星期六例2试编程实现:B中数据不断加1,加至FF,则不断减1,减至0,则不断加1,往返不断循环。程序如下:

GADD:INCBMOVA,B

CPLAJNZGADDGSUB:DECBMOVA,BJZGADDSJMPGSUB第十九页,共六十五页,编辑于2023年,星期六(2)比较转移指令形式:CJNE(目的操作数),(源操作数),rel功能:PC+3PC,目的操作数与源操作数进行比较,不相等转移。

若(目的操作数)=(源操作数),则程序顺序执行,且Cy=0

若(目的操作数)(源操作数),则PC+relPC,转移,且若(目的操作数)(源操作数),则Cy=0

若(目的操作数)<(源操作数),则Cy=1

第二十页,共六十五页,编辑于2023年,星期六流程示意图:目标操作数=源操作数(PC)+3PC0CyYN目标操作数<源操作数(PC)+3+relPC1Cy(PC)+3+relPC0CyYN第二十一页,共六十五页,编辑于2023年,星期六①CJNEA,direct,rel;PC+3→PC,;若A=(direct),则程序顺序执行,Cy=0;若A≠(direct),则PC+rel→PC,转移

;且若A≥(direct),Cy=0;若A<(direct),Cy=1

CJNEA,#data,rel;PC+3→PC,;若A=data,则程序顺序执行,Cy=0;若A≠data,则PC+rel→PC,转移;且若A≥data,Cy=0;若A<data,Cy=1

⑸比较转移指令第二十二页,共六十五页,编辑于2023年,星期六③

CJNERn,#data,rel;PC+3→PC,;若Rn=data,则程序顺序执行,Cy=0;若Rn≠data,则PC+rel→PC,转移;且若Rn≥data,Cy=0;若Rn<data,Cy=1④

CJNE@Ri,#data,rel;PC+3→PC,;若(Ri)=data,则程序顺序执行,Cy=0;若(Ri)≠data,则PC+rel→PC,转移;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=1第二十三页,共六十五页,编辑于2023年,星期六例3

试编写程序,将内RAM20H~2FH共16个连续地址单元清零。编程如下:

CLR16:MOVR0,#20HCLRACLOP:MOV@R0,AINCR0CJNER0,#30H,CLOPSJMP$第二十四页,共六十五页,编辑于2023年,星期六(3)减1非0转移指令(2条)②DJNZdirect,rel;PC+3→PC,(direct)-1→direct

若(direct)=0,则程序顺序执行若(direct)0,则PC+rel→PC,转移

DJNZRn,rel;PC+2→PC,Rn-1→Rn, 若Rn=0,则程序顺序执行 若Rn0,则PC+rel→PC,转移

第二十五页,共六十五页,编辑于2023年,星期六例4例4

试编写程序,将内RAM20H~2FH共16个连续地址单元清零。编程如下:CLR16:MOVR0,#20HMOVR2,#16CLRACLOP:MOV@R0,AINCR0DJNZR2,CLOPSJMP$

第二十六页,共六十五页,编辑于2023年,星期六

3.调用和返回指令(5条)

1)绝对调用指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②调用范围与AJMP指令相同。第二十七页,共六十五页,编辑于2023年,星期六2)长调用指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②调用范围与LJMP指令相同。第二十八页,共六十五页,编辑于2023年,星期六3)返回指令(2条)注意:该指令结果不影响程序状态字寄存器PSW。第二十九页,共六十五页,编辑于2023年,星期六2、空操作指令(1条)

NOP为单机周指令,在时间上占用一个机器周期,常用于时间“微调”。NOP;PC+1→PC第三十页,共六十五页,编辑于2023年,星期六注意:该指令结果不影响程序状态字寄存器PSW。4)空操作(1条)第三十一页,共六十五页,编辑于2023年,星期六例5

如果单片机的时钟频率为12MHZ,试设计2ms的延时程序。编程如下:

MOVR2,#200TIME:NOPNOPNOPNOPNOPNOPNOPNOPDJNZR2,TIME第三十二页,共六十五页,编辑于2023年,星期六3.3.6位操作类指令位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H~2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H~2FH共16个单元128个位,我们为这128个位的每个位均定义一个名称:00H~7FH,称为位地址,如表3.5所示。对于特殊功能寄存器SFR中可位寻址的寄存器的每个位,也有名称定义,如表3.6所示。第三十三页,共六十五页,编辑于2023年,星期六表3.5片内RAM位寻址区的位地址分布第三十四页,共六十五页,编辑于2023年,星期六第三十五页,共六十五页,编辑于2023年,星期六表3.6SFR中的位地址分布第三十六页,共六十五页,编辑于2023年,星期六第三十七页,共六十五页,编辑于2023年,星期六对于位寻址,有以下四种不同的写法。第一种是直接地址写法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二种是点操作符写法,如MOVC,0D0H.2。第三种是位名称写法,即在指令格式中直接采用位定义名称,这种方式只适用于可以位寻址的SFR,如MOVC,OV。第四种是专用寄存器符号与点操作符表示法,如MOVC,PSW.0。第三十八页,共六十五页,编辑于2023年,星期六位操作类指令分为以下五组:位传送指令(2条):MOV。位置位和位清0指令(4条):SETB、CLR。位运算指令(6条):ANL、ORL、CPL。位转移指令(3条):JB、JNB、JBC。判CY标志指令(2条):JC、JNC。第三十九页,共六十五页,编辑于2023年,星期六1.位传送指令(2条)注意:位传送指令的操作数中必须有一个是进位位C,不能在其它两个位之间直接传送。进位位C也称为位累加器。第四十页,共六十五页,编辑于2023年,星期六2.位置位和位清0指令(4条)3.位运算指令(6条)注意:以上指令结果通常影响程序状态字寄存器PSW的CY标志。第四十一页,共六十五页,编辑于2023年,星期六4.位转移指令(3条)注意:① JBC与JB指令的区别是:前者转移后把寻址位清0,后者只转移而不把寻址位清0。②以上指令结果不影响程序状态字寄存器PSW。第四十二页,共六十五页,编辑于2023年,星期六

5.判CY标志指令(2条)注意:以上结果不影响程序状态字寄存器PSW。第四十三页,共六十五页,编辑于2023年,星期六例3.16用位操作指令编程计算逻辑方程P1.7=ACC.0×(B.0+P2.1)+,其中“+”表示逻辑或,“×”表示逻辑与。解:程序段如下:

MOVC,B.0 ;B.0→C

ORL

C,P2.1 ;C或P2.1→C

ANL

C,ACC.0 ;C与ACC.0→C,即ACC.0×(B.0+P2.1)→C

ORL

C,/P3.2 ;C或/P3.2,即ACC.0×(B.0+P2.1)+→C

MOV

P1.7,C ;C→P1.7第四十四页,共六十五页,编辑于2023年,星期六例题:设字节地址(20H)=01H,试分析程序执行后位地址01H、00H中的内容为何值?P1口的8条I/O口线为何状态?

clrcmova,#66hjb07h,loop1cplcsetb01hloop1:orlc,acc.2jbcacc.2,loop2clr00hloop2:movP1,aend第四十五页,共六十五页,编辑于2023年,星期六

3.3.7常用伪指令

1.定位伪指令ORG格式:

[标号:]ORG地址表达式功能:规定程序块或数据块存放的起始位置。例如:ORG1000H ;表示下面的指令MOVA, ;#20H存放于1000H开始的单元

MOVA,#20H第四十六页,共六十五页,编辑于2023年,星期六

2.定义字节数据伪指令DB格式:

[标号:]DB字节数据表功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。例如:ORG1000H

TAB:DB2BH,0A0H,'A',2*4;表示从1000H单元开始的地方存放数据2BH,;0A0H,41H(字母A的ASCII码),08H第四十七页,共六十五页,编辑于2023年,星期六

3.定义字数据伪指令DW格式:

[标号:]DW字数据表功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。例如:  ORG1000H

DATA:DW324AH,3CH;表示从1000H单元开始;的地方存放数据32H,;4AH,00H,3CH(3CH

;以字的形式表示为;003CH)第四十八页,共六十五页,编辑于2023年,星期六

4.定义空间伪指令DS格式:

[标号:]DS表达式功能:从指定的地址开始,保留多少个存储单元作为备用的空间。例如:  ORG1000H

BUF:DS50

TAB:DB22H;表示从1000H开始的地方预留;50(1000H~1031H)个存储字节;空间,22H存放在1032H单元第四十九页,共六十五页,编辑于2023年,星期六

5.符号定义伪指令EQU或=格式:符号名EQU表达式或符号名=表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。例如: LEN=10 SUMEQU21H MOVA,#LEN;执行指令后,累加器A中的值;为0AH第五十页,共六十五页,编辑于2023年,星期六

6.数据赋值伪指令DATA格式:符号名DATA表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据时可以放在程序末尾。例如:

MOVA,#LEN

LENDATA10尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。第五十一页,共六十五页,编辑于2023年,星期六

7.数据地址赋值伪指令XDATA格式:符号名XDATA表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,可用于双字节数据定义。例如: DELAYXDATA0356H LCALLDELAY ;执行指令后,程序转到;0356H单元执行第五十二页,共六十五页,编辑于2023年,星期六

8.汇编结束伪指令END格式:

[标号:]END功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。第五十三页,共六十五页,编辑于2023年,星期六本章小结程序由指令组成。一台计算机能够提供的所有指令的集合称为指令系统。指令有机器码指令和助记符指令两种形式。计算机能够直接执行的指令是机器码指令。寻找操作数地址的方式称为寻址方式。MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。

MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类:数据传送指令(29条)、算术运算指令(24条)、逻辑运算指令(24条)、控制转移指令(17条)和位操作指令(17条)。第五十四页,共六十五页,编辑于2023年,星期六习题3

3.1单项选择题。

(1)单片机在与外部I/O口进行数据传送时,将使用

指令。

A. MOVX

B. MOV

C. MOVC

D.视具体I/O口器件而定

(2)在寄存器间接寻址方式中,Ri是指

A. R0~R7

B. R0~R1

C.操作码 D.操作数地址

(3)下列指令中,影响堆栈指针的指令是

A. LJMPaddr16B. DJNZRn,rel

C. LCALLaddr16D. MOVXA,@Ri第五十五页,共六十五页,编辑于2023年,星期六

(4) MCS-51单片机有七种寻址方式,其中:MOVA,direct指令的源操作数属于

寻址方式。

A.间接 B.变址 C.相对 D.直接

(5)指令JZNEXT的作用是

A.当CY标志为0时跳转到NEXT语句执行

B.当累加器A内容不为全0时跳转到NEXT语句执行

C.当累加器A内容为全0时跳转到NEXT语句执行

D.当CY标志为1时跳转到NEXT语句执行

(6)将外部数据存储单元的内容传送到累加器A中的指令是

A.MOVXA,@A+DPTRB. MOVA,@R0

C.MOVCA,@A+DPTRD. MOVXA,@DPTR第五十六页,共六十五页,编辑于2023年,星期六

(7)在指令MOV30H,#55H中,30H是

A.指令的操作码 B.操作数

C.操作数的目的地址 D.机器码

(8)在下列指令中,属判位转移的指令是

A. AJMPaddr11 B. CJNEA,direct,rel

C. DJNZRn,rel D. JNCrel

(9) 8031有4组工作寄存器区,将当前工作寄存器设置为第2组应使用的指令是

A. SETBRS0和CLRRS1 B. SETBRS0和SETBRS1

C. CLRRS0和CLRRS1 D. CLRRS0和SETBRS1

(10) MCS-51单片机中,下一条将要执行的指令地址存放在

中。

A. SP

B. DPTR C. PC

D. PSW第五十七页,共六十五页,编辑于2023年,星期六

(11)当执行DAA指令时,CPU将根据

的状态自动调整,使ACC的值为正确的BCD码。

A. CY B. MOV20H,R4

C. CY和AC D. RS0和RS1

(12)下列指令中正确的是

A. MOVA,R4 B. MOV@R1,R3

C. MOVR4,R3D. MOV@R4,R3

(13)在堆栈操作中,当进栈数据全部弹出后,这时SP应指向

A.栈底单元 B. 7FH单元

C.栈底单元地址加1 D.栈底单元地址减1第五十八页,共六十五页,编辑于2023年,星期六

3.2填空题。

(1)在直接寻址方式中,只能使用

位二进制数作为直接地址,因此,其寻址方式对象只限于

(2)在相对寻址方式中,寻址得到的结果是

(3)假定A=85H,(20H)=0FFH,CY=1,执行指令:ADDCA,20H后,累加器A的内容为

,CY的内容为

,AC的内容为

,OV的内容为

(4)假定A=56H,R5=67H,执行如下指令后,累加器A的内容为

,CY的内容为

ADDA,R5

DAA

(5)假定A=40H,B=0A0H,执行指令:MULAB后,寄存器B的内容

,累加器A的内容为

,CY的内容为

,OV的内容为

。第五十九页,共六十五页,编辑于2023年,星期六

(6)假定A=0FEH,B=15H,执行指令:DIVAB后,累加器A的内容为

,寄存器B的内容为

,CY的内容为

,OV的内容为

(7)假定A的内容为0FEH,执行完指令:SWAPA后,累加器A的内容为

(8)将累加器A清0的指令有很多种,请按下面的要求写出指令:数据传送指令

逻辑与操作指令

逻辑异或操作指令

累加器清0指令

(9)在位操作中,能起到字节操作中累加器作用的是

。第六十页,共六十五页,编辑于2023年,星期六

(10)假定addr11=00100000000B,标号n

温馨提示

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

最新文档

评论

0/150

提交评论