《【大学课件】MCS51单片机指令系统P114.ppt》由会员分享,可在线阅读,更多相关《【大学课件】MCS51单片机指令系统P114.ppt(114页珍藏版)》请在三一办公上搜索。
1、,3.1 指令系统概述,3.2 MCS-51指令的寻址方式,3.3 MCS-51指令系统介绍,下页,http:/,一台计算机所能执行的全部的指令集合,3.1 指令系统概述,指令是计算机中具有特定功能的操作命令,程序与程序设计,按预定要求编排的指令序列称为程序。编排的过程称为程序设计,指令系统,设计一种CPU,一般从设计指令系统开始,因而,一种机器的指令系统是机器本身固有的,决定了机器的性能,用户无法改变,必须继承、学习、掌握、应用,上页,下页,回目录,http:/,机器语言:,二进制代码,是机器唯一能直接识别、执行的语言。,汇编语言:,为了记忆和阅读方便,制造商对指令系统每一条指令,都给出了指
2、令助记符。用助记符,操作数,标号编写的程序称为汇编语言源程序。,一、汇编语言,汇编语言必须翻译成机器语言才能被机器执行,程序设计语言,汇编语言:,高级语言:,符号语言:,上页,下页,回目录,如P55,图3-1所示。全是机器码,http:/,完成由汇编语言到机器代码的过程叫汇编,汇编的方法有两种:自动汇编、手工汇编,由机器代码到汇编语言的过程叫反汇编,汇编语言源程序,机器语言(二进制代码),汇编,反汇编,上页,下页,回目录,MCS-51交叉汇编,http:/,二、汇编语言的格式,标号:操作码 操作数;注释,其中除操作码部分是必须的,括号内的区段是任选项。,1、标号,标号是该指令的符号地址,可根据
3、需要设定,必须以字母开始,以“:”结束,长度不超过8个字符,系统中的保留字符不能作标号,如:SFR名、ADD等,标号可被其他语句的操作数直接引用源程序中,一个标号只能定义一个语句,不能相重,保持一义性,上页,下页,回目录,一个汇编语句分为四个区段,操作码,操作码,操作码,http:/,2、操作码,由指令系统的助记符、伪指令助记符组成。,操作码是每一句汇编语言所必须的,操作码和操作数之间用空格分开,3、操作数,可为二进制数(B),十进制数(D),十六进制数(H),数字大于9,则数字应以“0”开头,如:#0AFH,可以是操作数地址、立即数、标号、表达式如 M+3,目的操作数和源操作数之间用“,”分
4、开,可以是寄存器名如A、B、R、DPTR,M,标号,被定义过的,上页,下页,回目录,Binary,Decimal,Hexadecimal,指出该语句的操作性质,http:/,4、注释,以“;”开头,是程序员对指令操作的解释,以帮助阅读、理解程序的意义,可有可无,汇编时对这部分不予处理,不译成任何机器代码,可用英语或某种简洁的方式解释指令,或打印 程序清单,上页,下页,回目录,http:/,三、伪指令,1、起点指令 ORG,格式:,ORG H,功能:,给程序起始地址或数据块的起始地址赋值,例:,用法:,一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令,上页,下页,回目录,首地址,
5、首地址,http:/,2、结束命令 END,格式:END,功能:汇编程序结束标志,附在一个源程序的结尾 一个源程序只能出现一次END指令,3、定义字节命令 DB,格式:,功能:,标号:DB 字节常数或字符串(8位),定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元,用法:,有定义的内存单元地址,项或项表,上页,下页,回目录,http:/,例:,伪指令ORG 定义了数据块TAB的起始地址为8000H伪指令DB定义了8000H8003单元的内容依次为:,(8000H)=45H,(8001H)=49H,(8002H)=35H,(8003H)=41H,(8004H)=05H,TAB,
6、TAB1,(1)由 ORG定义,(2)跟在其他源程序之后,上页,下页,回目录,http:/,4、定义字命令DW,格式:,功能:,标号:DW 字或字表,定义若干个字(双字节),例:,ORG 8000H,TAB:DW 7234H,8AH,10,(8000H)=72H,(8001H)=34H,(8002H)=00H,(8003H)=8AH,(8005H)=0AH,汇编后:,(8004H)=00H,上页,下页,回目录,按顺序存放!,http:/,5、定义空间命令 DS,格式:,功能:,标号:DS 数据或字符及表达式,例:,(8008H)=30H,(8009H)=8AH,从指定单元地址开始,由数据或字符
7、及表达式的值来定义应保留的单元数,备用,即:8000H8007H单元保留备用,定义空间,上页,下页,回目录,http:/,6、等值命令 EQU,格式:,字符名称 EQU 数据或汇编符号,功能:,将一个数据或汇编符号赋予标号段规定的字符名称,例:,;AA与R6等值,上页,下页,回目录,http:/,例:,A10 EQU 10DELY EQU 07EBH MOV A,A10 LCALL DELY,;A10=10,;DELY=07EBH,;转向入口地址 07EBH,使用EQU指令,须先赋值后使用,不能反之,上页,下页,回目录,http:/,7、数据地址赋值等值命令 DATA,格式:,字符名称 DAT
8、A 数据或表达式,功能:,此命令把数据/代码地址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义,INDEXJ DATA 8389H,;INDEXJ这个字符名称的地址为8389H,例:,上页,下页,回目录,等价于,http:/,EQU与 DATA的区别,(1)DATA与EQU相似,但DATA定义的字符名称,可先使用后定义,EQU则不能,(2)EQU指令可把汇编符号赋给字符名称,DATA则不能,(3)DATA可把表达式的值赋给字符名称,EQU则不能,DATA常在程序中定义数据地址EQU常在程序中定义字符数据,上页,下页,回目录,http:/,8、位地址符号命令 BIT,格式:,字符名称
9、BIT 位地址,功能:,把位地址赋予标号段的字符名称,;P1.0,P2.0赋予位地址字符名称 A1、A2,在编程时可以直接把 A1、A2 当成位地址使用,上页,下页,回目录,http:/,汇编程序的操作,分两次扫描(汇编),第一次扫描(汇编),检查语法结构,对源程序中的符号、表达式、标号进行定义,处理伪指令,建立符号表,上页,下页,回目录,显示 ERROR,并提示行号,显示 ERROR,并提示行号,修改!,修改!,第二次扫描(汇编),汇编成目标代码和汇编程序清单,可执行的代码(机器码),http:/,三、MCS-51指令系统的特点,1、执行速度快,存储效率高,MCS-51指令系统共有111条指
10、令,按字节分,单字节指令49条,双字节指令45条,三字节指令17条,按周期分,单周期指令64条,双周期指令45条,四周期指令2条,设时钟频率为12MHz,则指令执行的时间分别为:,1s 58,2s 40,4s 2,占居空间,占居时间,上页,下页,回目录,http:/,硬件由221位构成,2、指令易掌握,功能强,3、适合于控制、智能仪表,布尔处理机,布尔运算器ALU,布尔累加器CY(PSW.7),布尔RAM区 共128位,布尔I/O口,P0P3口每位都可做布尔I/O口,布尔指令子集,17条布尔指令,上页,下页,回目录,http:/,四、寻址方式(7种),立即寻址,直接寻址,寄存器寻址,寄存器间接
11、寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,上页,下页,回目录,http:/,数据传送(29条),算术运算(24条),逻辑运算(24条),控制转移(17条),布尔处理(17条),上页,下页,回目录,http:/,介绍描述指令符号的意义,当前选中寄存器区的8个工作寄存器(R0R7),Rn,Ri,direct,-8位内部RAM单元地址 00H7FH,专用特殊功能寄存器SFR的地址80HFFH,立即数(8位),#data,#data16,立即数(16位),n=07,i=0、1,上页,下页,回目录,P61,http:/,addr16,16位目的地址,用于LCALL、LJMP指令 地址范围6
12、4KB ROM空间,addr11,11位目的地址,用于ACALL、AJMP指令 地址范围2KB ROM空间,rel,DPTR,数据地址指针,可做16位间址寄存器,bit,内RAM或SFR中的直接位寻址,上页,下页,回目录,http:/,A,累加器,B,专用寄存器,用于MUL和DIV指令,C,位累加器(PSW.7),进位/借位标志,间址或基址寄存器前缀如 Ri,A+DPTR,/,位操作的前缀,表示对该位操作数取反,(X),X中的内容,((X)),由X寻址的单元中的内容,箭头左边的内容被箭头右边的内容所代替,DPTR,A+PC,上页,下页,回目录,http:/,3.2 MCS-51指令的寻址方式,
13、用何种方式寻找指令的操作数或指令的执行地址,1、立即寻址,寻址空间:,指令形式:,程序存储器,指令的操作数存放在程序存储器中,操作数紧跟操作码OP后面,立即寻址:,在 哪 里?,用何种方式寻找,OP#data,Immediate Addressing,上页,下页,回目录,指令的寻址方式:,指令的寻址方式:,http:/,MOV A,#30H,例1:,30H,MOV DPTR,#8000H,例2:,80H,00H,上页,下页,回目录,http:/,2、直接寻址,寻址空间:,指令的三种形式:,直接寻址,直接寻址是访问 SFR 的唯一方法,Direct Addressing,上页,下页,回目录,00
14、H7FH80HFFH,CPU内部,直接间接,http:/,“与”,上页,下页,回目录,MOV A,30H,例1:,ANL 30H,#30H,例2:,“结果”,http:/,3、寄存器寻址,寻址空间:,指令的三种形式:,当前选定的寄存器内容就是实际操作数,MOV A,R3,例1:,ADD A,R3,例2:,寄存器寻址:,Register Addressing,操作数隐含,操作数显然,隐含寻址,上页,下页,回目录,http:/,4、寄存器间接寻址,寻址空间:,指令的三种形式:,寄存器间接寻址:,Register Indirect Addressing,上页,下页,回目录,http:/,MOV R0
15、,A,例1:,;累加器传送指令,MOVX A,DPTR,例2:,“读”,“读”,上页,下页,回目录,http:/,5、基址寄存器加变址寄存器间接寻址,基址寄存器加变址寄存器间接寻址:,以DPTR或PC作基址寄存器,A作变址寄存器两者相加形成操作数地址。,寻址空间:,程序存储器(A+DPTR、A+PC),指令形式:,上页,下页,回目录,http:/,MOVC A,A+DPTR,例:,设(A)=0FH(DPTR)=2400H,“读”,“读”,MOVC A,A+DPTR,上页,下页,回目录,http:/,6、相对寻址,程序存储器,寻址空间:,指令的三种形式:,相对寻址,以当前PC值为基准地址,加上指
16、令的偏移量“rel”,结果为目标地址。rel为有符号补码数,范围:-128+127,一般为双字节或三字节指令,Relative Addressing,上页,下页,回目录,寻址指令执行地址目标地址,http:/,JNZ rel,例:,;累加器A不等零则转移 设:rel=23H,(PC)=2002H,rel=23H,修正后转移目标地址D(PC)=2025H,上页,下页,回目录,(PC)=2 0 0 2 H,Rel=2 3 H,),0,0,5,2,0,2,H,D=,http:/,(PC)=2112H,rel=F2H,修正后转移目标地址 D(PC)=2104H,上页,下页,回目录,例:DJNZ R7,
17、rel;(R7)1不为“0”则转,(PC)=2 1 1 2 H,Rel=F 2 H,),F,F,4,0,1,2,H,D=,http:/,7、位寻址,寻址空间:,片内RAM的20H2FH字节地址位地址:00H7FH 请参看图2-15 共128位,SFR中12个能被8整除的字节地址位地址请参看 图2-16 共93位,Bit Addressing,以访问触发器的方式,对内部RAM、SFR的位地址空间进行访问,称为位寻址。位地址用于布尔指令。,上页,下页,回目录,请参看 P43,专为布尔指令设计,http:/,寻址方式与相应的寻址空间,小结:,上页,下页,回目录,P67,http:/,3.3 指令系统
18、,3.3.0 指令分类,按指令的功能,MCS-51 指令系统可分为下列 5 类:(1)数据传送;(29条)(2)算术运算;(24条)(3)逻辑运算;(24条)(4)位操作;(17条)(5)控制转移。(17条),http:/,3.3.1 数据传送类指令(29条),图 3 1 MCS-51传送指令示意图,http:/,表 3-2 数据传送类指令一览表,http:/,表 3-2 数据传送类指令一览表,http:/,1.数据传送到累加器A的指令 MOV A,Rn MOV A,direct MOV A,Ri MOV A,data 这组指令的功能是:把源操作数的内容送入累加器A。例如:MOV A,10H,
19、该指令执行时将立即数 10H送入累加器A中。,注意:数据传送指令一般不影响状态标志位(PSW:CY,AC,RS1,RS0,OV,P),但累加器A中1的个数影响P位。,http:/,2.数据传送到工作寄存器Rn的指令 MOV Rn,A MOV Rn,direct MOV Rn,data 这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0 确定,可以是 00H07H、08H0FH、10H17H、18H1FH。例如:MOV R0,A,若当前RS1、RS0 设置为 00(即工作寄存器 0 区),执
20、行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。,http:/,3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令 MOV direct,A MOV direct,Rn MOV direct,direct;功能较强;如:mov 02h,03h。但MOV R2,R3在WAVE6000中通不过(mov 02h,03h可以)MOV direct,Ri MOV direct,data;如:MOV SP,#30H MOV Ri,A MOV Ri,direct MOV Ri,data MOV DPTR,data16,http:/,比较:8086汇编:MOV 1000H
21、,33H;MOV 1000H,2000H 都是不合法的指令。MCS-51汇编:MOV 00H,#30H;MOV 32H,39H 都是正确的。,http:/,例3-3,设(70H)=60H,(60H)=20H,P1口为输入口,P1口当前的状态为AAH。分析下面程序的结果。MOV R0,#70H MOV A,R0 MOV R1,A MOV B,R1 MOV R0,P1,http:/,4.累加器A与外部数据存储器之间的传送指令 MOVX A,DPTR;读 MOVX A,Ri;读 MOVX DPTR,A;写 MOVX Ri,A;写 注:与外部存储器(数据或程序)或I/O口进行数据传送时,必须经过累加器
22、A;当访问外部RAM时,只能使用R0、R1及DPTR作为地址指针。,http:/,例:将片外RAM 120H单元的内容传送到片外RAM 地址为78H的单元。,MOV DPTR,#0120H,MOVX A,DPTR,MOV R0,#78H,MOVX R0,A,例:将片内RAM 12H单元的内容传送到片内RAM 地址为78H的单元。,MOV 78H,12H,;外部RAM送累加器A,;累加器内容送外RAM,http:/,5.堆栈操作指令 PUSH direct POP direct 在MCS-51 单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它
23、指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP指出的内部RAM单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减 1。,http:/,例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为 60H。则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH执行后,SP内容修改为 64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前,如下程序段(SP保持
24、64H不变),http:/,POP DPH POP DPL POP ACC POP PSW执行之后,SP内容修改为 60H,而64H、63H、62H、61H单元中的内容依次弹出到DPH、DPL、A、PSW中。MCS-51 提供一个向上升(“向上生长”)的堆栈,因此SP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。,http:/,6.程序存储器内容送累加器 MOVC A,A+PC(PC固定)MOVC A,A+DPTR(DPTR可变)这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和 PC的内容(下
25、一条指令的起始地址)相加后得到一个 16 位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器和PC的状态,只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的 256 个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。,只读!,http:/,第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个 16 位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在 64
26、KB程序存储器中任意安排,并且一个表格可以为各个程序块所共用。,http:/,例题,设从程序存储器的TABLE开始存放09的平方值,设A中存放09间的某数。分析程序:MOV DPTR,#TABLE MOVC A,A+DPTR;改用MOVC A,A+PC指令行不行?为什么?XCH A,R0(占1B空间)RET(占1B空间)TABLE:DB 0,1,4,9,16,25,36,49,64,81,http:/,7.字节交换指令 XCH A,Rn XCH A,Ri XCH A,direct XCHD A,Ri;A03 Ri03 SWAP A;A03 A47 前三条指令是将累加器A的内容和源操作数内容相互
27、交换;后两条指令是半字节交换指令,最后一条指令是将累加器A的高 4 位与低 4 位之间进行交换,而另外一条指令是将累加器 A 的低 4 位内容和(Ri)所指出的内部RAM单元的低 4 位内容相互交换。,http:/,例 题,例:(A)=80H,(R7)=97H执行:XCH A,R7结果:(A)=97H,(R7)=80H例:将片内RAM 60H单元与61H单元的数据交换。XCH 60H,61H 对吗?例:(R0)=60H,(60H)=3EH,(A)=59H执行:XCHD A,R0结果:(A)5E H(60H)39 H,http:/,应用举例1,MOV P1,#0FEH;11111110B可以使P
28、1.0上的发光二极管点亮MOV P1,#0F0H;11110000B可以使P1口上的上面4个发光二极管点亮,http:/,8段数码管显示,MOV P1,#00H;显示 8.MOV P1,#0F8H;显示 7MOV P1,#88H;显示 A,http:/,应用举例2,一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。,http:/,3.3.2 算术运算类指令(24条)(除个别INC、DEC指令只影响P位外,其它指令一般都影响标志位。),表 3-4 算术运算指令,http:/,表 3-4 算术运算指令,http:/,表 3.3 影响标志位的指令,注:表示对该标志位会
29、产生影响,0或1表法对该标志位置0或1,http:/,表 3.3 影响标志位的指令,http:/,一、加法指令,1.普通加法指令 ADD A,Rn;A(Rn)+(A)ADD A,direct ADD A,Ri ADD A,data 注意:判断无符号数的运算结果是否正确看CY位;判断带符号数的运算结果是否正确看OV 位。,http:/,例如:+120 和+100 之和为 220,显然大于 127,相加时,0 1 1 1 1 0 0 0 120(补码,78H)0 1 1 0 0 1 0 0 100(补码,64H)1 1 0 1 1 1 0 0 220,+,符号位(最高位)由 0 变 1,两个正数相
30、加结果变负,实际上它是和数的最高位,符号位移入了进位标志,此时位 6 有进位而位 7 无进位,置位溢出标志OV,结果溢出。,CY=0,DF=1,故OV=1溢出!,http:/,同样,120和100 相加,结果应为220,显然小于128,相加时,1 0 0 0 1 0 0 0-120的补码1 0 0 1 1 1 0 0-100的补码,+,1 0 0 1 0 0 1 0 0-220的补码,符号位由1变为0,两个负数相加结果变为正数,这是因为符号位移入进位标志,位 6 无进位而位 7 有进位,置位溢出标志OV,由此可判断结果溢出。,CY=1,DF=0,故OV=1溢出!,http:/,2.带进位加法指
31、令 ADDC A,Rn;A(Rn)+(A)+(C)Y ADDC A,direct ADDC A,Ri ADDC A,data 这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。,http:/,3.增量指令(除INC A影响P位外,其它不影响任何标志)INC A INC Rn INC direct INC Ri INC DPTR 最后一条指令是对16 位的数据指针寄存器DPTR执行加 1 操作,指令执行时,先对低 8 位指针 DPL的内容加 1,当产生溢出时就对高 8 位指针DPH加 1,但不影响任
32、何标志。,http:/,4.十进制调整指令 DA A 这条指令对累加器A参与的BCD码加法运算所获得的 8 位结果进行十进制调整,使累加器A中的内容调整为二位压缩型 BCD码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。执行该指令时,判断 A中的低4 位是否大于 9 和辅助进位标志 AC是否为“1”,若两者有一个条件满足,则低 4 位加 6 操作;同样,A中的高 4 位大于 9 或进位标志 Cy为“1”两者有一个条件满足时,高 4 位加 6 操作。例如:有两个 BCD数 36 与 45 相加,结果应为 BCD码 81,程序如下:,http
33、:/,MOV A,36HADD A,45HDA A,这段程序中,第一条指令将立即数36H(BCD码36)送入累加器A;第二条指令进行如下加法:,0 0 1 1 0 1 1 0 360 1 0 0 0 1 0 1 45,0 1 1 1 1 0 1 1 7B0 0 0 0 0 1 1 0 06,+,+,1 0 0 0 0 0 0 1 81,得结果 7BH;第三条指令对累加器 A进行十进制调整,低 4 位(为 0BH)大于 9,因此要加 6,得调整的 BCD码 81。,http:/,二、减法指令 1.带进位减法指令 SUBB A,Rn;A(A)-(Rn)-(cy)SUBB A,direct SUBB
34、 A,Ri SUBB A,data 这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减,结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位,则进位标志Cy置“1”,否则清“0”;如果位 3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”;如位 6 有借位而位 7 没有借位,或位 7 有借位而位 6 没有借位,则溢出标志OV置“1”,否则清“0”。若要进行不带借位的减法操作,则必须先将Cy清“0”。,http:/,例3-12,双字节无符号数减法,被减数分别在31H,30H中,减数分别在41H,40H单元中,差存于31H,30H单元中.CLR C MOV A,30HS
35、UBB A,40HMOV 30H,AMOV A,31HSUBB A,41HMOV 31H,A,http:/,2.减1指令(除DEC A影响P位外,其它不影响任何标志)DEC A DEC Rn DEC direct DEC Ri 注:没有专门的DEC DPTR 指令,要实现其功能可编程实现。,http:/,三.乘法指令(Multiplication),MUL AB;(A)(B)低8位A 高8位B A、B中都是无符号整数 如果积大于255,OV1,否则OV0;进位标志总是清零 Cy0。注意P91的例3-13中的:ADDC A,#0指令的用法。,http:/,四.除法指令(Division),DIV
36、 AB;(A)(B)商 A 余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0;进位标志总是清零 Cy0。,http:/,3.3.3 逻辑运算指令,除带进位的循环指令RRC、RLC对标志位有影响外,其它指令不影响标志位。,http:/,http:/,1.简单逻辑操作指令,CLR A;A“0”CPL A;A A SWAP A;A03 A47例:(A)=3AH,CPL A,(A)=0C5H 0011 1010B 1100 0101B(A)=3AH,SWAP A,(A)=0A3H 注:指令SWAP,也可看成一个4位循环移位指令,不影响标志位。,http:/,2.循环指令,(1)、
37、左循环指令(Rotate Accumulator Left)RL A;左移1位 例(A)6CH=0110 1100B RL A(A)=1101 1000B=0D8H,http:/,(2)、带进位左循环指令(Rotate Accumulator Left through Carry flag),RLC A;左移1位,对标志位CY有影响 例(A)6CH=0110 1100B,(C)=1 RLC A(A)=1101 1001B=0D9H,(C)=0,http:/,(3)、右循环指令(Rotate Accumulator Right),RR A;右移1位例(A)6CH=0110 1100B RR A(
38、A)=0011 0110B=36H,http:/,(4)、带进位右循环指令(Rotate A Right with C),RRC A;右移1位,对标志位CY有影响例(A)6CH=0110 1100B,(C)=1 RRC A(A)=1011 0110B=0B6H,(C)=0,这组指令除了带进位标志位的移位指令外,其它都不影响Cy,AC,OV等标志。,http:/,3.逻辑与指令,ANL A,Rn ANL A,direct ANL A,dataANL A,RiANL direct,AANL direct,data“与”,“有0即0,全1为1”0000 0111)1111 1101 0000 010
39、1 B 05H,X0=0;X1=X,XX=X,http:/,4.逻辑或指令,ORL A,Rn ORL A,direct ORL A,dataORL A,RiORL direct,AORL direct,data“或”,“有1即1,全0为0”0000 0110)0110 1101 0110 1111 B 6FH,X0=X;X1=1,XX=X,http:/,5.逻辑异或指令,XRL A,Rn XRL A,direct XRL A,dataXRL A,RiXRL direct,AXRL direct,data“异或”,“相异为1,相同为0”0000 0110)0110 1101 0110 1011
40、B 6BH,XX=0,http:/,例(A)=01B,表示随机状态,为1或0,执行下述一组指令执行后A的值如何?XRL A,#0C0H;将累加器A的内容D7、D6取反 0 1 ORL A,#03H;将累加器A的内容D1、D0置1 1 1 0 0 0 0 0 0(C0H)ANL A,#0E7H;将累加器A的内容D4、D3清0 1 0 0 0 0 0 0 0 1 1(03H)1 0 1 1 1 1 1 0 0 1 1 1(E7H)1 0 0 0 1 1 解:执行上述指令后,(A)=100011B。,习题1:如何将累加器A中的数据高4位清0,低位不变?习题2:如何将寄存器R2中的数据奇数位取反,偶数
41、位不变?,1、ANL A,#0FH,2、XRL R2,#10101010B,http:/,3.3.4 控制转移指令(17条),单片机有一定的智能作用,主要是控制转移类指令的功劳。由于该类指令用于控制程序的走向,所以其作用必然是在程序存贮器的空间内。,http:/,表 3-7 控 制 转 移 指 令,http:/,一、无条件转移指令,1.(绝对)短跳转指令(2字节指令)AJMP addr11;PCaddr11,跳转范围2k(211=2K)这是2KB范围内的无条件跳转指令,执行该指令时,先将PC+2(因该指令是2个字节的指令),然后将addr11送入PC10PC0,而PC15PC11保持不变。这样
42、得到跳转的目的地址。需要注意的是,目标地址与AJMP后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。例:判断下列指令是否正确?(1)、地址 指令 0345H AJMP 0123H(2)、2567H AJMP 29ABH(1).(PC+2)=0347H 二进制码为:0000 0011 0100 0111B 0123H 二进制码为:0000 0001 0010 0011B(2).(PC+2)=2569H 二进制码为:0010 0101 0110 1001B 29ABH 二进制码为:0010 1001 1010 1011B,解:,http:/,2.长跳转指令(3字节指令)LJMP a
43、ddr16;PCaddr16,跳转范围64k 执行该指令时,将 16 位目标地址addr16 装入PC,程序无条件转向指定的目标地址。转移的目标地址可以在 64 KB程序存储器地址空间的任何地方,不影响任何标志。,3.散转指令(间接跳转指令)(1字节指令)JMP A+DPTR;PC(A)(DPTR)执行该指令时,把累加器 A中的8 位无符号数与数据指针中的 16 位数相加,结果作为下条指令的地址送入PC,不改变累加器A和数据指针DPTR的内容,也不影响标志。利用这条指令能实现程序的散转。,http:/,4.相对转移指令(与转移指令所在的位置有关)(2字节指令)SJMP rel;PC(PC)+2
44、,PC(PC)+rel 执行该指令时,先将 PC+2,再把指令中带符号的偏移量加到PC上,得到跳转的目标地址送入PC。,rel机器码的相对偏移量,为8位补码,转移范围:前128后127字节。rel(目的地址转移指令地址转移指令字节数)补(目的地址PC当前值)补。注:编程时,可用标号代替转移目的地址,rel 交给编译程序计算,注意转移范围。例(1):SJMP NEXT(或AJMP NEXT,SJMP NEXT)NEXT:例(2):原地踏步指令的指令:HERE:SJMP HERE常写成:SJMP$;($地址计算器的值,为正在汇编的指令的地址),http:/,二、条件转移指令 JZ rel;(A)=
45、0 转移 JNZ rel;(A)0 转移 这类指令是依据累加器A的内容是否为 0 的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的 256 个字节范围之内(128+127)。当条件满足时,PC(PC)+N+rel,其中(PC)为该条件转移指令的第一个字节的地址,N为该转移指令的字节数(长度),本转移指令N=2。注:编程时,可用标号代替转移目的地址。如:JZ LOOP,http:/,三、比较转移指令 在MCS-51 中没有专门的比较指令,但提供了下面 4 条比较不相等转移指令:CJNE A,direct,
46、relCJNE A,data,rel;(A)=#data,继续,C0(A)#data,转,C0(A)#data,转,C1 特点:(A)只有#data时,C1CJNE Rn,data,relCJNE Ri,data,rel 这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志Cy置“1”,否则清“0”,但不影响任何操作数的内容。如:CJNE A,#78H,LOOP,做减法运算,注意:该指令本质上是做减法运算,但不影响原来操作数的值。,http:/,四、减 1不为 0转移指令DJNZ
47、Rn,relDJNZ direct,rel;运行后对原来的操作数有影响。这两条指令把源操作数减 1,结果回送到源操作数中去,如果结果不为 0 则转移(转移地址的计算方法同前)。,例:延时子程序 delay:MOV R7,#03H;1T delay0:MOV R6,#19H;1T delay1:DJNZ R6,delay1;2T DJNZ R7,delay0;2T RET;2T,http:/,地址 机器码 源程序 注释 ORG 0000H;整个程序起始地址0000 02 00 30 LJMP MAIN;跳向主程序 ORG 0030H;主程序起始地址0030 C3 MAIN:CLR C;MAIN为
48、程序标号0031 E6 LOOP:MOV A,R00032 37 ADDC A,R10033 08 INC R00034 D9 FB DJNZ R1,LOOP;相对转移0036 80 02 SJMP NEXT0038 78 03 MOV R0,#03H003A 18 NEXT:DEC R0003B 80 FE SJMP$;HERE:SJMP HERE END;结束标记,偏移量的计算,http:/,五、调用及返回指令(保护断点与恢复,自动完成)在程序设计中,通常把具有一定功能的公用程序段编制成子程序,当主程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能
49、返回主程序继续执行。子程序调用指令(LCALL、ACALL)一定在主程序中,子程序返回指令RET一定在子程序中。,http:/,1.绝对调用指令(保护断点,2字节指令)ACALL addr11 这是一条2KB范围内的子程序调用指令。所用的子程序的入口地址必须与 ACALL下面一条指令的第一个字节在同一个 2 KB区域的存储器区内。,低8位先入,高8位后入,http:/,2.长调用指令 LCALL addr16(3字节指令)这条指令无条件调用位于 16 位地址addr16的子程序。执行该指令时,先将PC+3以获得下一条指令的首地址,并把它压入堆栈(先低字节后高字节),SP内容加 2,然后将 16
50、 位地址放入 PC中,转去执行以该地址为入口的程序。LCALL指令可以调用 64 KB范围内任何地方的子程序。指令执行后不影响任何标志。,低8位先入,高8位后入,http:/,3.子程序返回指令(恢复断点)RET 这条指令的功能是:恢复断点,将调用子程序时压入堆栈的下一条指令的首地址取出送入PC,使程序返回主程序继续执行。4.中断返回指令 RETI;这条指令的功能与RET指令相似,不同的是它还要清除MCS-51 单片机中断响应时所置位的优先级状态触发器。5.NOP空操作指令:不进行任何操作,占用1个机器周期,然后继续执行下一条指令。,高8位先出,低8位后出,http:/,例 题,设执行前(SP