指令系统与程序设计.ppt
,编程:,解决问题思想,程序框图,语句,指令,汇编语言及程序设计(第三章、第四章),指令系统:CPU所能执行的全部指令集合,3.1 指令系统概述,一条指令是计算机中具有特定功能的操作命令,程序与程序设计,按预定要求编排的指令序列称为程序。编排的过程称为程序设计,机器语言,二进制代码,是机器唯一能直接识别、执行的语言。,汇编语言:,指令助记符。用助记符,操作数,标号编写的程序称为汇编语言源程序。,一、汇编语言,汇编语言 机器语言 机器执行,程序设计语言,汇编语言,高级语言(PLM;Keil Cx51),翻译,汇编:完成由汇编语言到机器代码的过程,汇编的方法有两种:自动汇编、手工汇编,由机器代码到汇编语言的过程叫反汇编,汇编语言源程序,机器语言,汇编程序,反汇编程序,上页,下页,回目录,自动汇编:将输入到计算机中的源程序,由机器中一个软件将其翻译成机器代码的过程。这个翻译软件称为汇编程序。,二、汇编语言的格式,标号:操作码 操作数;注释,如:MAIN:MOV SP,#60H;设堆栈指针,1、标号,标号是该指令的符号地址,可根据需要设定,必须以字母开始,以“:”结束,长度不超过8个字符,系统中的保留字符不能作标号,如:SFR名、ADD等,标号可被其他语句的操作数可直接引用源程序中,一个标号只能定义一个语句,不能相重,保持一义性,上页,下页,回目录,一个汇编语句分为四个区段:,2、操作码,由指令系统的助记符、伪指令助记符组成。,操作码指出该指令将进行何种操作,3、操作数:参加操作的数的本身或操作数所在的地址,可为二进制数(B)、十进制数(D)、十六进制数(H),HEX:数字大于9,则数字应以“0”开头,如0FAH,可以是操作数地址、立即数、标号、表达式如 M+3,目的操作数和源操作数之间用“,”分开,可以是寄存器名如A、B、R0R7、DPTR,上页,下页,回目录,4、注释,以“;”开头,是程序员对指令操作的解释,以帮助阅读、理解程序的意义,可有可无,建议进行程序注释,汇编时对这部分不予处理,不译成任何机器代码,可用英语或某种简洁的方式解释指令,上页,下页,回目录,三、伪指令,伪指令仅在汇编程序中起控制作用,不产生可执行目标代码。,1、起点指令 ORG,格式:,ORG H,功能:,指定程序或数据块的起始地址,例:,用法:,一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令,上页,下页,回目录,2、结束命令 END,格式:END,功能:汇编程序结束标志,附在一个源程序的结尾 一个源程序只能出现一次END指令,3、定义字节命令 DB,格式:,功能:,标号:DB 字节常数或字符,定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元,用法:,上页,下页,回目录,例:,伪指令ORG 定义了TAB的起始地址为8000H,伪指令DB定义了8000H8003单元的内容依次为:,(8000H)=45H,(8001H)=49H;73,(8002H)=35H;5,(8003H)=41H;A,(8004H)=05H;101B,TAB,TAB1,(1)由 ORG定义,(2)跟在其他源程序之后,上页,下页,回目录,4、定义字命令DW,格式:,功能:,标号:DW 字或字表,定义若干个字(双字节),例:,ORG 8000H,TAB:DW 7234H,8AH,10,(8000H)=72H,(8001H)=34H,(8002H)=00H,(8003H)=8AH,(8005H)=0AH,汇编后:,(8004H)=00H,上页,下页,回目录,5、定义空间命令 DS,格式:,功能:,标号:DS 数据或字符及表达式,例:,(8008H)=30H,(8009H)=8AH,从指定单元地址开始,由数据或字符及表达式的值来定义应保留的单元数,备用,即:8000H8007H单元保留备用,定义空间,上页,下页,回目录,6、等值命令 EQU,格式:,字符名称 EQU 数据或汇编符号,功能:,将一个数据或汇编符号赋予标号段规定的字符,例:,JIASHU EQU 30HBEIJIA EQU 31HHE EQU 32H,上页,下页,回目录,7、数据地址赋值命令 DATA,格式:,字符名称 DATA 数据或表达式,功能:,此命令把数据/代码地址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义,INDEXJ DATA 8389H,;INDEXJ这个字符名称的地址为8389H,例:,上页,下页,回目录,等价于,EQU与 DATA的区别,(1)DATA与EQU相似,但DATA定义的字符名称,可先使用后定义,EQU则不能,(2)EQU指令可把汇编符号赋给字符名称,DATA则不能,(3)DATA可把表达式的值赋给字符名称,EQU则不能,DATA常在程序中定义数据地址EQU常在程序中定义字符数据,上页,下页,回目录,8、位地址符号命令 BIT,格式:,字符名称 BIT 位地址,功能:,把位地址赋予一标号,;P1.0,P2.0位地址赋予字符A1、A2,在编程时可以直接把 A1、A2 当成位地址使用,上页,下页,回目录,三、MCS-51指令系统的特点,1、执行速度快,存储效率高,MCS-51指令系统共有111条指令,按字节分,单字节指令49条,双字节指令45条,三字节指令17条,按周期分,单周期指令64条,双周期指令45条,四周期指令2条,设时钟频率为12MHz,则指令执行的时间分别为:,1s 58,2s 40,4s 2,影响程序存储器,影响系统实时性,上页,下页,回目录,2、指令易掌握,功能强,3、适合于控制、智能仪表,布尔处理机,可进行“位”操作。,上页,下页,回目录,四、寻址方式(7种),立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,上页,下页,回目录,数据传送(29条),算术运算(24条),逻辑运算(24条),控制转移(17条),布尔处理(17条),上页,下页,回目录,介绍描述指令符号的意义,当前选中的寄存器区的8个工作寄存器(R0R7),Rn,Ri,direct,-8位内部RAM单元地址 00H7FH,专用特殊功能寄存器SFR的地址80HFFH,立即数(8位),#data,#data16,立即数(16位),当前选中的寄存器区中可做间址寄存器的2个 工作寄存器(R0、R1)i=0、1,n=07,上页,下页,回目录,addr16,16位目的地址,用于LCALL、LJMP指令 地址范围64KB ROM空间,addr11,11位目的地址,用于ACALL、AJMP指令 地址范围2KB ROM空间,rel,DPTR,数据地址指针,可做16位间址寄存器,bit,内部RAM或SFR中的直接位寻址,上页,下页,回目录,C,位累加器(PSW.7),进位/借位标志,间址或基址寄存器前缀,如 Ri,A+DPTR,/,位操作的前缀,表示对该位操作数取反,(X),X中的内容,((X)),由X寻址的单元中的内容,箭头左边的内容被箭头右边的内容所代替,DPTR,A+PC,上页,下页,回目录,3.2 MCS-51指令的寻址方式,用何种方式寻找指令的操作数或指令的执行地址,1、立即寻址,寻址空间:,指令形式:,程序存储器,指令操作数以指令形式存放在程序存储器中.,即:操作码后面的一个字节是实际操作数,立即寻址:,用何种方式寻找,OP#data,上页,下页,回目录,指令的寻址方式:,指令的寻址方式:,MOV A,#30H,例1:,操作码,立即数,MOV DPTR,#8000H,例2:,操作码,立即数的高8位,立即数的低8位,80H,00H,上页,下页,回目录,2、直接寻址,寻址空间:,指令的三种形式:,直接寻址,直接寻址是访问 SFR 的唯一方法,上页,下页,回目录,00H7FH80HFFH,CPU内部,上页,下页,回目录,MOV A,30H,例1:,操作数地址,ANL 30H,#30H,例2:,3、寄存器寻址,寻址空间:,指令的三种形式:,实际操作数是当前选定的寄存器的内容,MOV A,R3,例1:,ADD A,R3,例2:,寄存器寻址:,上页,下页,回目录,4、寄存器间接寻址,寻址空间:,指令的三种形式:,寄存器间接寻址:,指令选定的寄存器内容就是实际,的操作数地址,操作数地址由寄存器间接给出,上页,下页,回目录,MOV R0,A,例1:,;累加器传送指令,上页,下页,回目录,MOV R0,#30H,5、基址寄存器加变址寄存器间接寻址(变趾寻趾),基址寄存器加变址寄存器间接寻址:,以DPTR或PC作基址寄存器,A作变址寄存器两者相加形成操作数地址。,寻址空间:,程序存储器(A+DPTR、A+PC),指令形式:,上页,下页,回目录,MOV DPTR,#2400HMOV A,#0FHMOVC A,A+DPTR,例:,“读”,“读”,MOVC A,A+DPTR,上页,下页,回目录,6、相对寻址,程序存储器,用于程序控制,寻址空间:,指令的三种形式:,相对寻址,以当前PC值为基准地址,加上指令的偏移量“rel”,结果为目标地址。rel为有符号补码数,范围:-128+127,一般为双字节或三字节指令,上页,下页,回目录,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=,7、位寻址,寻址空间:,片内RAM的20H2FH字节地址,SFR中12个能被8整除的字节地址,对内部RAM、SFR的位地址空间进行访问,称为位寻址。位地址用于布尔指令。,上页,下页,回目录,寻址方式与相应的寻址空间,小结:,3.3 MCS-51 指令系统介绍,MCS-51系统指令系统共111条,按操作功能分类:,数据传送类,算术运算类,逻辑运算类,控制转移类,布尔处理类,上页,下页,回目录,111条基本指令衍生出255种指令代码00H0FFH(0A5H没有定义),例如:MOV A,Rn(n:07)对应指令代码:E8HEFH,学习指令要点:1、掌握指令操作;2、掌握指令的寻址方式;3、掌握指令对程序状态字(PSW)的影响;4、合理使用指令。,一、数据传送类(29条),用到的指令助记符有5种:,片内传送 MOV,片外传送 MOVX,查表传送 MOVC,累加器交换 XCH、XCHD、SWAP,堆栈操作 PUSH、POP,上页,下页,回目录,一般的操作是把源操作数传送到目的操作数。指令执行后,源操作数不变,目的操作数修改为源操作数。,数据传送指令不影响PSW各位(奇偶位除外),只有堆栈操作可直接修改PSW。,1、MOV类传送指令,格式:MOV 目的字节 源字节,功能:把源字节内容送目的字节,源字节内容不变,以累加器A为目的字节的传送:,立即数送累加器,MOV A,#data,;立即数#data送累加器A,上页,下页,回目录,寄存器内容送累加器,MOV A,Rn(n=07),内部RAM或SFR内容送累加器,MOV A,direct,;Rn的内容送累加器A,;以direct为地址的单元的内容送累加器A,上页,下页,回目录,例:MOV R0,#30H MOV A,R0,例:MOV 30H,#55H MOV A,30H,内部RAM内容送累加器,MOV A,Ri(i=0、1),如:MOV 30H,#88H MOV R0,#30H MOV A,R0,;以Ri内容为地址单元中的数送累加器A,以Rn为目的字节的传送:,立即数送寄存器,MOV Rn,#data(n=07),;立即数#data送累加器 Rn,上页,下页,回目录,如:MOV R0,#67H;MOV R7,#0F0H,累加器内容送寄存器Rn,MOV Rn,A(n=07),;累加器A的内容送Rn,内部RAM或SFR内容送寄存器Rn,MOV Rn,direct(n=07),如:MOV R1,30H;MOV R2,60H,;以direct为地址的单元的内容送寄存器Rn,上页,下页,回目录,如:MOV R0,A;MOV R5,A,立即数送内部RAM或SFR,MOV direct,#data,;立即数#data送以direct为地址的单元,如:MOV 30H,#45;(30H)45,累加器内容送内部RAM或SFR,MOV direct,A,;累加器送以direct为地址的单元,如:MOV 45H,A;(45H)A,直接地址为目的字节的传送:,寄存器内容送内部RAM或SFR,MOV direct,Rn(n=07),;寄存器Rn内容送以direct为地址的单元,如:MOV 56H,R6;56H(R6),内部RAM或SFR之间直接传送,MOV direct1,direct2,;内部RAM或SFR任意两个单元之间传送数据,例:MOV 30H,31H;30H(31H),上页,下页,回目录,内部RAM数据送内部RAM或SFR,MOV direct,Ri(i=0、1),例:MOV 20H,R0;20H(R0),;以Ri内容为地址单元中的数送内RAM或SFR,立即数送内部RAM,MOV Ri,#data(i=0、1),;立即数#data送以Ri内容为地址的单元,例:MOV R1,#30;(R1)#30,上页,下页,回目录,累加器内容送内部RAM,MOV Ri,A(i=0、1),;累加器内容送以Ri内容为地址的单元,例:MOV R0,A;(R0)A,内部RAM或SFR数据送内RAM,MOV Ri,direct(i=0、1),例:MOV R1,56H;(R1)(56),;以direct为地址的单元内容送Ri内容为地址的单元,上页,下页,回目录,16位立即数传送指令,MOV DPTR,#data16,;16位立即数送DPTR中,设置地址指针。,例:MOV DPTR,#3000H;DPH#30H;DPL#00H,上页,下页,回目录,MOV类传送指令小结,上页,下页,回目录,MOV 片内传送指令,机器周期数,1,1,1,1,1,1,1,P364367,MOV类传送指令小结,上页,下页,回目录,MOV 片内传送指令,Ri,direct,Rn,#data,ACC,传送指令在片内数据存储器中传送操作,例:将片内RAM 30H单元的内容传送到片内RAM 地址为78H的单元。,MOV 78H,30H,例:将片内RAM 地址为30H、31H单元的内容传送到片内RAM 地址为80H、81H单元中。,MOV R0,#80HMOV R0,30HMOVR0,#81HMOV R0,31H,例:将片内RAM 地址为80H、81H单元的内容传送到片内RAM 地址为90H、91H单元中。,MOV R0,#81HMOV A,R0MOVR1,#91HMOV R1,A,MOV R0,#80H;指向源地址MOV A,R0;取出数据,MOVR1,#90H;指向目的地址MOV R1,A;进行数据传送,属于简单程序的设计,其特点:,既无分支,又无循环,按照顺序执行,可完成一定的基本功能,是编写复杂程序的基础,高128字节存储器的数据传送,采用间接寻址方式,2、MOVX类传送指令,累加器A与外部RAM传送数据用 MOVX,外部RAM内容送累加器A,MOVX A,Ri(i=0、1),例:MOV P2,#30H MOV R0,#00H MOVX A,R0,;以Ri内容为外部RAM地址的单元中的数送A,外部数据存储器读指令。高8位地址由P2给出。,累加器内容送外RAM,MOVX Ri,A(i=0、1),;累加器内容送以Ri内容为地址的外部RAM单元,外部数据存储器写指令。,上页,下页,回目录,外部RAM送累加器A:读外部RAM单元内容,MOVX A,DPTR,;以DPTR内容为地址的外部RAM单元中的数送A,累加器内容送外RAM:写数据到外部RAM单元,MOVX DPTR,A,;累加器内容送以DPTR内容为地址的外部RAM单元,例:将3000H内容送入3100H中 MOV DPTR,#3000H MOVX A,DPTR MOV DPTR,#3100H MOVX DPTR,A,MOVX类传送指令小结,MOVX 片外传送指令,例:将片外RAM 120H单元的内容传送到片外RAM 地址为0078H的单元。,MOV DPTR,#0120H,MOVX A,DPTR,MOVX DPTR,A,;外部RAM送累加器A,;累加器内容送外RAM,上页,下页,回目录,MOV DPTR,#0078H,3、MOVC类传送指令,MOVC为程序存储器传送指令,均为基址加变址寄存器寻址。,MOVC A,A+DPTR,以DPTR作基址加变址寻址,上页,下页,回目录,长查表指令,MOVC A,A+PC,以PC作基址加变址寻址,上页,下页,回目录,短查表指令,MOVC类传送指令小结,指令助记符,说 明,字 节,1,1,MOVC A,A+DPTR,MOVC A,A+PC,以DPTR作基址加变址寻址,以PC作基址加变址寻址,上页,下页,回目录,MOV DPTR,#PFTAB MOV A,#03H MOVC A,A+DPTR SJMP$,例:根据累加器 A中的数(09),查找对应的平方值。,PFTAB:DB 0,1,4,9,16,25 DB 36,49,64,81;数0-9的平方表 END,ORG 0000H LJMP MAIN ORG 0030HMAIN:MOV SP,#60H,09H,;设(A)=03H,查“3”的平方,上页,下页,回目录,4、XCH、XCHD、SWAP类传送指令,寄存器内容与累加器内容交换,XCH A,Rn(n=07),内部RAM或SFR内容与累加器内容交换,XCH A,direct(n=07),上页,下页,回目录,内RAM内容与累加器内容交换,XCH A,Ri(i=0,1),内部RAM内容低4位与累加器低4位内容交换,XCHD A,Ri(i=0,1),上页,下页,回目录,累加器A高4位与低4位交换,SWAP A,上页,下页,回目录,例:MOV A,#56H SWAP A,交换类传送指令小结,上页,下页,回目录,5、堆栈操作指令,进栈指令,PUSH direct,第2步:direct地址单元的内容压入SP指向的单元,出栈指令,POP direct,第1步、SP指向的单元内容弹出到以direct为地址的单元中,上页,下页,回目录,例:堆栈操作 设(A)=55H,(B)=3FH,建立堆栈,压入操作,弹出操作,55H,3FH,MOV SP,#60H,PUSH A,PUSH B,POP PSW,结果:PSW的内容3FH,SP的内容为61H,上页,下页,回目录,PSW,3FH,二、算术运算类(24条),用到的指令助记符有8种:,加法指令 ADD带进位加法指令:ADDC带进位的减法指令:SUBB 增1指令:INC减1指令:DEC乘除指令 MUL除法指令:DIV十进制加法调整指令:DA,算术运算类指令执行结果影响标志位:CY、AC、OV,上页,下页,回目录,1、不带进位加ADD,累加器内容加立即数,ADD A,#data,累加器内容加寄存器内容,ADD A,Rn(n=07),上页,下页,回目录,例:计算12H+34H:MOV A,#12H ADD A,#34H,例:MOV A,#12HMOV R0,#34HADD A,R0,累加器内容加内部RAM内容,ADD A,Ri(i=0,1),累加器内容加内部RAM内容或SFR,ADD A,direct,上页,下页,回目录,ADD类指令小结,上页,下页,回目录,2、带进位加ADDC,累加器内容加立即数 加进位位,ADDC A,#data,累加器内容加寄存器内容加进位位,ADDC A,Rn(n=07),上页,下页,回目录,累加器内容加内RAM内容加进位位,ADDC A,Ri(i=0,1),累加器内容加内RAM内容或SFR加进位位,ADDC A,direct,上页,下页,回目录,ADDC类指令小结,上页,下页,回目录,3、增量INC,累加器内容加“1”,INC A,寄存器内容加“1”,INC Rn,上页,下页,回目录,内RAM或SFR内容加“1”,INC direct,内RAM内容加“1”,INC Ri,上页,下页,回目录,数据指针DPTR内容加“1”,INC DPTR,INC 指令中除 INC A 指令影响 P 标志位,其余指令不影响任何标志位,上页,下页,回目录,INC类指令小结,上页,下页,回目录,注意:ADD A,#1;INC A;ADDC A,#1 区别,4、十进制调整指令,DA A,;对累加器A,作BCD码加法后进行“过9补6”调整,注意:DA 指令不能对BCD码减法的结果进行调整,上页,下页,回目录,5、减法指令SUBB,累加器减立即数和借位标志,SUBB A,#data,累加器减寄存器内容和借位标志,SUBB A,Rn(n=07),上页,下页,回目录,累加器减RAM内容和借位标志,SUBB A,Ri(i=0,1),累加器内容减内RAM内容或SFR和借位标志,SUBB A,direct,上页,下页,回目录,SUBB类指令小结,上页,下页,回目录,双字节求补设:两个字节原码数存在R1、R0中求补后结果,存在R3、R2中。,例4-3:P122,上页,下页,回目录,程序:,CLR C,CLR A,SUBB A,R0,MOV R2,A,CLR A,SUBB A,R1,ORG 0000H,MOV R3,A,SJMP$,END,;低字节求补,;送R2,;A清零,;高字节求补,;送R3,双字节求补设:两个字节原码数存在R1、R0中求补后结果,存在R3、R2中。,例4-3:P122,6、减量 DEC,累加器内容减“1”,DEC A,寄存器内容减“1,DEC Rn,上页,下页,回目录,内RAM或SFR内容减“1,DEC direct,内RAM内容减“1,DEC Ri,上页,下页,回目录,DEC 类指令小结,上页,下页,回目录,7、MUL,MUL A B,DIV A B,8、DIV,CY=0,上页,下页,回目录,MOV A,20HMOV B,#10HDIV AB,MOV A,BADD A,#30HMOV 22H,A,ADD A,#30HMOV 21H,A,ORG 0000H,SJMP$,END,例4-2:将一个字节内的压缩BCD码拆开并变成ASCII码,存入两个RAM单元。BCD码放在内部RAM的20H,转换后高半字节放到21H,低字节放22H。,采用除10H取余法将两个BCD数拆开,BCDH BCDL,三、逻辑运算类(24条),用到的指令助记符有9种:,包括与、或、异或、清除、求反、移位等操作,ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC,上页,下页,回目录,1、逻辑与ANL(6条),累加器内容逻辑与立即数,ANL A,#data,累加器内容逻辑与寄存器内容,ANL A,Rn(n=07),上页,下页,回目录,累加器内容逻辑与内RAM内容,ANL A,Ri(i=0,1),累加器内容逻辑与内RAM内容或SFR,ANL A,direct,上页,下页,回目录,累加器内容逻辑与内RAM或SFR,ANL direct,A,立即数逻辑与RAM或SFR,ANL direct,#data,上页,下页,回目录,ANL 类传送指令小结,上页,下页,回目录,2、逻辑或 ORL(6条),累加器内容逻辑或立即数,ORL A,#data,累加器内容逻辑或寄存器内容,ORL A,Rn(n=07),上页,下页,回目录,累加器内容逻辑或内RAM内容,ORL A,Ri(i=0,1),累加器内容逻辑或内RAM内容或SFR,ORL A,direct,上页,下页,回目录,累加器内容逻辑或内RAM或SFR,ORL direct,A,立即数逻辑或RAM或SFR,ORL direct,#data,上页,下页,回目录,ORL 类传送指令小结,上页,下页,回目录,3、逻辑异或XRL(6条),累加器内容逻辑异或立即数,XRL A,#data,累加器内容逻辑异或寄存器内容,XRL A,Rn(n=07),上页,下页,回目录,累加器内容逻辑异或内RAM内容,XRL A,Ri(i=0,1),累加器内容逻辑异或内RAM内容或SFR,XRL A,direct,上页,下页,回目录,累加器内容逻辑异或内RAM或SFR,XRL direct,A,立即数逻辑异或RAM或SFR,XRL direct,#data,上页,下页,回目录,XRL类传送指令小结,上页,下页,回目录,例:根据累加器中40的状态修改P1端口位40的状态,ANL A,#00011111B,ANL P1,#11100000B,ORL P1,A,;A屏蔽前3位,保留后5位,;A的后5位是“1”,使P1口 相应位置“1”,P1前3位不变,;P1屏蔽后5位,保留前3位,上页,下页,回目录,仅修改了 P1 口的后 5 位,“读”“修改”“写”,4 累加器清除与求反指令(2条),累加器A清零,CLR A,累加器A按位取反,CPL A,上页,下页,回目录,4 移位指令(4条),累加器内容循环左移一位,RL A,累加器内容连同进位标志循环左移一位,RLC A,CY,上页,下页,回目录,累加器内容循环右移一位,RR A,累加器内容连同进位标志循环右移一位,RRC A,CY,上页,下页,回目录,移位指令小结,累加器清除与求反指令小结,上页,下页,回目录,例:设(A)=5AH、CY=1,RL A,RLC A,RR A,RRC A,;(A)=B4H,;(A)=2DH,;(A)=B5H,;(A)=ADH,01011010,01011010,0,1,0,1,0,0,上页,下页,回目录,四、控制转移指令(17条),控制转移指令共有17条:,无条件转移指令,条件转移指令,子程序的调用返回等,上页,下页,回目录,1、无条件转移指令,长转移,LJMP addr16,绝对转移,AJMP addr11,AJMP 将程序存储器分为32个区,由PC1511决定,每个区2KB,分8页,由A10A9A8决定。只能在区内跳转。,转移范围 2KB,转移范围 64KB,上页,下页,回目录,在2区形成11位目标地址,.,1000H17FFH,保持高5位地址以确定某区,0 0 0 1 0,例如 AJMP add11 在2区的执行过程,2KB范围内,00001,短转移,SJMP rel,指令中的rel是8位带符号补码,范围-128+127。,上页,下页,回目录,间接长转移,JMP A+DPTR,上页,下页,回目录,无条件转移指令小结,上页,下页,回目录,(散转指令),4.3.3 分支程序设计,根据前面程序运行结果,可以有N种选择,并转向其中任一处程序。,例4-10 128路分支程序:根据R3值转向128个目的地址。,编程方法:顺序程序 MOV A,R3 CJNE A,#00H,FZ1 AJMP FZ00FZ1:CJNE A,#01H,FZ2 AJMP FZ01 FZ2:CJNE A,#02H,FZ3 AJMP FZ02FZ3:.,烦琐,程序太长。如作10000个分支程序.,JMP128:MOV A,R3CLR CSUBB A,#128JNC ERRORMOV A,R3RL AMOV DPTR,#PRGTALJMP A+DPTRPRGTAL:AJMP ROUT00AJMP ROUT01.AJMP ROUT7F,;入口条件检查,;分支跳转,;AJMP指令占2字节,例4-10:P127128分支程序设计。使用 JMP A+DPTR指令实现之。,分支程序应用场所:1、键盘按键处理程序 根据所按功能键转到相应的功能子程序2、通信协议处理程序,例:某键盘如下:,MOVA,B CLRC SUBB A,#3 JC FOUN RETFOUN:MOV A,B RL A ADD A,B MOV DPTR,#KEYF JMP A+DPTRKEYF:LJMP TONGXIN LJMP BIANHAO LJMP CAIYANG,;键编号,则顺序执行,2、条件转移指令,累加器为零则转移,JZ rel,JNZ rel,累加器不为零则转移,上页,下页,回目录,则转移,则顺序执行,则转移,例:何时转LABEL1、何时转LABEL2?MOV A,R0CPL AJZ LABEL1INCAJZ LABEL2。,累加器与立即数不等则转移,CJNE A,#data,rel,寄存器与立即数不等则转移,CJNE Rn,#data,rel,上页,下页,回目录,顺序,转移,转移,顺序,累加器与内RAM或SFR不等则转移,CJNE A,direct,rel,内RAM与立即数不等则转移,CJNE Ri,#data,rel,上页,下页,回目录,顺序,转移,转移,顺序,寄存器减“1”不等零则转移,DJNZ Rn,rel(n=07),DJNZ direct,rel,内RAM或SFR减“1”不为零则转移,上页,下页,回目录,顺序,转移,转移,顺序,例:阅读子程序,分析功能FULL0:MOV R7,#100 CLR A MOV DPTR,#2000HFUL0:MOVX DPTR,A INCDPTR DJNZ R7,FUL0 RET,上页,下页,回目录,条件转移类指令小结,利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现循环程序设计。,例4-13:在内部RAM 30H4FH 连续32个单元中存放了 单字节无符号数,求32个无符号数之和,并存入内部RAM 51H,50H中。,程序的流程图如下:,上页,下页,回目录,流程图:,31R7#0R3(30H)A#31HR0,CY=0?,END,START,(R7)-1=0?,51H(R3)50H(A),Y,N,(A)+(R0)A,(R0+1)R0,(R3)+1R3,上页,下页,回目录,N,Y,程序:,;取被加数,;R0作加数地址指针,;CY=0,和256,则转,;作加法,;CY=1,加到高字节,;修改R0指针,;未完,重复加,;存和数,初始化部分,循环体部分,结束部分,上页,下页,回目录,循环执行直到R7=0,循环控制,3、子程序调用及返回指令,长调用,LCALL addr16,;在调用子程序之前,保护断点地址,上页,下页,回目录,绝对调用,ACALL addr11,;在调用子程序之前,保护断点地址,上页,下页,回目录,子程序返回,RET,中断返回,RETI,上页,下页,回目录,“0”触发器,优先级状态,4、空操作,NOP,上页,下页,回目录,子程序调用及返回指令小结,上页,下页,回目录,主程序:,子程序:,不需主程序提供入口参数,从子程序开始到子程序返回,大约为20ms,例4-23 调用延时子程序DELY,子程序开始的标号,子程序返回指令,调用子程序,上页,下页,回目录,982=196s,1s,1s,设:主频为12MHZ,2s,(196+2+2)100,+3,=20003s=20.003ms,2s,1s,+3,利用软件延时,使P1.0接口上的发光二极管每隔0.5秒闪烁一次.1、硬件设计2、软件设计,子程序调用的现场保护,现场保护:如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。,保护内容:内部 RAM 内容,各工作寄存器内容,主程序正在使用 累加器 A、B DPTR PSW,保护方式:将要保护的单元压入堆栈。还可以用 RS1 RS0 来选择其他通 用寄存器组,以便保护主程序现场。,上页,下页,回目录,例如:某子程序的现场保护,推入与弹出应按照“先进后出”,或“后进先出”的顺序,上页,下页,回目录,五、布尔处理类指令(17条),指令中位地址的助记符有多种表达方式:,直接地址方式:如 0D5H,点操作符方式:如 PSW.5,位名称方式:如 F0,上页,下页,回目录,1、布尔传送类,直接寻址位送进位标志,MOV C,bit,进位标志送直接寻址位,MOV bit,C,上页,下页,回目录,2、布尔状态控制指令,清进位标志,CLR C,清直接寻址位,CLR bit,上页,下页,回目录,置进位标志,SETB C,置直接寻址位,SETB bit,上页,下页,回目录,进位标志求反,CPL C,直接寻址位求反,CPL bit,上页,下页,回目录,3、布尔逻辑运算指令,进位标志逻辑与直接寻址位,ANL C,bit,进位标志逻辑与直接寻址位的反码,ANL C,/bit,上页,下页,回目录,进位标志逻辑或直接寻址位,ORL C,bit,进位标志逻辑或直接寻址位的反码,ORL C,/bit,上页,下页,回目录,4、布尔条件转移指令,进位标志为“1”则转移,JC rel,JNC rel,进位标志为“0”则转移,上页,下页,回目录,直接寻址位为“1”则转移,JB bit,rel,直接寻址位为“0”则转移,JNB bit,rel,上页,下页,回目录,直接寻址位为“1”则转移并将该位复位,JBC bit,rel,上页,下页,回目录,布尔处理指令小结,上页,下页,回目录,布尔处理指令小结,上页,下页,回目录,编程思路,这是一个简单分支程序,可以使两数相减,若CY=1,则被减数小于减数。用JC指令进行判断。,例4-5 设内部RAM30H,31H存放两个无符号数,试比较 两数的大小,较小的数存入30H单元,较大的数 存入31H单元。,程序的流程图如下:,上页,下页,回目录,程序:,;做减法比较两数,流程图:,上页,下页,回目录,当执行完一条指令后,根据指令执行所形成的条件,判断程序走向,即为分支程序。,多重分支程序举例,例4-7:设片内30H单元存放的是一元二次方程ax2+bx+c=0 根的判别式=b2 4ac的值。,试根据30H单元的值,编写程序,判断方程根的三种情况,存入片内31H内。在31H中存放“0”代表无实根,存放“1”代表有相同的实根,存放“2”代表两个不同的实根。,上页,下页,回目录,0,=0,0,上页,下页,回目录,程序:,上页,下页,回目录,;(R0)=200,;P1.7变反(1 s),;P1.7为低电平,;(1 s),;(1 s),;(R0)0 则转(2s),1s,1s,1s,2s,10s,例:分析下面程序所实现的功能,上页,回目录,P1.7,100个脉冲,汇编语言程序设计环境、步骤:,上页,下页,回目录,汇编语言程序的结构,汇编语言程序设计的步骤,软件任务分析,1、软件任务分析和硬件电路设计结合进行,2、软件任务分析:执行软件:监控软件:,单片机应用系统程序设计是在系统裸机条件下开发的,而且随应用系统的不同而不同。,完成各种实质性功能,如测量、计算、显示、打印、输出控制、通讯等;设计偏重算法效率。进行功能定义、接口定义、数据结构、数据类型等定义。,专门用来协调各执行模块和操作者的关系。着眼全局,逻辑严密。根据系统功能和键盘设置选择监控程序结构。,资源划分,系统资源主要包括ROM、RAM、T/C、中断源等。,主要工作是进行RAM资源的分配。片外RAM:容量大,存放批量大的数据。片内RAM:认真考虑。,00H1FH:工作积存器区。主程序用0区,中断、子程序用1区、2区、3区。20H2FH:位寻址区,存放各种软件标志、逻辑变量、位输入信息、位输出信息副本、状态变量、逻辑运算中间结果等。保留12个字节备用,剩下作其它用途。30H7FH(30HFFH):堆栈空间、数据缓冲区、各种参数、指针、中间结果等。,列出RAM资源详细分配清单,作为编程依据。,;字节定义区X EQU30HY EQU31HZ EQU32H;40H4FH,没有使用 SIOBUF EQU 50H;50H5FH,串行通信缓冲区16字节;0E0H0FFH 32字节堆栈空间,;位变量、位标志变量定义TIMOUT BIT 00HOVER BIT01HKEYF BIT02H,编程及调试,软件设计方法:自上而下自下而上,基本过程:用编辑软件编辑源程序、编译软件生成目标代码、程序测试、仿真运行、代码固化、样机试用、产品定型,磨刀不误砍柴功:前期调研细致、软硬件论证充分、指标吃准、数据格式定好、模块功能和接口条件落实