单片机学习第三章指令系统.PPT

上传人:本田雅阁 文档编号:2309247 上传时间:2019-03-19 格式:PPT 页数:100 大小:1.92MB
返回 下载 相关 举报
单片机学习第三章指令系统.PPT_第1页
第1页 / 共100页
单片机学习第三章指令系统.PPT_第2页
第2页 / 共100页
单片机学习第三章指令系统.PPT_第3页
第3页 / 共100页
亲,该文档总共100页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机学习第三章指令系统.PPT》由会员分享,可在线阅读,更多相关《单片机学习第三章指令系统.PPT(100页珍藏版)》请在三一文库上搜索。

1、第三章 80C51单片机指令系统,内容提要:,3-1 汇编语言与指令系统简介,3-2 数据传送类指令,3-3 算术运算类指令,3-4 逻辑运算类指令,3-5 控制转移类指令,3-6 位操作类指令,高级语言:,3.1 指令的格式及寻址方式,一、汇编语言程序设计的意义 什么是程序? 完成某项特定任务的指令的集合。 计算机按程序一条一条地依次执行指令,从而完成指定任务。 要让计算机完成各项任务,就应设计各种程序。,汇编语言:,机器语言:,程序设计语言:,用二进制代码表示指令和数据。,用助记符表示指令操作功能,用标号表示操作对象。,独立于机器,面向过程,接近自然语言和数学表达式.,汇编语言程序的每一条

2、语句都与计算机的某一条指令对应,所以必需熟悉指令系统。 指令 = 操作码 + 操作数 操作码表示了该指令所能执行的操作功能。 操作数表示参加操作的数的本身或操作数所在的地址。 二、MCS-51指令格式:,标号:,操作码助记符,操作数,;注释,标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由18个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。,操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个

3、操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。,MCS-51系列单片机的指令系统简介 111条指令,共分五大类: 数据传送类;(29条) 算术运算类;(24条) 逻辑运算类;(24条) 控制转移类;(17条) 位操作类。(17条),指令中操作数的描述符号: Rn 工作寄存器R0 R7 Ri 间接寻址寄存器R0、R1 Direct 直接地址,包括内部128B RAM单元地址、 26个SFR地址。 #data 8

4、位常数 #data 16 16位常数 addr 16 16位目的地址 addr 11 11位目的地址 rel 8位带符号的偏移地址 DPTR 16位外部数据指针寄存器 bit 可直接位寻址的位,A 累加器 B 寄存器B C 进、借位标志位,或位累加器 间接寄存器或基址寄存器的前缀 / 指定位求反 (x) x中的内容 (x) x中的地址中的内容(间接寻址中的内容) 当前指令存放的地址,三、寻址方式 寻找操作数存放单元的地址的方式,共7种方式。 1、立即数寻址 所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀 MOV A,#3AH 2、寄存器寻址 操作数存放在工作寄存器R0 R7

5、中,或寄存器B中。 MOV R1,A 3、直接寻址 指令中直接给出操作数的地址。 MOV A,3AH MOV 30H,DPH,图3.1 立即数寻址示意图,Mov A,#3AH,图3.2 寄存器寻址示意图,Mov R1,A,图3.3 直接寻址示意图,Mov A,3AH,MOV 3AH,#65H,MOV R0,#3AH,MOV A,R0,4、寄存器间接寻址 指令中寄存器的内容作为操作数存放的地址,该地址里面的内容才是操作数,在工作上间接寻址寄存器前用“”表示前缀。 例如:,5、变址寻址 操作数地址 = 变地址 + 基地址 基地址寄存器 DPTR 或 PC 变址寄存器 A 该寻址方式常用于访问程序存

6、储器,查表。 如 MOVC A,A + DPTR MOVC A, A + PC,图3.5 变址寻址示意图,MOVC A,A+DPTR,6、相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。 例如 “李同学20岁,张同学比李同学大3岁,问张同学多少岁?” 这就是一个相对寻年龄的问题,而相对寻址与此类似。 如 JC 60H ;设(PC) = 2000H为基址,相对偏移量为60H; ; 则当C = 1时,转移的目的地址 = 2000H + 2 + 60H,7. 位寻址 位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS

7、-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。 位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H2FH,共16个RAM单元,位地址为00H7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。,图3.6 位寻址示意图,SETB 3DH,设内部RAM 27H单元的内容是00H,执行SETB 3DH后,由于3DH对应内部RAM 27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3.6所示。,3.2.1 数据传送

8、类指令 数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部 RAM、寄存器、外部RAM以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。,数 据,目的地址 源地址,3-2 数据传送类指令,一、内部RAM与SFR数据传送类 1、一般数据传送指令,回忆前述操作数描述符:A,direct,Rn,Ri,#data,DPTR等。 经排列组合可写出下列指令: MOV A,Rn ;(A) (Rn)以下类似。,MOV A,direct MOV A,Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#d

9、ata,以累加器A为目标操作数的指令;,以寄存器Rn为目标操作数的指令;,MOV direct,Rn MOV direct,direct MOV direct,Ri MOV direct,#data MOV Ri,A MOV Ri, direct MOV Ri,#data MOV DPTR,#data16 ;唯一的16位数据传送指令。 上述指令不影响任何标志位,但PSW的P位除外。,(direct),(A),MOV direct,A ;,以Direct为目标操作数的指令;,以间接地址为目标操作数的指令;,上述指令不影响任何标志位,但PSW的P位除外。 注意:MOV Rn,Rn MOV Ri,

10、Ri MOV Rn, Ri MOV #data, A 等等指令是非法指令。,哇!好容易出错啊!,教材例题,【例3.9】 若(R1)21H,(21H)55H,执行指令MOV A,R1后的结果为: (A)=55H,而R1的内容和21H单元的内容均不变(keil软件上运行),【例3.12】 若(R1)30H,(30H)22H,(A)34H,执行指令MOV R1,A后的结果为: (30H)34H,R1和A当中的内容不变。,课堂练习题,1、若(R1)=30H,(A)=40H, (30H)=60H,(40H)=08H,试分析执行下列程序段后上述各单元内容的变化。 MOV A,R1 MOV R1,40H M

11、OV 40H,A MOV R1,#7FH,2、若(50H)=40H,问执行以下程序段后各个寄存器和内部RAM40H、41H、42H单元中的内容各为多少? ORG 00H MOV A,50H MOV R0,A MOV A,#00H MOV R0,A MOV A,#3BH MOV 41H,A MOV 42H,41H,用keil进行调试时,起始地址为00h,二、 累加器A与外部RAM数据传送 MOVX A,Ri MOVX A, DPTR MOVX Ri, A MOVX DPTR,A 执行过程中会使/WR、/RD有效。,【例3.15】 把外部数据存储器2040H单元的内容送入内部寄存器R2中。,MOV

12、 DPTR,#2040H MOVX A,DPTR MOV R2,A,例1:将内部RAM50H的内容传送到外部RAM40H中。 解:MOV A, 50H MOV R0, #40H MOVX R0, A,例2、试编写一程序段,实现将外RAM 0FAH单元中的内容传送到外RAM 14FFH单元中。,解: MOV R0,#0FAH MOVX A,R0 MOV DPTR,#14FFH MOVX DPTR, A,三 查表指令(累加器A与ROM之间的数据传送)MOVC A,A + DPTR MOVC A, A + PC,【例3.16】 设A=35H,执行1000H:MOVC A,A+PC指令后的结果: 首先

13、把累加器A中的内容加上本条指令执行后的PC值1001H,然后将程序存储器1036H单元的内容送入累加器A中,即,A(1036H)ROM。,【例3.19】 把程序存储器0150H单元的内容取出送到外部RAM1070H单元中。 MOV DPTR,#0150H MOV A,#00H MOVC A,ADPTR MOV DPTR,#1070H MOVX DPTR,A,例3、设(A)= 一个十进制常数(09),试用查表法获得其相应的ASCII码。,解法I: MOV DPTR,#1000H MOVC A,A+DPTR (1000H)TAB:DB 30H DB 31H DB 32H,33H,34H,35H ,

14、解法II: MOVC A,A+PC TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H ,四 字节交换指令 XCH A,Rn XCH A,direct ;整字节交换 XCH A,Ri 低半字节交换 XCHD A,Ri; SWAP A ; 半字节交换,注意:只能是累加器A中内容和其他源操作数内容交换。不影响任何标志位。,【例3.20】 若(A)7AH,(R1)45H,(45H)39H,执行指令XCH A,R1后的结果: (A)45H,(R1)7AH; 若(A)7AH,(R1)45H (45H)39H 执行指令XCH A,R1后的结果: (A)39H,(45H)7A

15、H,(R1)45H,【例3.21】 设A=59H,R0=45H,(45H)=7AH,执行指令XCHD A,R0结果:,A=5AH,R0=45H(不变),(45H)=79H,五 堆栈操作指令 PUSH direct POP direct 不影响任何标志位。,例5、设(SP) = 36H,(DPTR)= 0123H,分析: 执行 PUSH DPL PUSH DPH 后,各单元中的内容。,内RAM,36H,37H,38H,SP,加1,再加1,H,23H,01H,POP direct 指令执行中,机器也自动进行两步操作: (1)(direct) (SP) (2)(SP) (SP) 1 例6、设(SP)

16、= 4BH,(4BH)= 01H,(4AH)= 23H 执行 POP DPH POP DPL 后,各单元中的内容。,内RAM,49H,4AH,4BH,SP,H,23H,01H,SP减1,SP再减1,DPH,DPL,DPTR,结论:1)PUSH 与 POP 操作过程刚好相反; 2)进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序; 3)可用于“保护现场,恢复现场”。,【例3.23】 设(30H)=51H,(40H)=6AH,将内部RAM的这两个单元的内容交换。 PUSH 30H ;30H单元的内容进栈 PUSH 40H ;40H单元的内容进栈 POP 30H ;将栈顶元素弹出,送入30H

17、单元 POP 40H ;再将下一个元素出栈,送入40H单元 执行结果:(30H)=6AH,(40H)=51H。,3.2.2 算术运算类指令,包括:加、 减、乘、除;加一、减一。 一、加法指令 1、不带进位的加法: ADD A,Rn ;(A) (A)+ (Rn)ADD A,direct ADD A,Ri ADD A,#data;带符号数相加时:若OV = D7c或D6c = 1,说明有溢出。无符号数相加时:若C = 1,说明有进位(其值 255)。,【例3.24】 设A=46H,R1=5AH,试分析执行指令ADD A,R1 ;AA+R1,结果:A=A0H,R1=5AH(不变)。,2、带进位的加法

18、: ADDC A,Rn ;(A) (A)+(Rn)+(C) ADDC A,direct ADDC A,Ri ADDC A,#data 上述四条指令多用于多字节数相加。,【例3.25】 设A=85H,(20H)=FFH,Cy=1,执行指令:ADDC A,20H ;AA+(20H)+Cy,执行情况见图3-13所示。,结果:A=85H, (20H)=FFH(不变)。,3、加1指令: INC A ;(A) (A)+1 ,以下类同。 INC Rn INC direct INC Ri INC DPTR,例2、设(R0)= 7EH; (7EH)= 40H,(7FH)0FFH 执行: INC R0; INC

19、R0 ; INC R0; (R0)= 7FH; (7FH)= 00H; (7EH)= 41H,DA A ;二 十进制调整指令。 执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二十进制调整。,本条指令必须紧跟在ADD指令的后面才能完成指令功能。 比如,刚才运算的是09H01H,计算机是按照16进制运算,答案是0AH,可是有时候我们需要得到10进制的结果,用这条DA A就能使结果变成10H。,二、减法指令 1、带借位的减法: SUBB A,Rn ;(A) (A)-(Rn)-(C) SUBB

20、A,direct SUBB A,Ri SUBB A,#data,例3、(A)=0C9H,(R2)=54H,C=1, 执行指令SUBB A,R2的结果 1100 1001 -(R2) 0101 0100 -C 1 0111 0100,执行该指令后(A)=74H,AC=0, C=0,OV=1,P=0,注意:如果需要不带借位的减法之前先清零C。(CLR C),2、减1指令: DEC A ;(A) (A)1 ,以下类同。 DEC Rn DEC Ri DEC direct,例4、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H 执行: DEC R0 DEC R0 ; DEC R0

21、; 结果为 :(R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。,三、乘法和除法指令 1、乘法: MUL AB ;(A)(B) 积的低8位在A中,积的高8位在B中;若乘积大于255,则OV=1, C总为0。 2、除法: DIV AB ;(A)(B),商在A中,余数在B中。若(B)= 0 ,则结果不定,(OV)= 1,(C)= 0。,【例3.29】 设A=32H(即50),B=60H(即96),执行指令MUL AB ;BAAB 后的结果: 乘积为12C0H(即4800)。A=C0H,B=12H。各标志位:Cy=0,OV=1,P=0。,【例3.30】 设A=FFH(255),B=12H

22、(18),执行指令DIV AB ;A BAB后的结果: 商A=0EH(14),余数B=03H(3)。 标志位:Cy=0,OV=0,P=1。,3.2.3 逻辑运算类指令,共分两大类:单字节逻辑操作,双字节逻辑操作,共24条。 一、单字节逻辑操作指令 CLR A ;(A) 0 ; MOV A,#00H CPL A ; A中8位按位求反。,循环左移、右移指令:,RL A RLC A RR A RRC A 注:左移一位相当于乘2;右移一位相当于除2。,二、双字节逻辑操作指令 “与操作”: ANL A,Rn ;(A) (A)(Rn),以下类同。 ANL A,direct ANL A,Ri ANL A,#

23、data ANL direct,A ANL direct,#data,例1、(P1)= 35H,使其高4位输出0,低4位不变。,解;ANL P1,#0FH 此做法称为“屏蔽”位。,“或操作”: ORL A,Rn ;(A) (A)(Rn),以下类同。 ORL A,direct ORL A,Ri ORL A,#data ORL direct,A ORL direct,#data,例2、将A中的低3位送入P1中,并且保持P1中高5位不变。,ANL A,#07H ANL P1,#0F8H ORL P1,A ; (P1)= P17P16P15P14P13A2A1A0 这称为“数位组合”。,“异或操作”:

24、 XRL A,Rn ; (A) (A)(Rn),以下类同。 XRL A,direct XRL A,Ri XRL A,#data XRL direct,A XRL direct,#data,例3、设(P1)= 0B4H = 10110100B,执行:,XRL P1,#00110001B 10110100B : (P1)= 10000101B = 85H 这称为“指定位取反”。,在上述ANL、ORL、XRL操作中,用于端口操作时,无论P0 P3是第一,还是第二操作数,都遵循“读修改写”端口锁存器的操作。,3.2.4 控制转移类指令,非法,;转移有效,比较LJMP、AJMP、SJMP、JMP转移的起

25、点和范围:,2K,LCALL addr16 ;长调用 ACALL addr11 ;短调用,LCALL addr16 ;转移范围64KB,不影响标志位。执行中自动完成如下过程: (PC) (PC) + 3 (SP) (SP)+ 1 (SP) (PC7 0), 保护断点地址低字节; (SP) (SP)+ 2 (SP) (PC15 8),保存断点地址高字节; (PC) addr16 ,目的地址送PC,转子程序。,二、调用指令,执行结果:(SP)= 09H,(09H)= 21H,(08H)= 03H, (PC)= 3456H,转移范围与(PC)+ 2在同一个2KB内。不影响任何标志位,执行中机器自动完

26、成下列过程: (PC) (PC)+ 2 (SP) (SP)+ 1 (SP) (PC7 0) (SP) (SP)+ 2 (SP) (PC15 8) (PC10 0) addr10 0,ACALL addr11 :,三、返回指令 从子程序返回主程序。 RET ;调用子程序返回; RETI ;中断子程序返回。,(PC15 8) (SP) (SP) 1 (PC7 0) (SP) (SP) (SP) 2,其机器自动操作过程如下:,比较两种返回指令含义上的异同点 结论:RET返回地址事先已知,而RETI的返回地址在程序执行中产生的,不固定。不影响标志位,但PSW不能恢复到中断前的状态。,(SP),空操作指

27、令 NOP ;空操作 不执行任何操作,仅仅使(PC)+ 1,继续执行下条指令,不影响标志位,在ROM中占一个字节,用于延时调整。,二、条件转移指令 实现按照一定条件决定转移的方向,分三类: 累加器A判零转移指令 比较不相等转移指令 减一不为零转移指令,JZ rel : 若(A)= 0 ,则转移,否则顺序执行。 JNZ rel : 若(A) 0,则转移,否则顺序执行。 转移目的地址 = (PC)+ 2 + rel 不影响任何标志位。,1、判零转移 JZ rel JNZ rel,例1、将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传

28、送,试编程。,解: MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1: MOVX A,DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2: SJMP LOOP2,2、比较转移指令 功能:比较二个字节中的值,若不等,则转移。 CJNE A,direct,rel CJNE A,#data,rel CJNE Ri,#data,rel CJNE Rn,#data,rel,该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。 转移目的地址 = (PC)+ 3 + rel

29、 若第一操作数内容小于第二操作数内容,则(C)= 1,否则(C)= 0。,3、循环转移指令 DJNZ Rn,rel ;(二字节指令) DJNZ direct,rel ;(三字节指令) 本指令也为双功能指令,即减1操作和判断转移操作。 第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。 转移目的地址 = (PC)+ 2或3 + rel,例3、将8031内部RAM的40H 4FH单元置初值#A0H #AFH。,解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP: MOV R0,A INC R0 INC A DJNZ R2,LOOP ,3.2.5 位操作类

30、指令,包括:位传送指令、条件转移指令、位运算指令。 位操作由单片机内布尔处理器来完成。 位地址的四种表示: 1)使用直接位地址表示;如20H、30H、33H等; 2)使用位寄存器名来表示;如C、OV、F0等; 3)用字节寄存器名后加位数来表示; 如PSW.4、P0.5ACC.3等; 4)字节地址加位数来表示;如20.0、30.4、50.7等。,一、位传送指令 MOV C,bit ;(C) (bit) MOV bit,C ; (bit) (C),二、位状态控制指令 CLR bit ;(bit) 0 SETB bit ;(bit) 1 CPL bit ;(bit) (/ bit) CLR C ;(

31、C) 0 SETB C ;(C) 1 CPL C ;(C) (/ C),例1、编程通过P1.0线连续输出256个宽度为5个机器周期长的方波。,解: MOV R0,#00H CLR P1.0 LOOP:CPL P1.0 NOP NOP DJNZ R0,LOOP,ANL C,bit ;(C) (C)(bit) ANL C,/ bit ;(C) (C)(/ bit),ORL C,bit ;(C) (C)(bit) ORL C,/bit ;(C) (C)(/bit),三、位逻辑操作指令,例2、用软件实现下图所示的P1.0 P1.3间的逻辑运算。,解: MOV C,P1.1 ORL C,P1.2 ANL

32、 C,P1.0 MOV P1.3,C,P1.1,P1.2,P1.0,P1.3,四、布尔条件转移指令 有5条,分别对C和直接位地址进行测试, 并根据其状态执行转移。 1、判布尔累加器转移 JC rel ;(C)= 1,转移,否则顺序执行。 JNC rel ;(C)= 0,转移,否则顺序执行。 不影响标志。转移地址 :(PC) (PC)+ 2 + rel,解: MOV A,30H CJNE A,40H,LOOP SETB 7FH SJMP $ LOOP1: JC LOOP2 MOV 20H,A MOV 21H,40H SJMP $ LOOP2: MOV 20H,40H MOV 21H,A SJMP

33、 $,例3、比较内部RAM的30H和40H单元中的二个无符号数的大小,将大数存入20H单元,小数存入21H单元,若二数相等,则使内RAM的第127位置1。,2、判位变量转移 JB bit,rel ;(bit)= 1,则转移,否则顺序执行。 JBC bit,rel ;(bit)= 1,则转移,否则顺序执行, ; 且无论(bit)是否等于1,均使该位清零。 JNB bit,rel ;(bit)= 0,则转移,否则顺序执行。 ; 不影响标志。,例4、试判断A中的正负,若为正数,存入20H单元;若为负数则存入21H单元。,解: JB ACC.7,LOOP MOV 20H,A SJMP $ LOOP:MOV 21H,A SJMP $,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1