590 likes | 726 Views
第 3 章 MCS-51 单片机 指令系统. 3.1 MCS-51 单片机指令格式和寻址方式. 3.2 MCS-51 单片机指令分类介绍. 3.3 MCS-51 单片机指令汇总. 本章要求. 1 了解掌握单片机指令格式和寻址方式. 2 了解掌握单片机的指令. 3.1 MCS-51 单片机指令格式和寻址方式. 一、指令系统概述. ● 指令是供用户使用的单片机的软件资源 。. ● 执行指令的集合就是指令系统。. ● 指令常以其英文名称或缩写形式助记符 -- 汇编语言。. ● 使用指令编写的程序称为汇编语言程序。.
E N D
第3章 MCS-51单片机指令系统 3.1 MCS-51单片机指令格式和寻址方式 3.2 MCS-51单片机指令分类介绍 3.3 MCS-51单片机指令汇总
本章要求 1 了解掌握单片机指令格式和寻址方式 2 了解掌握单片机的指令
3.1 MCS-51单片机指令格式和寻址方式 一、指令系统概述 ●指令是供用户使用的单片机的软件资源。 ●执行指令的集合就是指令系统。 ●指令常以其英文名称或缩写形式助记符--汇编语言。 ●使用指令编写的程序称为汇编语言程序。 ●指令系统没有通用性,编写的程序无法直接移植。 ●指令系统没有通用性,编写的程序无法直接移植。
3.1 MCS-51单片机指令格式和寻址方式 二、MCS-51单片机指令格式 ●指令的表示方法称为指令格式。 ●一条指令通常由操作码和操作数两部分组成。 操作码用来规定指令进行什么操作, 操作数则是指令操作的对象,是一具体的 数据,也可能数据的地址或符号。 1、一字节指令 ●一字节指令是指操作码和操作数同在一个字节内。 ◑例:INC DPTR,其功能为数据指针加“1”。 指令码为:1010 0011 ◑例:MOV A,Rn 其功能为把寄存器的数据传送给累加器。 指令码为:1110 1rrr ;rrr表示R0~R7的二进制编码。
3.1 MCS-51单片机指令格式和寻址方式 二、MCS-51单片机指令格式 2、二字节指令 ●二字节指令指操作码占一个字节,操作数占一个字节。 例:MOV A,#50H 指令码为:0111 0100 ;操作码。 0101 0000 ;操作数—立即数 3、三字节指令 ●三字节指令指操作码占一个字节,操作数占两个字节。 例:ANL 40H,#50H 指令码为:0101 0011 ;操作码。 0100 0000 ;操作数—直接地址 0101 0000 ;操作数—立即数
3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 ●寻址方式是指令所需要的数据通过什么方式获得。 1、寄存器寻址方式 ●寄存器的内容就是操作数。 ◑例:MOV A,R1 ●寄存器寻址主要对象是通用寄存器R0~R7的当前寄存器组。 ●部分专用寄存器(A、B、DPTR) 2、直接寻址方式 ●操作数直接以单元地址的形式给出。 例:MOV A,3AH ;把RAM 3AH单元中的数据送给A。
内部RAM 30H 80H 3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 3、寄存器间接寻址方式 ●寄存器的内容是操作数的地址。 例:MOV A,@R1 R1(30H) 如R1的内容是30H, 30H的内容是80H. A(80H) 指令执行后A的内容是80H。 ●只有R0或R1可作间址寄存器(地址指针)。
内部RAM 30H 80H 3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 4、立即寻址方式 ●操作数直接在指令中给出。 ●操作数称为立即数。 ●立即数前加 #,与直接地址的区别。 ◑例:MOV A,#30H 执行后A的内容是30H ◑例:MOV A,30H 执行后A的内容是80H
3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 5、变址寻址方式 ●变址寻址是以DPTR或PC作基址寄存器,以累加器 A作变址寄存器,两者的内容相加形成16位地址 --作为操作数地址。 如:(A) = 54H (DPTR)=3F21H (3F75H)= 7FH 例:MOV A,@A+DPTR 执行后A的内容是7FH ●变址寻址只能对程序存储器寻址。 MOVC A,@A+PC MOVC A,@A+DPTR JMP @A+DPTR ●累加器A的内容无符号数。 ●变址寻址只有三条指令:
3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 6、位寻址方式 ●内部RAM(20~2FH)中的位寻址 ●位地址(00H~7FH)寻址 ●单元地址加位数寻址 1 ◑例:SETB 00H SETB 20H.0
3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 6、位寻址方式 ●专用寄存器位寻址 ●直接位地址寻址 ●位名称寻址 ●寄存器符号加位数寻址 例定时器T0的启动控制 ◑例:SETB 8CH SETB TR0 SETB TCON.4
地址偏移量(rel) 3.1 MCS-51单片机指令格式和寻址方式 三、MCS-51单片机寻址方式 7、相对寻址方式 ●相对寻址方式是为程序转移设置的 ●转移目的地址=转移指令后地址+地址偏移量(rel) ●地址偏移量(rel)的数据范围是 -128~ +127 例: CJNE A ,#10 ,AXY NOP ┇ AXY: NOP
3.2 MCS-51单片机指令分类介绍 一. 指令格式中符号意义说明 ●Rn——当前寄存器组的通用寄存器,n=0~7。 ●Ri——可用作间接寻址的寄存器,i=0,1。 ●direct—8位直接地址,在指令中表示直接寻址。 寻址范围256个单元。 0~127(内部RAM单元地址)和 128~255(专用寄存器单元地址或符号)。 ● #data——8位立即数。 ●#datal6——16位立即数。
3.2 MCS-51单片机指令分类介绍 一. 指令格式中符号意义说明 ●addrl6 ——16位目的地址, 只限于在LCALL和LJMP指令中使用。 ●addr11——11位目的地址, 只限于在ACALL和AJMP指令中使用。 ●rel——相对转移指令中的偏移量,为8位带符号补码数。 ●DPTR——数据指针。 ●bit——内部RAM(包括专用寄存器)中的直接寻址位。 ●A ——累加器。 ●ACC——直接寻址方式的累加器。
● —箭头左边的内容被箭头右边的内容所取代。 3.2 MCS-51单片机指令分类介绍 一. 指令格式中符号意义说明 ● B ——寄存器B。 ●C——进位标志位, 它是布尔处理机的累加器,也称为累加位。 ●@——间址寄存器的前缀标志。 ●/ ——加在位地址的前面,表示对该位状态取反。 ●(×)——某寄存器或某单元的内容。 ●((×))——由×间接寻址的单元中的内容。
3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 1、概述 ●数据传送操作属复制性质,而不是搬家性质。 ●一般传送类指令的助记符为 “MOV”。 ●格式为: MOV <目的操作数>,<源操作数> 数据从右传送向左 右边为源操作数,表达数据的来源; 左边为目的操作数,表达数据的去向。
MOV A,#data ; A data MOV direct,#data ; direct data MOV Rn,#data ; Rn data MOV @Ri,#data ; (Ri) data 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 2、内部RAM数据传送指令组 ●立即数传送指令 8位立即数传送指令共4条: 16位立即数传送指令一条: MOV DPTR,#datal6;DPTR—datal6 指令的功能是将立即数的高8位送DPH, 将立即数的低8位送DPL。
MOV direct2,direct1 ;direct2 (direct1) MOV direct,Rn ;direct (Rn) MOV Rn,direct ; Rn (direct) MOV direet,@Ri ;direct ((R0)) MOV @Ri,direet ;(Ri) (direct) 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 2、内部RAM数据传送指令组 ●内部RAM单元之间的数据传送指令--共有5条指令
MOV A, Rn ;A (Rn) MOV Rn, A ;Rn (A) MOV A, direct ;A (direct) MOV direct, A ;direct (A) MOV A, @Ri ;A ((Ri)) MOV @Ri, A ;(Ri) (A) 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 2、内部RAM数据传送指令组 ●通过累加器的数据传送指令--共有6条指令
3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 3、外部RAM数据传送指令组 外部RAM单元只能使用间接寻址方法, 分别使用DPTR和R0(R1)作间址寄存器。 外部RAM数据传送只能通过累加器A ●使用DPTR进行间接寻址(寻址范围为64K) MOVX A,@DPTR ;A←((DPTR)) MOVX @DPTR,A ;(DPTR)←(A) ●使用Ri进行间接寻址(寻址范围为256) MOVX A,@Ri ;A←((Ri)) MOVX @Ri,A ;(Ri)←(A)
MOVC A,@A+DPTR ;A ((A)+(DPTR)) MOVC A,@A+PC ;A ((A)+(PC)) 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 4、程序存储器数据传送指令组 ●从程序存储器读出数据,只能向累加器A传送。
XCH XCHD SWAP 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 5、数据交换指令组 ●数据交换是指两个数据空间的数据交换操作。 ●数据交换通过累加器A进行操作。 ●交换指令有: △整字节交换XCH。 △半字节交换XCHD。 △高低半字节自交换SWAP。
XCH XCH XCHD XCH SWAP direct 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 5、数据交换指令组 ●数据交换指令图 A @Ri Rn XCH A,Rn ;Rn寄存器与A中数据全交换 XCH A,@Ri ;Ri间接地址中数据与A中数据全交换 XCH A,direct ;直接地址中数据与A中数据全交换 XCHD A,@Ri ;Ri间接地址中低4位数据与A中低4位数据交换 SWAP A ; A中低4位数据与高4位数据交换
例: A中数据是57H,R1的数据是30H,30H的内容是43H A 0 0 1 1 0 0 0 0 A 0 1 0 1 0 1 1 1 R1 0 1 0 1 0 1 1 1 R1 0 0 1 1 0 0 0 0 A 0 1 0 0 0 0 1 1 30H 0 1 0 1 0 1 1 1 30H 0 1 0 0 0 0 1 1 A 0 1 0 1 0 0 1 1 30H 0 1 0 0 0 1 1 1 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 5、数据交换指令组 ●交换指令举例 XCH A,R1 XCH A,@R1 XCHD A,@R1
例如: A中数据是57H,R1的数据是30H,30H的内容是43H A 0 1 0 1 0 1 1 1 R1 0 0 1 1 0 0 0 0 A 0 1 0 0 0 0 1 1 30H 0 1 0 1 0 1 1 1 A 0 1 1 1 0 1 0 1 30H 0 1 0 0 0 0 1 1 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 5、数据交换指令组 ●交换指令举例 XCH A,30H SWAP A
PUSH direct ;SP (SP)+1,(SP) (direct) POP direct ;direct ((SP)), SP (SP) -1 3.2 MCS-51单片机指令分类介绍 二. 数据传送类指令 6、堆栈操作指令组 ●进栈指令 其功能为内部RAM单元或专用寄存器内容送栈顶单元。 ●出栈指令 其功能为栈顶单元内容送内部RAM单元或专用寄存器。
INC DEC DA INC INC INC ADD、ADDC、SUBB ADD、ADDC、SUBB DEC DEC DEC ADD、ADDC、SUBB ADD、ADDC、SUBB MUL DIV #data DPTR INC 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 算术运算类指令共23条, ADD、ADDC、SUBB、MUL、 DIV、INC、DEC、DA等 A @Ri Rn direct B
3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 ●算术运算指令运算时会产生进位、借位、溢出等 标志并存放在程序状态寄存器PSW中。 √:表示有影响 INC、DEC对标 志位无影响。
ADD A,#data ;A (A)+data ADD A,Rn ;A (A)+(Rn) ADD A,direct ;A (A)+(direct) ADD A,@Ri ;A (A)+((Ri)) 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 1、加法指令组--共有4条加法运算指令 ●加法运算指令的一个加数总是累加器A,另一个加数可由 不同寻址方法得到, 其相加结果再送回累加器A。
负数 11001001 -正数 -01010101 +10101001 01110100 正数 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 ●例:(A)=0C2H,(R0)=0A9H,执行ADD A,R0对PSW的影响 11000010 CY←1← 01101011 (A)=+74H,(AC)=0, (CY)=0, (OV)=1 (A)=6BH,(AC)=0, (CY)=1, (OV)=1 如位3有进位,则辅助进位标志AC置“1”,反之AC清“0”。 如位7有进位,则进位标志CY置“1”,反之CY清“0”。 如位7有进位而位6没有进位或位6有进位而位7没有进位, 则溢出标志OV置“1”,反之,OV清“0”。
ADDC A,#data ;A (A)+data+CY ADDC A,Rn ;A (A)+(Rn)+CY ADDC A,direct ;A (A)+(direct)+CY ADDC A,@Ri ;A (A)+((Ri))+CY 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 2、带进位加法指令组--共有4条指令 ●对程序状态字PSW的影响同用加法指令
SUBB A,#data ;A (A)-data-CY SUBB A,Rn ;A (A)-(Rn)-CY SUBB A,direct ;A (A)-(direct)-CY SUBB A,@Ri ;A (A)-((Ri))-CY 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 3、带借位减法指令组--共有4条指令 ●指令的功能是从累加器A中减去不同寻址方式的操作数以 及进位标志C,其相减结果再送回累加器A。 ●用减法指令时对程序状态字PSW的影响 如位3有借位,则辅助进位标志AC置‘‘1”,反之AC清0”。 如位7有借位,则进位标志CY置‘‘1”,反之CY清“0”。 如位7有借位而位6没有借位或位7有借位而位6没有借位, 则溢出标志OV置“1”,反之,OV清“0”。
INC A ;A (A)+1 INC Rn ;Rn (Rn)+1 INC direct ;direct (direct)+1 INC @Ri ;(Ri) ((Ri))+1 INC DPTR ;DPTR (DPTR)+1 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 4、加1指令组--共有5条指令 ●用加1指令时对程序状态字PSW没有影响
DEC A ;A (A)-1 DEC Rn ;Rn (Rn)-1 DEC direct ;direct (direct)-1 DEC @Ri ;(Ri) ((Ri))-1 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 5、减1指令组--共有4条指令 ● 用减1指令时对程序状态字PSW没有影响
3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 6、乘除指令组 ●乘法指令 MUL AB △把累加器A和寄存器B中的两个无符号8位数相乘, 所得16位乖积低8位放A中,高8位放B中。 △对PSW状态的影响:进位标志位CY=“0”, 若OV=1,乘积超过255,否则OV=0。 ●除法指令: DIV AB △把被除数置于累加器A中、除数置于B中的两个无 符号8位数相除,所得商放A中,余数放B中。 △对PSW状态的影响:进位标志位CY=“0”, 若OV=1,表示除数=0,否则OV=0。
1 0 0 0 + 1 0 0 1 1 0 0 0 1 1 0 0 0 1 + 0 1 1 0 1 0 1 1 1 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 7、十进制调整指令 ●十进制调整指令指令DA A △用于十进制数(BCD码)加法运算结果的修正。 例:8+9=17 运算结果错误,因为(8+9)的结果应是17, 而运算所得到的结果却是11。应+6修正。
01010110 + 01100111 10111101 + 01100110 100100011 3.2 MCS-51单片机指令分类介绍 三. 算术运算类指令 △十进制调整的修正方法是: ◊A低4位>9或辅助进位位(AC)=1,则低4位加6修正。 A ← (A)+06H ◊A高4位>9或进位位(CY)=1,则高4位加6修正。 A ← (A)+60H ◊A高4位为9、低4位>9,则高4位和低4位分别加6修正。 A ← (A)+66H 例如。56+67=123 (A)=56H,(R5)=67H 执行指令: ADD A,R5 DA A 结果:(A)=23H,CY=1。
ANL、ORL、XRL ANL、ORL、XRL RL、RLC CLR、 CPL RR、RRC ANL、ORL、XRL ANL、ORL、XRL #data ANL、ORL、XRL 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 ●逻辑运算类和移位类指令共25条, ANL、ORL、XRL 异或、CLR、CPL、RR、RRC、RL、RLC等 A @Ri Rn direct
1 0 0 1 1010 ∧0 0 0 0 1 1 1 1 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 1、逻辑与运算指令组 ●逻辑运算都是按位进行的 ●逻辑与运算用符号“∧”表示。 0 0 0 0 1 0 1 0 ANL A,Rn ;A←(A)∧(Rn) ANL A,direct ;A←(A)∧(direct) ANL A,#data ;A←(A)∧data ANL direct,A ;direct←(direct)∧(A) ANL direct,#data ;direct←(direct)∧data 例:(A)=9AH,执行 ANL A,#0FH 结果(A)=0AH
1 0 0 1 1010 ∨0 0 0 0 1 1 1 1 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 2、逻辑或运算指令组 ●逻辑或运算用符号“∨”表示。 1 0 0 1 1 1 1 1 0RL A,Rn ;A←(A)V(Rn) 0RL A,direct ;A←(A)V(direct) ORL A,@Ri ;A←(A)V((Ri)) ORL A,#data ;A←(A)V data 0RL direct,A ;direct←(direct)V(A) 0RL direct,#data ;direct←(direct)V data 例:(A)=9AH,执行 ORL A,#0FH 结果(A)=9FH
1 0 0 1 1010 ⊕0 0 0 0 1 1 1 1 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 3、逻辑异或运算指令组 ●逻辑异或运算用符号“⊕”表示 1 0 0 1 0 1 0 1 0⊕0=0 ; 1⊕1=0 0⊕1=1 ; 1⊕0=1 XRL A,Rn ;A←(A)⊕(Rn) XRL A,direct ;A←(A)⊕(ditect) XRL A,@Ri ;A←(A)⊕((Ri)) XRL A,#data ;A←(A)⊕data XRL direct,A ;direct←(direet)⊕(A) XRL direct,#data ;direct←(direct)⊕data 例:(A)=9AH,执行 XRL A,#0FH 结果(A)=95H
CLR A ;A0 CPL A ;A (A) 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 4、累加器清“0”和取反指令组 ●累加器清“0”指令--1条: ●累加器按位取反指令--1条: 例:(A)=9AH 执行结果(A)=65H
A7 A7 A0 A0 C C A0 A0 A7 A7 3.2 MCS-51单片机指令分类介绍 四. 逻辑运算及移位类指令 5、移位指令组 ●移位指令只能对累加器A进行移位 △循环左移指令 RL A △循环右移指令 RR A △带进位位循环左移 RLC A △带进位位循环右移 RRC A ♣例:(A)=95H, 执行 RL A 结果(A)=2BH 0 0 1 0 1 011 0 1 0 1 0 11 0 RL A 结果(A)=56H
3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 控制转移指令分两类:无条件转移和有条件转移。 1、无条件转移指令组 ●长转移指令 指令格式 LJMP addrl6 ;PC←(addrl6) 转移范围大,可达64 KB。 ●绝对转移指令 指令格式 AJMP addrl1 ;PC10~0←(addrl1) 转移范围达2 KB。
3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 1、无条件转移指令组 ●短转移指令 指令格式 SJMP rel ;PC←PC+2+rel ●变址寻址转移指令 指令格式 JMP @A+DPTR ;PC←(A)+(DPTR)
若(A)=0,则PC (PC)+2+rel 若(A)≠O,则PC (PC)+2 若(A)≠O,则PC (PC)+2+rel 若(A)=O,则PC (PC)+2 3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 2、条件转移指令组 ●累加器判零转移指令 JZ rel JNZ rel
3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 2、条件转移指令组 ●数值比较转移指令---共有四条指令: CJNE A,#data, re ;A内容与立即数不等转移。 CJNE A,direct,rel ;A内容与RAM单元的内容不等 转移。 CJNE Rn,#data,rel ;Rn的内容与立即数不等转移。 CJNE @Ri,#data,re ;Ri内容为地址,该地址单元 内容与立即数比较,不等转移。
指令功能为:寄存器内容减1,如所得结果为0,则顺序指令功能为:寄存器内容减1,如所得结果为0,则顺序 执行;如没有减到0,则程序转移。 Rn (Rn)-1若(Rn)≠0,则PC (PC)+2+rel。 若(Rn)=0, 则PC (PC)+2 3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 2、条件转移指令组 ●减1条件转移指令 把减1与条件转移两种功能结合在一起的指令-2条 ●寄存器减1条件转移 指令格式: DJNZ Rn, rel ●直接寻址单元减1条件转移 指令格式: DJNZ direct, rel
●断点保护 PC (PC)+2 SP (SP)+1,(SP) (PC)7~0 SP (SP)+1,(SP) (PC)15~8 ●构造目的地址 PC10~0 addr11 3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 3、子程序调用与返回指令组 ●绝对调用指令 指令格式为:ACALL Addr11 为了实现子程序调用,该指令共完成两项操作: ●长调用指令 指令格式为:LCALL Addr16
3.2 MCS-51单片机指令分类介绍 五. 控制转移类指令 3、子程序调用与返回指令组 ●返回指令 RET ;子程序返回指令 RETI ;中断服务子程序返回指令 从堆栈中自动取出断点地址送程序计数器PC,使程序在主程序断点处继续向下执行。 4、空操作指令----NOP