




已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.7 MCS-51单片机指令系统,2.7.1 MCS-51指令系统的分类、格式及一般说明 2.7.2 寻址方式 2.7.3 分类指令,2.7.1 MCS-51指令系统的分类、格式及一般说明,1 指令分类 2 指令格式 3 指令描述符号介绍,返回本节首页,1 指令分类,按指令功能,MCS-51指令系统分为数据传递与交换、算术运算、逻辑运算、程序转移、布尔处理操作、CPU控制等6类。 布尔处理操作类指令又称位操作指令。,返回本节,2 指令格式,在MCS-51指令中,一般指令主要由操作码、操作数组成。 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。,返回本节,3 指令描述符号介绍,Rn当前选中的寄存器区中的8个工作寄存器R0R7(n=07)。 Ri当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。 direct8位的内部数据存储器单元中的地址。 #data包含在指令中的8位常数。 #data16包含在指令中的16位常数。 addr1616位目的地址。 addr1111位目的地址。,rel8位带符号的偏移字节,简称偏移量。 DPTR数据指针,可用作16位地址寄存器。 bit内部RAM或专用寄存器中的直接寻址位。 A累加器。 B专用寄存器,用于乘法和除法指令中。 C进位标志或进位位,或布尔处理机中的累加器。,间址寄存器或基址寄存器的前缀,如Ri,DPTR。 / 位操作数的前缀,表示对该位操作数取反,如/bit。 片内RAM的直接地址或寄存器。 ()由寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所代替。,返回本节,2.7.2 寻址方式,1 立即寻址 2 直接寻址 3 寄存器寻址 4 寄存器间接寻址 5 变址寻址 6 相对寻址 7 位寻址,返回本节首页,立即寻址 Immediate Addressing,指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。 例如:MOV A,# 60H ;A#60H MOV DPTR,# 3400H ;DPTR#3400H MOV 30H,# 40H ;30H单元#40H 上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。,返回本节,直接寻址 Direct Addressing,指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。 例如:MOV PSW,# 20H ; PSW#20H PSW为直接寻址寄存器的符号地址。 MOV A,30H ;A30H内部RAM 单元中的内容 30H为直接给出的内部RAM的地址。,返回本节,寄存器寻址 Register Addressing,以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B 、DPTR以及R0R7 。 例如:CLR A ;A0 INC DPTR ;DPTRDPTR+1 ADD R5,# 20H ;R5#20H+R5,返回本节,寄存器间接寻址 Register Indirect Addressing,以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。,例如:MOV R0,A ;内部RAM(R0)A其指令操作过程示意图如图2-15所示。 又如:MOVX A,R1;A外部RAM(P2R1)其指令操作过程示意图如图2-16所示。 再如:MOVX DPTR,A;外部RAM(DPTR)A 其指令操作过程示意图如图2-17所示。,图2-15 MOV R0,A间接寻址示意,图2-16 MOVX A,R1间接寻址示意图,图2-17 MOVX DPTR,A间接寻址示意图,返回本节,5 变址寻址(基址+变址),变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式(如图2-18所示)。 例如:MOVC A, A+DPTR;A(A+DPTR) 又如,MOVC A, A+PC ;A(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC。,Base-Register-plus-Index-Register-Indirect Addressing,如:MOVC A,A+DPTR 设DPTR=2000H,A=E0H,20E0H,47,指令代码,如:MOVC A,A+PC 设A=E0H,2121H,45,当前PC,指令代码,图2-18 变址寻址示意图,返回本节,相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP 08H ;PCPC+2+08H 指令操作示意图如图2-19所示。,Relative Addressing,如:JC 23,1025H,23H,1002H,指令代码,当前PC,图2-19 相对寻址示意图,返回本节,7 位寻址,位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB 10H ;将10H位置1 若22H单元中存放着数据40H,22H单元的D0位的位地址为10H, 执行上述指令后(22H)=41H。 又如:MOV 32H,C ;32H进位位C ORL C ,32H ;CC32H,返回本节,Bit Addressing,2.7.3 分类指令,1 数据传送类指令 2 算术运算类指令 3 逻辑运算与循环类指令 4 程序转移类指令 5 调用子程序及返回指令 6 位操作指令,返回本节首页,1 数据传送类指令(29条) Data Transfer Instruction,MCS-51 助记符: 助记符: MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 源操作数寻址方式(5种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 目的操作数寻址方式(3种): 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响 标志位。,图2-20 MCS-51单片机片内数据传送图,1 以累加器为目的操作数的指令(4条),MOV A,Rn ;RnA MOV A,direct ;(direct)A MOV A,Ri ;(Ri)A MOV A,#data ;dataA 将源操作数指定内容送到A中。,2 以寄存器Rn为目的操作数的指令 (3条),MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。,3 以直接地址为目的操作数的指令(5条),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data 这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。 例: MOV 20H,A MOV 20H,R1 MOV 20H,30H MOV 20H,R1 MOV 0A0H,#34H MOV P2,#34H,4 以间接地址为目的操作数的指令(3条),MOV Ri,A ;A (Ri) MOV Ri,direct ;(direct) (Ri) MOV Ri,#data ; data (Ri) 功能:把源操作数指定的内容送入以R0或R1为地址 指针的片内存储单元中。 例: MOV R0,A MOV R1,20H MOV R0,#34H,5 十六位数的传递指令(1条),MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 例:MOV DPTR,#1234H 执行完了之后DPH中的值为12H,DPL中的值为34H。 如果我们分别向DPH,DPL送数,则结果也一样。 如下面两条指令: MOV DPH,#35H MOV DPL,#12H。 则就相当于执行了 MOV DPTR,#3512H。,6 累加器A与片外RAM之间的数据传递类指令(4条),MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A 说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所有 需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部 RAM中的数据也必需通过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。,2.要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。 3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。 例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。 MOV DPTR,#0100H MOVX A,DPTR MOV DPTR,#0200H MOVX DPTR,A,7 读程序存储器指令(2条),MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格 说明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定相同。 例:有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5) MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100H DB 0,1,4,9,16,25,如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。,8 堆栈操作(2条),PUSH direct ;SPSP+1,(SP)(direct) POP direct ; (direct) (SP), SPSP-1 第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例: MOV SP,#10H MOV 40H,#50H PUSH 40H POP 30H 则执行第一条PUSH 40H指令是这样的:将SP中的值加1,即变为11H,然后将40H中的值送到11H单元中,因此执行完本条指令后,内存11H单元的值就是50H,同样,执行POP 30H时,是将11H中的值送入到30H单元中,即执行完本条指令后,30H单元中的值变为50H。,指令PUSH操作示意图,指令POP操作示意图,9 交换指令(5条),XCH A,Rn ;ARn XCH A, direct ;A(direct) XCH A, Ri ;A(Ri) XCHD A, Ri ;A.3A.0(Ri).3(Ri).0 SWAP A ;A.3A.0A.7A.4 例: 已知A中的内容为34H MOV R6, #29H XCH A, R6 SWAP A XCH A, R6 XCHD A, R0,;R6=29H ;A=29H,R6=34H ;A=92H ;A=34H,R6=92H ;A=36H,(R0)=54H (设原来R0 ;指向的单元的内容为56H),(40H)= H 50H = H A= H (41H)= H 51H= H R0= H,课堂练习,1.设:内部RAM中,(40H)=50H,(41H)=60H,(50H)=30H, (51H)=70H,执行下列片段后:,MOV R0,40H MOV A,R0 INC R0 MOV R0,A,b. MOV R0,#40H MOV A,R0 INC R0 MOV A,R0,;R0=50H ;A=30H ;R0=51H ;(51H)=30H,;R0=40H ;A=50H ;(40)=51H ;A=51H,2.给出每条指令执行后的结果,MOV 23H,#30H MOV 12H,#34H MOV R0,#23H MOV R7,12H MOV R1,#12H MOV A,R0 MOV 34H,R1 MOV 45H,34H MOV DPTR,#6712H MOV 12H,DPH MOV R0,DPL MOV A,R0,;(23H)=30H ;(12H)=34H ;R0=23H,;R7=34H ;R1=12H ;A=30H,;(34H)=34H ;(45H)=34H ;DPTR=6712H,;(12H)=67H ;R0=12H ;A=67H,内部RAM,设内部RAM中的30H单元的内容为50H,试分析执行下面程序后各有关单元的内容。 MOV 60H,#30H MOV R0,#60H MOV A,R0 MOV R1,A MOV 40H,R1 MOV 60H,30H,;60H单元立即数30H,;R0立即数60H,;A30H,;R130H,;40H单元立即数50H,;60H单元50H,将片内RAM 30H单元与40H单元中的内容互换。,方法1(直接地址传送法): MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $,方法2(间接地址传送法): MOV R0,#40H MOV R1,#30H MOV A,R0 MOV B,R1 MOV R1,A MOV R0,B SJMP $,方法3(字节交换传送法): MOV A,30H XCH A,40H MOV 30H,A SJMP $,方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SJMP $,将外部存储器的2000H单元的内容送入2100H单元。,MOV DPTR, #2000H ; (DPTR)=2000H MOVX A, DPTR ; (A)=(DPTR) MOV DPTR, #2100H ;(DPTR)=2100H MOVX DPTR, A ;(DPTR)=(A),2.7.4 算术运算类指令(24条) Arithmetic Operations,主要对8位无符号数;也可用于带符号数运算。 包括:加、减、乘、除、加1、减1运算指令 影响PSW有关位。,1 加法指令,ADD A,#data ; AdataA ADD A,direct ; A(direct )A ADD A,Rn ; ARnA ADD A,Ri ; A(Ri)A 用途:将A中的值与源操作数所指内容相加,最终结果 存在A中。,(1)不带进位位的加法指令(4条),例1:ADD A,#47H ADD A,34H ADD A,R7 ADD A,R0,例2: MOV A,#0AEH ADD A,#81H 则执行完本条指令后,A中的值为2FH; C=1,AC=0,OV=1,P=1。 对无符号数:结果为12FH; 带符号数运算:OV=1,有错。,实验验证一下本例,(2)带进位位的加法指令(4条),ADDC A,Rn ; ARnCYA ADDC A,direct ; A(direct )CYA ADDC A,Ri ; A(Ri)CYA ADDC A,#data ; AdataCYA 用途:将A中的值和其后面的值以及进位位C中的值相加, 最终结果存在A,常用于多字节数运算中。 说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位(两字节)的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到065535。,例:,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。换言之,CY就相当于是100H。 然后再做10H + 30H + CY,结果是41H,所以最终的结果是4107H。,1067H+30A0H,0001 0000 0110 0111,0011 0000 1010 0000,0100 0001 0000 0111,1067H,30A0H,4107H,设:1067H存在R1R0中, 30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。,MOV A,R0 ADD A,R2 ;R0+R2A和CY MOV R4,A MOV A,R1 ADDC A,R3 ;R1+R3+CYA和CY MOV R5,A,又例:,先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H,而PSW中的CY=0。 然后再做10H + 30H + CY,结果是40H,所以最终的结果是4087H。,1067H+3020H,0001 0000 0110 0111,0011 0000 0010 0000,0100 0000 1000 0111,1067H,3020H,4087H,实验验证一下本例,设:1067H存在R1R0中, 3020H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。,(3) 加1指令(5条),INC A ;A+1A,影响P标志 INC Rn ;Rn+1Rn INC direct ;(direct)+1(direct) INC Ri ;(Rn)+1(Rn) INC DPTR ;DPTR+1DPTR 功能很简单,就是将后面目标中的值加1。,例:A=12H,R0=33H,(21H)=32H, (34H)=22H,DPTR=1234H。 连续执行下面的指令: INC A INC R0 INC 21H INC R0 INC DPTR,; A=13H ; R0=34H ;(21H)=33H ;(34H)=23H ; DPTR=1235H,(4) 十进制调整指令,十进制调整指令是一条专用指令,用于对BCD码十进制数加法运算的结果进行修正。其指令格式为: DA A 因相加结果在累加器中,因此也就是对累加器A的内容进行修正。,什么是BCD码?,十进制调整的修正方法应是: 累加器低4位大于9或辅助进位位(AC)=1则进行低4位加6修正: A(A)+06H 累加器高4位大于9或进位标志位(CY)=1,则进行高4位加6修正: A(A)+60H 累加器高4位为9,低4位大于9则进行高4位加6修正,低4位加6修正: A(A)+66H,在指令系统中,没有专门的十进制(BCD码)的加法运算指令,只能使用ADD、ADDC命令,但有时会产生错误,DA指令就是用于对A中BCD码加法运算结果进行调整。即两个压缩型BCD码(两个BCD码存放在一个字节存储单元)按照二进制数相加之后,必须经本指令调整,才能得到压缩型BCD码和数。 执行该指令时, 判断A中的低4位是否大于9和辅助进位标志AC是否为“1”, 若两者有一个条件满足, 则低4位加6操作; 同样, A中的高4位大于9或进位标志 CY为“1”两者有一个条件满足时, 高 4 位加 6 操作。,MOV A, 56H ADD A, 67H DA A,这段程序中, 第一条指令将立即数56H(BCD码56)送入累加器A; 第二条指令进行如下加法:,0 1 0 1 0 1 1 0 56 0 1 1 0 0 1 1 1 67,1 0 1 1 1 1 0 1 BD 0 1 1 0 0 1 1 0 66,+,+,1 0 0 1 0 0 0 1 1 123,得结果 BDH;第三条指令对累加器 A进行十进制调整, 高4、低 4 位均大于 9, 因此要加 66H, 得调整的BCD码 123。,例3-8 设有4个压缩BCD码,分别放在内部数据存储器50H51H单元和60H61H单元中,试编写求出两个数的和的程序,结果存放到40H41H单元中。,MOV A,50H ;(A)(50H) ADD A,60H ;(A)(A)+(60H) DA A, ; BCD码调整 MOV 40H,A MOV A,51H ADDC A,61H DA A MOV 41H,A,2 减法指令(8条),SUBB A,Rn ; ARnCYA SUBB A,direct ; A(direct )CYA SUBB A,Ri ; A(Ri)CYA SUBB A,#data ; AdataCYA 将A中的值减去源操作数所指内容以及进位位C中的 值,最终结果存在A中。 如: SUBB A,R2 设: A=C9H,R2=55H,CY=1, 执行指令之后,A中的值为73H。,(1) 带借位的减法指令(4条),说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。 对带符号数,要注意OV标志。OV=1,出错。,(2) 减1指令(4条),DEC A ;A-1A,影响P标志 DEC Rn ;Rn-1Rn DEC direct ;(direct)-1(direct) DEC Ri ;(Rn)-1(Rn) 与加1指令类似。,3 乘法指令(1条),MUL AB ;ABBA 此指令的功能是将A和B中的两个8位无符号数相乘, 两数相乘结果一般比较大,因此最终结果用1个16位 数来表达,其中高8位放在B中,低8位放在A中。 在乘积大于FFH时,0V置1,否则OV为0;而CY总是0。 例: A=4EH,B=5DH,执行指令MUL AB后, 乘积是1C56H,所以在B中放的是1CH,而A中放的 则是56H。,OV= P=,1 0,4 除法指令(1条),DIV AB ;AB的商A,余数B 此指令的功能是将A中的8位无符号数除B中的8位 无符号数(A/B)。除了以后,商放在A中,余数放 在B中。 CY和OV都是0。如果在做除法前B中的值是00H,也 就是除数为0,那么0V=1。 如:A=11H,B=04H,执行指令DIV AB后, 结果:A=04H,B=1。,CY= OV= P=,0 01,练习,试编写1234H-0FA3H的程序段,将结果高8位存入 51H, 低8位存入50H单元。 MOV A,#34H SUBB A,#0A3H MOV 50H,A MOV A,#12H SUBB A,#0FH MOV 51H,A,CLR C,返回本节,分析下列程序执行结果 MOV 34H,#10H MOV R0,#13H MOV A,34H ADD A,R0 MOV R1,#34H ADD A,R1,2.7.5 逻辑运算类指令(24条),主要用于对2个操作数按位进行逻辑操作,结果送到 A或直接寻址单元。 主要操作 与、或、异或、移位、取反、清零等。 对标志位的影响 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。,Logic Operations,1 逻辑或指令(6条),ORL A,Rn ;ARnA ORL A,direct ;A(direct)A ORL A,Ri ;A(Ri)A ORL A,#data ;AdataA ORL direct,A ;(direct)A(direct) ORL direct,#data ;(direct)data(direct),例:71H和56H相或: 01110001 (71H) ) 01010110 (56H),01110111 即77H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,OR Logic Instruction,例:,MOV A,#45H MOV R1,#25H MOV 25H,#39H ORL A,R1 ORL 25H,#13H ORL 25H,A,;A=45H ;R1=25H ;(25H)=39H ;45H39H = 7DHA ;39H13H = 3BH (25H) ; 3BH7DH =7FH (25H),实验验证一下本例,2 逻辑与指令 (6条),ANL A,Rn ;ARnA ANL A,direct ;A(direct)A ANL A,Ri ;A(Ri)A ANL A,#data ;AdataA ANL direct,A ;(direct)A(direct) ANL direct,#data ;(direct)data(direct),例:71H和56H相与: 01110001 (71H) )01010110 (56H),01010000 即50H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,ANd Logic Instruction,例:,MOV A,#45H MOV R1,#25H MOV 25H,#79H ANL A,R1 ANL 25H,#15H ANL 25H,A,;A=45H ;R1=25H ;(25H)=79H ;45H79H = 41HA ; 79H15H = 11H (25H) ; 11H41H = 01H (25H),实验验证一下本例,例:71H和56H相异或: 01110001 (71H) ) 01010110 (56H),3 逻辑异或指令(6条),XRL A,Rn ;A RnA XRL A,direct ;A (direct)A XRL A,Ri ;A (Ri)A XRL A,#data ;A dataA XRL direct,A ;(direct) A(direct) XRL direct,#data ;(direct) data(direct),00100111 即27H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,eXclusive-oR Logic Instruction,例:,MOV A,#45H MOV R1,#25H MOV 25H,#39H XRL A,R1 XRL 25H,#13H XRL 25H,A,;A=45H ;R1=25H ;(25H)=39H ; 45H39H = 7CHA ; 39H13H = 2AH (25H) ;2AH7CH =56H (25H),实验验证一下本例,4 清0与取反指令(2条),取反:CPL A ;/AA 例:若A=5CH,执行CPL A 结果:A=A3H,清0:CLR A ;0A,ComPlement Logic Operation,5 循环移位指令(4条),RL A RR A RLC A RRC A,后两条指令,影响P标志和CY。,Rotate Logic instruction,例:,若A=5CH,CY=1,执行RLC A后,,对RLC、RRC指令,在CY=0时 RLC相当于乘以2 RRC相当于除以2,结果:A=B9H,CY=0,P=1,综合举例:,ANL A,#0FH ;屏蔽A的高4位 SWAP A ANL P1,#0FH ;清P1口高4位 ORL P1,A ;P1口高4位输出A的低4位;,把累加器A中的低4位状态,通过P1口的高4位输出, P1口的低4位状态不变。,返回本节,2.7.6 控制转移类指令( 17条) Branching Instruction,共有控制程序转移类指令(不包括位操作类的转移指令)。此类指令一般不影响PSW。 包括以下类型: 无条件转移和条件转移 相对转移和绝对转移 长转移和短转移 调用与返回指令,1 无条件转移类指令(4条),短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel 间接转移指令:JMP A+DPTR,(1)上面的前三条指令,统统理解成:PC值改变,即跳转到一个标号处。 那么他们的区别何在呢?,跳转的范围不同。,短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel,转移范围: 2KB 64KB -128+127,指令构成不同。 AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,间接转移指令:JMP A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。 转移地址由A+DPTR形成,并直接送入PC。 指令对A、DPTR和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。,(2)第四条指令与前三条指令相比有所不同,例: MOV DPTR,#TAB ;将TAB代表的地址送入DPTR JMP A+DPTR ;跳转 TAB: AJMP ROUT0 ;跳转ROUT0开始的程序段 TAB+2: AJMP ROUT1 ;跳转ROUT1开始的程序段 TAB+4: AJMP ROUT2 ;跳转ROUT2开始的程序段 TAB+6: AJMP ROUT3 ;跳转ROUT3开始的程序段 . ROUT0: . ROUT1: . ROUT2: . ROUT3:,执行该段程序后,程序将根据A中的内容转移到不同的程序段去执行-散转。 A=0,转ROUT0 A=2,转ROUT1 A=4,转ROUT2 A=6,转ROUT3,2 条件转移指令(8条),条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,一、判A内容是否为0转移指令(2条),JZ rel ;如果A=0,则转移,否则顺序执行。 JNZ rel ;如果A0,就转移。 转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel 我们在编写汇编语言源程序时,可以直接写成: JZ 标号 ;即转移到标号处。,MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前:如果R0=0,结果R1=0FFH。而如果R00,则结果是R1=00H。 把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么?,如果R0=0,结果R1=00H。如果R0 0,结果是R1中的值为0FFH。,二、比较不等转移指令(4条),CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。 同样地,使用时,我们可以将rel理解成标号,即: CJNE A,#data,标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE Ri,#data,标号,利用这些指令,可以判断两数是否相等。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能: 如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。 如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。,举例:,MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3 L1:JC L2 ;如CY=1即 R010H,则转移 AJMP L3 L2:MOV R1,#0FFH L3:SJMP L3 因此最终结果是:本程序执行前, 如果R0=10H,则R1=00H; 如果R010H,则R1=0AAH; 如果R010H,则R1=0FFH。,三、减1不为0转移指令(2条),DJNZ Rn,rel DJNZ direct,rel DJNZ指令的执行过程是这样的: 它将第一个参数中的值减1,然后看这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移到第二个参数所指定的地方去。 例: DJNZ 10H,LOOP . LOOP: .,例: MOV 23H,#0AH CLR A LOOP: ADD A,23H DJNZ 23H,LOOP SJMP $ 上述程序段的执行过程是: 将23H单元中的数连续相加,存至A中,每加一次, 23H单元中的数值减1,直至减到0,共加(23H)次。,返回本节,3 调用与返回指令(4条),一、调用指令(2条),LCALL addr16 ;长调用指令(3字节) ACALL addr11 ;短调用指令(2字节) 上面两条指令都是在主程序中调用子程序,两者的区别: 对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。 使用时可以用: LCALL 标号 ;标号表示子程序首地址 ACALL 标号 来调用子程序。,指令的执行过程是:当前PC压栈,子程序首地址送 PC,实现转移。,二、返回指令 (2条),子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。 RET ;子程序返回指令 RETI ;中断子程序返回指令 两者不能互换使用。,4 空操作指令(1条),NOP 空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。,RET指令的执行过程是:堆栈栈顶内容(2字节,调用时保存的当前PC值)弹出给PC,实现返回。 RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。,返回本节,2.7.7 位操作指令( 17条),Boolean Operations,MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。 在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。 位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH); 可以位寻址的特殊功能寄存器:8051中有一,些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除, 如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、 IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。 在进行位处理时, CY用作“位累加器” 。,以PSW中位4( RS1 )为例。 直接(位)地址方式:如 D4H; 点操作符号方式:如 PSW.4,D0H.4; 位名称方式:如 RS1; 用户定义名方式:如用伪指令 bit SUB.REG bit RS1 定义后,可用SUB.REG代替RS1。,位地址表达方式,1 位传送指令(2条),MOV C,bit ;bit C MOV bit,C ;C bit 这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。 例:MOV C,P1.0 ;将P1.0的状态送给C。 MOV P1.0,C ;将C中的状态送到P1.0 ;引脚上去。,2 位清0和置位(4条),位清0指令 CLR C ;使CY=0 CLR bit ;使指令的位地址等于0。 例:CLR P1.0 ;即使P1.0变为0 位置1指令 SETB C ;使CY=1 SETB bit ;使指定的位地址等于1。 例:SETB P1.0 ;使P.0变为1,3 位逻辑运算指令 (6条),位与指令 ANL C,bit ;Cy与指定位的值相与,结果送Cy ANL C,/bit ;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。但注意:指定的位地址中的值本身并不发生变化。 例:ANL C,/P1.0,位取反指令 CPL C ;使Cy值取反。 CPL bit ;使指定的位的值取反。 例:CPL P1.0,位或指令 ORL C,bit ORL C,/bit,4 位条件转移指令(5条),判Cy转移指令 JC rel JNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行。 第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。 同样理解: JNC 标号,判位变量转移指令 JB bit,rel JNB bit,rel JBC bit,rel 第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。 同样理解:JB bit,标号 第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。,返回本节,本章小节,7种寻址方式,111条指令,字节数,单字节指令:49条 双字节指令:45条 三字节指令:17条,7种寻址方式:立即、直接、寄存器、寄存器 间接、变址、相对、位寻址,111条指令: 数据传送类(29条) 算术运算类(24条) 逻辑运算与循环类(24条) 控制转移类( 17条) 位操作类(17条),2.8 汇编语言程序设计,2.8.1 汇编语言格式与伪指令,汇编语言源程序由以下两种指令构成 汇编语句(指令语句) 伪指令(指示性语句) 汇编语句的格式: 标号: 操作码 操作数 ;注释 数据表示形式: 二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识),3.伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。,常用的伪指令,ORG (Origin) 定位目的程序的起始地址。 格式: ORG 表达式 如:ORG 0000H 注:表达式必须为16位地址值。 END 汇编语言程序结束伪指令。 注:一定放在程序末尾!,常用的伪指令,EQU (EQUate) 赋值伪指令。 格式: 字符名称 EQU 数值或汇编符号 例: AA EQU 30H K1 EQU 40H MOV A,AA ; (30H)A MOV A,K1 ;(40H)A,常用的伪指令,DB(Define Byte) 从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数据常数表。 格式:DB 字节常数或ASCII字符 例: ORG 1000H DB 34H,0DEH,A,B DB 0AH,0BH,20,常用的伪指令,DW(Define Word) 从指定单元开始定义(存储)若干个字的数据 或ASCII码字符。 格式:DW 字常数或ASCII字符 例: ORG 2000H DW 1234H,B DW 0AH,20,常用的伪指令,BIT 位地址符号指令。 把位地址赋于规定的字符名称。 格式:字符名称 BIT 位地址 例: ABC BIT P1.1 QQ BIT P3.2,2.8.2 应用程序设计,在进行应用程序设计时,首先要确定算法,算法的优劣很大程度上决定了程序的效率,另外还要尽可能画出程序框图,以便于分析程序流程。具体设计中还有主程序和子程序之分,主程序又称为前台程序,它通常是一个无穷循环,子程序又称为后台程序,它可以是各种功能子程序,也可以是中断服务子程序。在主程序中完成单片机系统的初始化,如内存单元清零、开放中断等。子程序一般完成某个具体任务,如数据采集、存储、运算等。一般在前台主程序的循环体中根据需要不断调用各种后台功能子程序,从而完成单片机应用系统规定的任务。,2.8.3 定点数运算子程序,定点数:小数点固定的数。 可以把小数点固定在数值的最高位之前, 对于有符号的数,小数点应在符号位与最高数值位之间,即: 符号位 数值部分 也可以把小数点固定在最低数值位后面,即: 符号位 数值部分,定点数表示方式,(1)原码表示法,符号位为0表示正数,符号位为1表示负数,如: 二进制数00110100表示十进制数+52 二进制数10110100表示十进制数-52,(2)补码表示法,正数的补码表示与原码相同, 即最高位为0, 其余位为数值位。负数用补码表示时, 最高位为1, 数值位要按位取反后再在最低位加1,才是该负数的数值。,例如: 十进制数+51的二进制补码为00110011 十进制数 -51的二进制补码为11001101,例2-3 双字节数取补子程序。 将(R4R5)中的双字节数取补,结果送R4R5。 CMPT: MOV A,R5 CPL A ADD A,#1 MOV R5,A MOV A,R4 CPL A ADDC A,#0 MOV R4,A RET,例2-4 双字节原码数左移一位子程序。 将(R2R3)左移一位,结果送R2R3,不改变符号位, 不考虑溢出。 DRL1: MOV A,R3 CLR C RLC A MOV R3,A MOV A,R2 RLC A MOV ACC.7,C ;恢复符号位 MOV R2,A RET,例2-5 双字节原码右移一位子程序。 将(R2R3)右移一位,结果送R2R3,不改变符号位。 DRR1: MOV A,R2 MOV C,ACC.7 ;保护符号位 CLR A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 发酵工程技术员考试试卷及答案
- 2025年毛纺织、染整加工产品合作协议书
- 国开学习网《园林生态学》形成性考核册任务1234答案
- 指向数学核心素养的代数概念课教学
- 2025年气象、水文仪器及装置合作协议书
- 2025年廊坊市香河县事业单位招聘考试试题【答案】
- 萧红中学校中考二模语文试题(含答案)
- 项目合同管理
- 小升初英语试题和答案(一)
- 2025年温湿度仪表项目发展计划
- 2025-2030中国老旧垃圾填埋场治理行业前景动态与发展趋势预测报告
- 护士职业损伤防护课件
- 2025汽车贷款还款合同范本
- 包装,设计合同5篇
- 适用奶茶店兼职合同协议
- 国防教育讲座课件
- 2025年全国保密教育线上培训考试试题库附答案【考试直接用】含答案详解
- 2025年保密观知识竞赛题库必考题含答案详解
- 【作业设计】《跨学科实践:制作简易杆秤》作业设计人教版八年级下冊物理
- 车间班组安全培训课件
- 2025春季学期国开河南电大本科《行政管理理论与实践专题讲座》一平台无纸化考试(作业练习+我要考试)试题及答案
评论
0/150
提交评论