版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 MCS-51单片机指令系统,3.1 概述 3.2 寻址方式 3.3 MCS-51的指令系统 3.4 伪指令,3.1 概述,指令系统 :计算机能够执行的全部操作所对应的指令集合。,指令:使计算机完成某种操作的命令。,机器语言: 采用二进制编码表示指令,是计算机能够直 接识别和执行的语言。,汇编语言: 采用助记符 、符号、数字来表示指令的程序 语言,它与机器语言指令时一一对应的。,功能,数据传送类:28条 算术运算类:24条 逻辑运算类:25条 控制转移类:17条 位操作类: 17条,指令的三种属性,功能属性,时间属性,空间属性,MCS-51单片机:111条指令,运算速度,单周期指令:64
2、条 双周期指令:45条 四周期指令: 2 条,字节数,单字节指令:49条 双字节指令:45条 三字节指令:17条,指令的格式及标识,MCS-51单片机汇编语言指令格式: 操作符 目的操作数,源操作数,操作符指明该指令完成什么操作。 操作数是指明该指令的操作对象。 目的操作数是存放结果的。,例:MOV A,R0,MOV A,# 60H,指令中操作数提供的方式称为寻址方式。,操作数的类型:立即数、寄存器操作数、存储器操作数。,3.2 寻址方式,寻址方式,3.2.1 立即寻址 3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址 3.2.5 变址寻址 3.2.6 相对寻址 3.2
3、.7 位寻址,寻址,就是寻找指令中操作数或操作数所在的地址。,就是如何找到存放操作数的地址,把操作数提取出来的方法。,3.2.1、立即寻址 指令中直接给出操作数的寻址方式。 在 汇编指令中,以“#“号做一个数的前缀,就表示该数为立即数。 例:MOV A,#30H,注意:1,立即数只能作为源操作数出现在指令中,且 紧跟在操作码的后面。 2,立即数与操作码一起存放在程序存储器中。,3.2.2 直接寻址 操作数的地址直接出现在指令中。 寻址对象: 内部数据存储器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可 以 直接使用寄存器名。 位地址空间,例1:MOV A,40H ; A=56H,MO
4、V P0,#45H ;45HP0, P0为直接寻址的 SFR,其地址为 80H。,MOV 40H,41H ; 内部RAM (41H)(40H) (40H)=(41H)=78H,例2:,例3:,3.2.3、寄存器寻址 操作数存放在寄存器中。 寻址对象: R0R7 ,A,B,DPTR。 B 仅在乘除法指令中为寄存器寻址,在其他指令中 为直接寻址。 A 可以寄存器寻址又可以直接寻址。 例如:MOV A,R0 ;R0A,A、R0均为寄 存器寻址 MUL AB ;A*BBA,A、B为寄 存器寻址,MOV B,R0 ;R0B,R0为寄存器寻 址,B为直接寻址。 PUSH ACC ;A的内容压入堆栈,3.2
5、.4 寄存器间接寻址,以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部RAM和外部RAM。 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。,例:MOV A, R0,例如:MOV R0,A ;内部RAM(R0)A其指令操作过程示意图如图3-1所示。,图1 MOV R0,A 间接寻址示意图,再如:MOVX DPTR,A;外部RAM(DPTR)A 其指令操作过程示意图如图3-3所示。,图2 MOVX DPTR,A间接寻址示意图,3.2.5 变址寻址,变址寻址常用于对程序存储器中数据进行操作
6、。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式。 例如:MOVC A, A+DPTR;A(A+DPTR) 又如,MOVC A, A+PC ;A(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC。,以DPTR或PC为基址寄存器,累加器A为变址寄存器。 把两者内容相加,结果作为操作数的地址。,如:MOVC A,A+DPTR 设DPTR=2000H,A=E0H,20E0H,47,指令代码,17,如:MOVC A,A+PC 设A=E0H,2121H,45,当前PC,指令代码,3.2.6 相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节
7、补码数(偏移量)形成新的PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP 08H ;PCPC+2+08H 指令操作示意图如图3-5所示。,如:JC 23,1025H,23H,1002H,指令代码,当前PC,3.2.7 位寻址,位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB 10H ;将10H位置1 若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。,寻址方式涉及的存储器空间,3.3 MCS-51的指令系统,3.3.1 数据传送类指令(29条)
8、 3.3.2 算术运算指令(24条) 3.3.3 逻辑运算指令(24条) 3.3.4 控制转移类指令(17条) 3.3.5 位操作类指令(17条),3.3.1 数据传送类指令(29条),MCS-51 助记符: 8086/8088 助记符: MOV、MOVX、MOVC MOV XCH、XCHD、SWAP XCHG PUSH、POP PUSH、POP 源操作数寻址方式(5种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 目的操作数寻址方式(3种): 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响 标志位。,(1) 以累加器为目的操
9、作数的指令(4条),MOV A,Rn ;(Rn)A MOV A,direct;(direct)A MOV A,Ri ;(Ri)A MOV A,#data;#dataA 将源操作数指定内容送到A中。,(2) 以寄存器Rn为目的操作数的指令 (3条),MOV Rn,A ;(A) Rn MOV Rn,direct ;(direct) Rn MOV Rn,#data ; #dataRn 这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。,(3) 以直接地址为目的操作数的指令(5条),MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV
10、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
11、) 十六位数的传递指令(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
12、 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位的寄
13、存器,所以只提供低8位地址。高8位地址由P2口来提供。 3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。 例:将外部RAM中0100H单元中的内容送入外部RAM中0200H单元中。 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 中的值不一定相同。 例:有一
14、个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5) MOV DPTR,#0100H MOV A,R0 MOVC A,A+DPTR . ORG 0100H DB 0,1,4,9,16,25,如果R0中的值为2,则最终地址为0100H+2为0102H,到0102H单元中找到的是4。,(8) 堆栈操作(2条),PUSH direct ;SPSP+1,(SP)(direct) POP direct ; (direct) (SP), SPSP-1 第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例: MOV SP,#
15、5FH MOV A,#100 MOV B,#20 PUSH ACC PUSH B 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后, 61H单元中的值变为20。,(9) 字节交换指令(5条),XCH A,Rn ;(A)(Rn) XCH A, direct ;(A)(direct) XCH A, Ri ;(A)(Ri) XCHD A, Ri ;A.3A.0(Ri).3(Ri).0 S
16、WAP 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),例:,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H,习题:用两种寻址方式实现,将片内RAM 60H单元的数据传送给累加器A。,解: MOV A,#60H,MOV R0,#60H MOV A,R0,;A
17、= 30H ;(4FH)= 30H ;R0= 20H ;(20H)= 30H ;(21H)= 30H,MOV R0,60H MOV A,R0,解: MOV A,60H 结果A=32H,顺序执行下列指令序列,求每一步执行结果。,(),(),(),(),说 明:,只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。,1. 一条指令中不能同时出现两个工作寄存器:非法指令:MOV R1,R2MOV R2,R0,2. 间址寄存器只能使用 R0、R1。 非法指令: MOV A,R2,3. SFR区只能直接寻址,不能用寄存器间接寻址。非法指令: MOV R0,#80H MOV
18、A,R0,4. 指令表 B:指令字节数,M:机器周期数,(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 ;(40H)=51H ;A=51H,2.给出每条指令执行后的结果,M
19、OV 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,3.3.2 算术运算指令,主要内容: 1、PSW寄存器功能说明 2、加、减、乘、除
20、算术运算指令 (8位无符号二进制数的算术运算) 3、算术运算指令对PSW寄存器的影响,一、PSW程序状态寄存器 反映程序执行时的状态信息,随着程序的执行而发生变化。,PSW寄存器,1、CY(PSW.7) 进位标志,简记C 在加法运算时,有进位,CY=1;无进位,CY=0 在减法运算时,有借位,CY=1;无借位,CY=0 在乘除运算时,CY=0,2、AC(PSW.6) 半进位标志 在加法运算时,低4位向高4位有进位,AC=1;否则AC=0 在减法运算时,低4位向高4位有借位,AC=1;否则AC=0,注意: 8位无符号二进制数范围 0255 8位有符号二进制数范围 -128 +127,3、OV(P
21、SW.2) 溢出标志 在乘法运算时,乘积超过255,OV=1;否则OV=0 在除法运算时,除数为零,OV=1;否则OV=0 在有符号数加减运算时,数值超出有符号数的范围,OV=1,二、加法运算指令(8条),1、不带进位加法指令(4条) 指令格式: ADD A ,源操作数 指令功能:目的操作数为累加器A。 将累加器A中的数据与源操作数中数据 相加,结果存入累加器A中,源操作数 保持不变。 PSW的影响:CY、AC、OV等标志。,例如: 78H+94H=?程序。 ORG 0000H ;程序开始 MOV A , #78H ;(A)=78H ADD A , #94H ;(A)=(A)+94H NOP
22、END ;结束,程序结果: (A)=0CH CY=1 AC=0 OV=0,2、带进位加法指令(4条) 指令格式: ADDC A ,源操作数 指令功能: 目的操作数为累加器A。 将累加器A中的数据与源操作数中的 数相加,再加上进位标志CY,结果 存入累加器A中,源操作数保持不变。 PSW的影响:CY、AC、OV等标志。 注意:ADD指令和ADDC指令的区别。,例如: 5678H+2394H=?程序。 ORG 0000H ;程序开始 MOV A , #78H ;(A)=78H ADD A , #94H ;(A)=(A)+94H MOV R0 ,A ;低8位结果存入R0 MOV A , #56H ;
23、(A)=56H ADDC A , #23H ;(A)=(A)+23H+CY MOV R1 , A ;高8位结果存入R1 NOP END ;结束,程序结果: (A) =7AH (R1)=7AH (R0)=0CH CY=1 AC=0 OV=0,三、带借位减法运算指令(4条),指令格式:SUBB A ,源操作数 指令功能:目的操作数为累加器A。 累加器A中的数据减去源操作数中的数据,再减去进位标志CY,结果存入累加器A中,源操作数保持不变。 PSW的影响:CY、AC、OV等标志。,例如:34H-56H=?程序 ORG 0000H ;程序开始 MOV PSW , #00H ;CY=0 MOV A ,
24、#34H ;(A)=34H SUBB A , #56H ;(A)=(A)-56H-CY NOP END ;结束,程序结果: (A)=DEH CY=0 AC=1 OV=0,例如:7834H-1256H=?程序 ORG 0000H MOV PSW , #00H ;CY=0 MOV A , #34H ;(A)=34H SUBB A , #56H ;(A)=(A)-56H-CY MOV R0 , A ;低8位结果存入R0 MOV A , #78H ;(A)=78H SUBB A , #12H ;(A)=(A)-12H-CY MOV R1 , A ;高8位结果存入R1 NOP END ;结束,程序结果:
25、 (A)=65H (R1)=65H (R0)=DEH CY=0 AC=0 OV=0,四、乘除运算指令,1、乘法指令(1条) 指令格式:MUL AB 指令功能:将累加器A中的数据与寄存器B中的数据相乘,乘积的高8位存入B中,乘积的低8位存入A中。 PSW的影响:OV、CY等标志。,例如: ORG 0000H ;程序开始 MOV A , #4 ;(A)=4 MOV B , #5 ; (B)=5 MUL AB ;(BA)=AB NOP END ;结束,程序结果: (B)=00H (A)=14H CY=0 OV=0,例如: ORG 0000H ;程序开始 MOV A , #4EH ;(A)=4EH M
26、OV B , #5DH ;(B)=5DH MUL AB ;(BA)=AB NOP END ;结束,程序结果: (B)=1CH (A)=56H CY=0 OV=1,2、除法指令(1条) 指令格式: DIV AB 指令功能:将累加器A中的数据除以寄存器B中 的数据,商存入A中,余数存入B中。 PSW的影响:CY、OV等标志。,例如: ORG 0000H ;程序开始 MOV A , #36 ;(A)=36 MOV B , #9 ;(B)=9 DIV AB ;(A)=4,(B)=0,(CY)=0,(OV)=0 NOP END ;结束,五、加1指令和减1指令,1、加1指令(5条) 指令格式: INC 操
27、作数 指令功能:将操作数中的数据加1,结果存 入操作数中。 PSW的影响:标志不影响。,例如: ORG 0000H ;程序开始 MOV A ,#0FEH ;(A)=FEH INC A ;(A)=(A)+1=FFH INC A ;(A)=(A)+1=00H NOP END ;结束,2、减1指令(4条) 指令格式: DEC 操作数 指令功能: 将操作数中的数据减1,结果存入 操作数中。 PSW的影响:标志不影响。,例如: ORG 0000H ;程序开始 MOV A,#02H ;(A)=02H DEC A ;(A)=(A)-1=01H DEC A ;(A)=(A)-1=00H DEC A ;(A)=
28、(A)-1=FFH NOP END ; 结束,本节总结,1、算术运算指令对PSW标志位的影响,重 点注意CY、OV、AC等标志位。 2、INC指令和DEC指令不影响CY、OV、AC 等标志位。,指令练习,1、指出下列程序中,每条指令的执行结果,ORG 0000H MOV 30H , #52H MOV A , #78H MOV A , #30H MOV R0 , #30H MOV A , R0 LOOP:SJMP LOOP END,;程序开始 ;(30H)=52H ;(A)=78H ;(A)=30H ;(R0)=30H ;(A)=52H,(RO)=30H ;循环跳转 ;结束,2、编程,将30H地
29、址开始的连续10个存储单元分别存入0 9 这10个数。,方法一: ORG 0000H ;程序开始 MOV 30H , #0 ;(30H)=0 MOV 31H , #1 ;(31H)=1 MOV 32H , #2 ;(32H)=2 ;略 MOV 39H , #9 ;(39H)=9 LOOP: SJMP LOOP ;循环 END ;结束,方法二: ORG 0000H MOV A , #0 MOV R0 , #30H MOV R1 , #10 LOOP1: MOV R0 , A INC A INC R0 DJNZ R1 , LOOP1 LOOP2: SJMP LOOP2 END,; 程序开始 ;(A
30、)=0 ;(R0)=30H ;(R1)=10 ;(R0)=A ;(A)=(A)+1 ;(R0)=(R0)+1 ;(R1)=(R1)-1,不为零跳 ;循环 ;结束,3.3.3 逻辑运算类指令(24条),主要用于对2个操作数按位进行逻辑操作,结果送到 A或直接寻址单元。 主要操作 与、或、异或、移位、取反、清零等。 对标志位的影响 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。,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;(
31、direct)A(direct) ORL direct,#data ;(direct)data(direct),例:71H和56H相或: 01110001 (71H) ) 01010110 (56H),01110111 即77H,后两条指令,若直接地址为I/O端口,则为“读改-写”操作。,例:,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 逻
32、辑与指令 (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端口,则为“读改写”操作。,例:,MOV A,#45H MOV R1,#25H MOV 25H,#79H ANL A,R1 ANL 25H
33、,#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) d
34、ata(direct),00100111 即27H,后两条指令,若直接地址为I/O端口,则为“读改写”操作。,例:,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 Operatio
35、n,5 循环移位指令(4条),RL A RR A RLC A RRC A,后两条指令,影响P标志和CY。,例:,若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位状态不变。,3.3.4 控制转移类指令( 17条),共有控制程序转移类指令(不包括位操作类的转移指令)。此类
36、指令一般不影响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后跟的是绝
37、对地址, 而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,间接转移指令:JMP A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。 转移地址由A+DPTR形成,并直接送入PC。 指令对A、DPTR和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。,(2)第四条指令与前三条指令相比有所不同,2 条件转移指令(8条),条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。,一、判A内容是否为0转移指令(2条),JZ rel ;如果A=
38、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。
39、,二、比较不等转移指令(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(进位位)来反映哪
40、个数大,哪个数小。 如果前面的数大,则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 direc
41、t,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
42、;短调用指令(2字节) 上面两条指令都是在主程序中调用子程序,两者的区别: 对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的2KB存储区之内。 使用时可以用: LCALL 标号 ;标号表示子程序首地址 ACALL 标号 来调用子程序。,指令的执行过程是:当前PC压栈,子程序首地址送 PC,实现转移。,二、返回指令 (2条),子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了。 RET;子程序返回指令 RETI;中断子程序返回指令 两者不能互换使用。,RET指令的执行过程是:堆栈栈顶内容(2字节,调用时保存的当前PC值)弹出给PC,实现返回。 R
43、ETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。,4 空操作指令(1条),NOP 空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。,3.5 位操作指令( 17条),MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。 在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。 位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH); 可以位寻址的特殊功能寄存器:8031中有一,些SFR是可以进行位寻址的,这些SF
44、R的特点是其字节地址均可被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
45、 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
46、 ;先将指定的位地址中的值取出后取反,再和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
47、,rel 第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。 同样理解:JB bit,标号 第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。,P3.2和P3.3上各接有一只按键, 要求它们分别按下时 (P3.2=0或 P3.3=0),分别使P1口为0或FFH。 START:MOV P1,#0FFH MOV P3,#0FFH L1: JNB P3.2,L2 ; JNB P3.3,L3 ; P3.2=1, P3.3=1,等待 LJMP L1 L2: MOV P1,#00H ; P3.2=0,使P1口全为“0” LJMP L1 L3: MOV
48、P1,#0FFH ; P3.3=0,使P1口全为“1” LJMP L1,举例:,伪指令又称汇编程序控制译码指令,属说明性汇编指令。 “伪”字体现在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编时用的某些命令,在汇编时执行某些特殊操作。 MCS-51单片机汇编语言程序设计中,常用的伪指令(七条): ORG定位伪指令 END结束汇编伪指令 EQU赋值伪指令 DB定义字节指令 DW定义数据字指令 DS定义存储区指令 BIT位定义指令,3.4 伪指令,1、起始地址伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起始地址, 设置在程序开始处。 例: Org 0000h ljmp main org 0100h main: . 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一 次,在程序的最末尾。 例: end,3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式: 标号名称 EQU 数值或汇编符号 “标号名称”在源程序中可以作数值使用,也可以作数据地址、位地址使用。 先定义后使用,放在程序开头。 例: led_lamp equ p1.0 counter equ 100 display_addr equ 2000h . mov r0, #counter mov dptr, #display_ad
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 配电网设备运维员安全生产意识强化考核试卷含答案
- 家用电热水器维修工复试能力考核试卷含答案
- 2026年医疗纠纷人民调解实务课件(含案例分析)
- 2026年糖尿病专科护理
- 电解槽计算机监控工安全规程评优考核试卷含答案
- 山石工岗前变革管理考核试卷含答案
- 炉外精炼工岗位持续改进考核试卷含答案
- 钒铁沉淀工岗位实践综合技能考核试卷含答案
- 残疾人就业辅导员安全宣贯测试考核试卷含答案
- 圆珠笔制造工风险识别模拟考核试卷含答案
- 2026新教材全国培训:统编版小学语文五年级教材解析
- 压力容器检验专项施工方案
- 2026年云南高考(历史)考试试卷真题及答案
- 2026年医师定期考核业务水平测评理论考试(人文医学)练习题及答案
- 踔厉奋发 2026-2027学年第一学期初中一年级道德与法治教学工作计划
- 2025年高校教学统计分析岗笔试试题(附答案)
- 2026年四川成都市初中学业水平考试生物试卷真题(含答案详解)
- 高考志愿填报数据特征与分布规律研究
- 福建省物业管理师职业技能鉴定考试(技能实操中级、四级)题库及答案
- PEF热收缩膜应力分析技术
- 电力重大事故隐患判定标准2026版解读
评论
0/150
提交评论