《单片机指令与编程.ppt》由会员分享,可在线阅读,更多相关《单片机指令与编程.ppt(48页珍藏版)》请在优知文库上搜索。
1、第二讲:指令与编程本讲重点:本讲重点: 寻址方式;寻址方式; MCS-51MCS-51指令集;指令集; 伪指令;伪指令; 汇编语言与简单程序设计汇编语言与简单程序设计. .第三章 指令系统及程序设计(P.43)5151系列单片机指令集含有系列单片机指令集含有111111条指令条指令 每条指令在执行时要花去一定的每条指令在执行时要花去一定的时间时间,以机器,以机器周期为单位。按指令周期为单位。按指令执行时间执行时间分类:分类:单周期单周期(64(64条条););双周期双周期(45(45条条););4 4周期周期(2(2条条) )按指令的按指令的功能功能分类,可分为分类,可分为5 5大类:大类:数
2、据传送类数据传送类(2929条);条);算术运算类算术运算类(2424条)条)逻辑运算及移位类逻辑运算及移位类(2424););控制转移类控制转移类(1717条)条)位操作类位操作类(1717条)条)每条指令在程序存储器每条指令在程序存储器ROMROM中占据一定的中占据一定的空间空间,以字节为单位。按指令以字节为单位。按指令所占字节数所占字节数分类:分类:单字节单字节(49(49条条););双字节双字节(46(46条条););3 3字节字节(16(16条条) )ASM-51指令的格式(P.44)方括符方括符 表示可选项表示可选项标号标号代表指令所在地址,代表指令所在地址,1-81-8个字母个字
3、母/ /数字,数字,“: :”结尾结尾操作码操作码就是指令功能助记符,指令实体就是指令功能助记符,指令实体目的操作数目的操作数源操作数源操作数注释注释,以,以“; ;”开头开头 标号标号: : 操作码操作码 目的操作数目的操作数, ,源操作数源操作数; ;注释注释 51单片机指令的寻址方式(P.45)寄存器寻址寄存器寻址立即寻址立即寻址寄存器间接寻址寄存器间接寻址直接寻址直接寻址变址寻址变址寻址( (基址寄存器基址寄存器+ +变址寄存器间接寻址变址寄存器间接寻址) )相对寻址相对寻址位寻址位寻址寻址方式:寻址方式:指令按地址获得操作数的方式指令按地址获得操作数的方式七种寻址方式七种寻址方式,
4、,一条指令可能含多种寻址方式一条指令可能含多种寻址方式寄存器寻址寄存器寻址(P.45)(P.45)从从寄存器寄存器中读取操作数中读取操作数或或存放操作数进存放操作数进寄存器寄存器例:例:MOV AMOV A,B B ; (A A) (B B) MOV 30HMOV 30H,R0R0 ;(30H30H)(R0R0) MOV AMOV A,R1 R1 ; (A A) (R1R1)立即寻址立即寻址(P.45)(P.45)操作数直接就出现在指令中操作数直接就出现在指令中例:例:MOV AMOV A,#64H #64H ;(A) (A) 立即数立即数 64H64H ADD AADD A,#05H#05H
5、 ;(A)(A)(A)+(A)+立即数立即数 05H05H注意:注意:符号符号“# #”表明其后跟的是表明其后跟的是立即数立即数, , 立即数立即数就是数字量本身。就是数字量本身。寄存器间接寻址寄存器间接寻址(P.46)(P.46)寄存器中的寄存器中的内容内容是一个是一个地址地址,由该,由该地址地址单元单元寻址到所需的寻址到所需的操作数操作数注意注意:1 1)“间接间接”表示某寄存器中的表示某寄存器中的“内容内容”只是一个只是一个“单元地址单元地址”,这个地址单元中存放的,这个地址单元中存放的数据数据才才是要找的是要找的“操作数操作数”。2 2)符号符号“ ”表示表示“在在”,其,其含义含义与
6、与读音读音皆同皆同“atat”。例:例: MOV R1MOV R1,#30H ;(R1) #30H ;(R1) 立即数立即数30H30H MOV R1MOV R1,#30H ;(R1) #30H ;(R1) 立即数立即数30H30H MOV R1MOV R1,#0FH ;#0FH ;(30H)(30H)立即数立即数0FH0FH MOV AMOV A,R1 ;R1 ;(A)(30H)=#0FH(A)(30H)=#0FH直接寻址直接寻址(P.46)(P.46)指令中指令中直接直接给出了操作数所在给出了操作数所在单元的地址或名称单元的地址或名称 例:例:MOV R1MOV R1,1FH1FH ;(R
7、1) (R1) (1FH1FH) MOV 30HMOV 30H,4AH4AH ;(30H)(30H)(4AH4AH)在本单片机中规定:访问特殊功能寄存器在本单片机中规定:访问特殊功能寄存器SFRSFR只能只能采用直接寻址方式。例如:采用直接寻址方式。例如:MOV A, SP MOV A, SP ; (A) (SP) (A) (SP) MOV A, 81H MOV A, 81H ; (A) (SP)(A) (SP) MOV P1, #5AH MOV P1, #5AH ; (P1)(#5AH) (P1)(#5AH) MOV 90H,#5AH MOV 90H,#5AH ; (P1)(#5AH)(P1
8、)(#5AH) MOV B, 30H MOV B, 30H ; (B) (30H) (B) (30H) 相同相同相同相同存储器配置(片内RAM)l89C89C5151片内片内RAMRAM 128128字节字节(00H00H7FH7FH)l89C89C5252片内片内RAMRAM 256256字节字节(00H00H0FFH0FFH)00H00H20H20H2FH2FH7FH7FH1FH1FH30H30H80H80HFFHFFH52子系列才有子系列才有的的RAM区区普通普通RAM区区位寻址区位寻址区工作寄存器区工作寄存器区SFR分布在分布在80H-FFH其中其中92个位个位可位寻址可位寻址80H8
9、0HFFHFFH89C51 128128字节字节89C52 256256字节字节只能直接寻址只能直接寻址只能寄存器间接寻址只能寄存器间接寻址变址寻址变址寻址(P.47P.47) 也称为也称为: : 基址寄存器基址寄存器+ +变址寄存器变址寄存器间接寻址间接寻址以以1616位的位的地址指针寄存器地址指针寄存器DPTRDPTR或或 1616位的位的PCPC寄存器为寄存器为基址寄存器基址寄存器,以,以累加器累加器 A A 为变址寄存器为变址寄存器,两者中的,两者中的“内容内容”形成一个形成一个1616位的位的“地址地址”,该,该“地址地址”所所指的存储单元中的内容才是操作数。指的存储单元中的内容才是
10、操作数。P47P47例例: : 设:设:A A中已存有中已存有#A4H#A4H,DPTRDPTR中已存有中已存有#1234H#1234H MOVC AMOVC A, A+DPTRA+DPTR;(A A)(A)+(DPTR)(A)+(DPTR)操作:操作:将将A4HA4H+ +1234H1234H= =12D8H12D8H单元中的单元中的数数放进累加器放进累加器A A相对寻址相对寻址(P.47)(P.47)当前当前PCPC值加上指令中规定的偏移量值加上指令中规定的偏移量 relrel,构成实际,构成实际的操作数地址的操作数地址例:例: AJMP relAJMP rel 操作:跳转到的操作:跳转到
11、的目的地址目的地址 = = 当前当前1616位位PCPC值值 + + rel rel注意注意:1 1)“当前当前PCPC值值”指程序中指程序中下一条指令所在的首地址下一条指令所在的首地址, 是一个是一个1616位数;位数;2 2)符号符号“relrel”表示表示“偏移量偏移量”, ,是一个带符号的单是一个带符号的单字字 节数节数, ,范围是范围是: :-128-128+127+127(80H(80H7FH), 7FH), 在实际编程中,在实际编程中,“relrel” 通常用标号代替通常用标号代替位寻址位寻址(P.48)(P.48)指令中直接给出了操作数所在的指令中直接给出了操作数所在的位地址位
12、地址。例:例: CLR P1.0CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB P1.7SETB P1.7 ;(P1.7) 1(P1.7) 1 CPL P1.5CPL P1.5 ;( P1.5 ) NOT( C )( P1.5 ) NOT( C ) MCS-51指令集功能分五类,共111条指令MCS-51MCS-51指令集指令集(五大类功能)(五大类功能)P.49P.49页页数据数据传送传送类指令:类指令: (2929条条)算术算术运算类指令:运算类指令: (2424条条)逻辑逻辑运算及移位类指令:运算及移位类指令: (2424条条)控制控制转移转移类指令:类指令: (1717
13、条条)位位操作(布尔操作)类指令:(操作(布尔操作)类指令:(1717条条)内部存储器间传送:内部存储器间传送: (MOVMOV1616条)条)外部数据存储器与累加器间传送外部数据存储器与累加器间传送: : (MOVXMOVX4 4条)条)程序存储器向累加器传送:程序存储器向累加器传送: (MOVCMOVC2 2条)条)数据交换:(数据交换:(XCHXCH,XCHDXCHD,SWAPSWAP5 5条)条)堆栈操作:堆栈操作: (PUSHPUSH,POPPOP2 2条)条)(一)数据传送类指令(5种/29条) P.49见见P.49P.49的表的表3 32 2RnRn: R0R0R7R7RiRi:
14、 R0R0,R1R1#data#data:8 8位立即数位立即数#data16#data16:1616位立即数位立即数directdirect:直接地址直接地址relrel: 8 8位带符号偏移量位带符号偏移量(一)数据传送类指令(5种/29条)内部存储器间传送指令内部存储器间传送指令 (16(16条条) ): MOV MOV 类指令的类指令的操作方向操作方向总是总是后面后面的的操作数操作数 指向指向前面前面的操作数的操作数!例例: :MOV AMOV A,30H 30H (A A)(30H30H) 数据传送类指令(续) P.52外部数据存储器与累加器间传送外部数据存储器与累加器间传送 (4(
15、4条条):):MOVXMOVX类指令可在类指令可在累加器累加器与以与以 DPTRDPTR或或 RiRi所代表的所代表的外部外部 RAMRAM 之间进行数据传送。之间进行数据传送。例如例如: : MOVX AMOVX A, DPTR DPTR (A)(A) (DPTR(DPTR)MOVX AMOVX A, Ri Ri (A)(A) (Ri) (Ri) MOVX MOVX DPTR, A DPTR, A (DPTR(DPTR) ) ( (A) A) MOVX MOVX Ri, A Ri, A (Ri) (Ri) ( (A)A)程序存储器向累加器传送指令(程序存储器向累加器传送指令(2 2条):条)
16、: MOVC AMOVC A, A+DPTRA+DPTR通常称为查表指令,寻址方式属通常称为查表指令,寻址方式属: : “基址寄存器基址寄存器 + + 变址寄存器变址寄存器间接寻址间接寻址”数据传送类指令(续) P.52 A+DPTRA+DPTR指向指向程序存储器程序存储器中的某单元。传送给累中的某单元。传送给累加器加器ACC ACC 的数据就是程序中事先写进去的的数据就是程序中事先写进去的表格数表格数据。据。这些表格数据往往用伪指令这些表格数据往往用伪指令 DB,DW DB,DW 等定义等定义在程序中。在程序中。数据传送类指令(续)(续)数据交换指令数据交换指令(5(5条条):): P.53P.53XCH AXCH A,direct direct ( (字节互换字节互换) )XCH AXCH A,Ri Ri ( (字节互换字节互换) ) XCH AXCH A,Rn Rn ( (字节互换字节互换) )(A A) (directdirect) 或或(Ri)(Ri),或,或(Rn)(Rn)XCHD AXCHD A, RiRi 累加器累加器 AccAcc的的低低4 4位位与与(Ri)(Ri)