670 likes | 753 Views
第三章 指令系统. 3.1 指令系统概述 3.2 数据传递类指令 3.3 算术运算类指令 3.4 逻辑操作类指令 3.5 控制转移类指令 3.6 位操作类指令. 上一章. 下一章. 结束. 3.1 指令系统概述. 3.1.1 指令格式 3.1.2 指令系统的分类及特点 3.1.3 指令中常用的符号说明 3.1.4 指令的寻址方式. 下一节. 返回. 结束. 3.1.1 指令格式. 指令的表示方式称为指令格式,一条指令通常由两部分组成,即操作码和操作数。具体格式如下:
E N D
第三章指令系统 3.1 指令系统概述 3.2 数据传递类指令 3.3 算术运算类指令 3.4 逻辑操作类指令 3.5 控制转移类指令 3.6 位操作类指令 上一章 下一章 结束
3.1 指令系统概述 • 3.1.1 指令格式 • 3.1.2 指令系统的分类及特点 • 3.1.3指令中常用的符号说明 • 3.1.4 指令的寻址方式 下一节 返回 结束
3.1.1 指令格式 • 指令的表示方式称为指令格式,一条指令通常由两部分组成,即操作码和操作数。具体格式如下: 〔标号:〕操作码〔,操作数1,操作数2,……〕〔;注释〕 • 其中方括号的部分为任选项,如需要选项时,在程序中并不书写方括号。 返回 结束
3.1.1 指令格式 1、标号 表示该指令所在的地址。 标号以字母开始,由1~8个字符(字母、数字 和一些允许的符号)组成,以“:”结尾。 在一个程序中不允许重复定义标号。
3.1.1 指令格式 2、操作码 操作码是用助记符(英语缩写字符串)形式来表示的,它表示指令进行什么操作,是指令的核心部分,必不可少。 操作码通常为2~5个字符组成的字符串。
3.1.1 指令格式 3、操作数 操作数表示参与操作的数据及数据所在的 地址,取决于指令的寻址方式。 操作码与操作数之间必须以空格分隔 操作数与操作数之间必须以逗号分隔
3.1.1 指令格式 4、注释 表示用户对该条指令的解释或说明,它是 为了方便阅读程序的一种标注。 注释以“;”开始。 注释部分不影响指令的执行。
3.1.2 指令系统的分类及特点 • MCS-51单片机的指令按指令的功能分可分为: 数据传送类指令29条。 算数运算类指令24条。 逻辑操作类指令24条。 控制转移类指令17条。 位操作类指令17条。 • MCS-51单片机的指令按指令字节数分类可分为: 单字节指令49条。 双字节指令45条。 三字节指令17条。 • MCS-51单片机的指令按执行时间分类可分为: 单机器周期指令64条。 双机器周期指令45条。 四机器周期指令2条。 返回 结束
3.1.3指令中常用的符号说明 MCS-51单片机指令系统约定了以下的符号: • Rn:选定的当前工作寄存器组中8个通用寄存器R0~R7(n=0-7)。 • @Ri:选定的当前工作寄存器组的工作寄存器R0和R1,@为间接寻址前缀符号。 • direct:直接地址,既可以是一个内部RAM的低128B地址,也可以是一个特殊功能寄存器的单元地址或名称符号。 • #data:8位或16位立即数,亦称立即数。#是立即数的前缀,也是与直接地址区别的标志。 • add16、add11:16位、11位目标地址。在跳转和子程序调用指令当中使用。 • rel:8位带符号偏移量,以二进制补码形式表示,取值范围是-128~+127,常用于相对跳转指令。 返回 结束
3.1.3指令中常用的符号说明 • bit:位地址。 • /:在位操作中,表示取反。 • (x):表示x地址单元中的内容,即x的内容。 • ((x)):表示以x地址单元中的内容作为地址的单元中的内容,即x的内容的内容。 • $:当前指令的地址。 返回 结束
3.1.4 指令的寻址方式 寻址方式:寻找操作数或操作数所在地址的方式。 1. 寄存器寻址方式 由指令指出某一寄存器的内容做为操作数,这种 寻址方式称为寄存器寻址。 MOV A,R0; 把所选定的寄存器组中的R0寄存器的内容 ; 传送给累加器A,其中原操作数就是R0的内容。 返回 结束
3.1.4 指令的寻址方式 MCS-51中规定 具有寄存器寻址功能的寄存器有: A AB(乘除指令用) Rn(n=0~7) DPTR(Data Point Register)
3.1.4 指令的寻址方式 MOV A,R5;R5中的内容送入累加器A,即 (R5)→(A) 指令把R5中的内容送入累加器A中。指令的执行过程如图。
3.1.4 指令的寻址方式 2. 直接寻址方式 指令中操作数直接以单元地址的形式给出, 就称之为直接寻址。 例如:MOV A, 3AH MOV 0D0H, A (MOV PSW, 3AH ) 直接寻址是访问特殊功能寄存器的唯一方法。 返回 结束
3.1.4 指令的寻址方式 MOV A,69H;(69H)→(A) 该指令功能是把69H单元的内容送入累加器A中
3.1.4 指令的寻址方式 3.寄存器间接寻址方式 寄存器间接寻址方式,寄存器中存放的则是操作数的地址,即操作数是通过寄存器间接得到的,因此称之为寄存器间接寻址。 例: MOV A,@R0;把R0寄存器的内容作为地址, 再把该地址单元内容送累加器A。 返回 结束
3.1.4 指令的寻址方式 MOV A,@R1;((R1))→(A) 指令代码形式为lll001ll,十六进制为E7H。
3.1.4 指令的寻址方式 可用来间接寻址的寄存器有: R0、R1、DPTR。 访问片内RAM或片外RAM的低256字节时,可用R0、R1作为间接寻址寄存器,访问片外RAM还可用DPTR作为间接寄存器。
3.1.4 指令的寻址方式 • 4. 立即寻址方式 立即寻址就是操作数在指令中直接给出。 为了与直接寻址指令中的直接地址相区别,在立即数前面加“#”标志。采用立即寻址方式的指令是双字节指令,第一个字节是操作码,第二个字节是立即操作数,该操作数简称为立即数。 例: MOV A,#3AH MOV DPTR,#1234H 返回 结束
3.1.4 指令的寻址方式 MOV A,#0FFH;FFH→(A) 这条指令是用来把立即数FFH送入累加器A中
3.1.4 指令的寻址方式 • 5. 变址寻址方式 变址寻址是为了访问程序存储器中的数据和表格。MCS-51的变址寻址是以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址做为操作数地址,以达到访问数据和表格的目的。注意:A中的数为无符号数。 • 例如: MOVC A,@A+DPTR • 应当指出,符号“@”是针对(A+DPTR)的,而不仅是针对A的。 返回 结束
3.1.4 指令的寻址方式 MOVC A,@A+PC;((A)+(PC))→(A) 这条指令是把A中的内容和PC中的内容相加作为16位程序存储器地址,然后再把该地址中的内容送入累加器A中。
3.1.4 指令的寻址方式 • 6. 位寻址方式 位寻址是指对片内RAM的位寻址区和某些可寻址的特殊功能寄存器进行位操作的寻址方式。需要指出,位地址与直接寻址中的字节地址形式相同,主要由操作码来区别。 例如:MOV C,3AH 返回 结束
3.1.4 指令的寻址方式 • 7. 相对寻址方式 • 相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用。在相对寻址的转移指令中,给出了地址偏移量(在MCS-51指令系统中以“rel”表示),把PC的当前值加上偏移量就构成了程序转移的目的地址。转移的目的地址可用如下公式表示: PC目的=PC当前+转移指令字节数+rel 例如: JZ 30H 返回 结束
3.1.4 指令的寻址方式 JC 06H 这条指令表示若进位位C=0,不跳转;若进位位C=1,则以PC中的当前值为基地址,加上偏移量06H后所得到的结果为该转移指令的目的地址。
寻址方式 寻 址 空 间 寄存器寻址 工作寄存器R0~R7、A、B、DPTR及C 直接寻址 片内RAM低128字节、特殊功能寄存器SFR中的可寻址位 寄存器间接寻址 片内RAM低128字节〔@R0、@R1、SP〕 片外RAM 〔@R0、@R1、@DPTR〕 立即寻址 程序存储器(指令的常数部分) 变址寻址 程序存储器(@A+DPTR、@A+PC) 位寻址 片内RAM中的20H~2FH的128个位特殊功能寄存器中可位寻址(字节地址能被8整除的SFR)的位 相对寻址 程序存储器256字节范围(PC+rel) 3.1.4 指令的寻址方式 • 表3-1 寻址方式及寻址空间对照表 返回 结束
3.2 数据传递类指令 • 3.2.1以累加器为目的操作数的指令 • 3.2.2 以寄存器Rn为目的操作的指令 • 3.2.3 以直接地址为目的操作数的指令 • 3.2.4 以间接地址为目的操作数的指令 • 3.2.5 十六位数的传递指令 • 3.2.6累加器A与片外RAM之间的数据传递类指令 • 3.2.7程序存储器向累加器A传送指令 • 3.2.8堆栈操作类指令 • 3.2.9 数据交换指令 下一节 返回 结束
3.2 数据传递类指令 通用格式: MOV <目的操作数>,<源操作数> 传输指令有从右向左传送数据的约定,即指令的右边操作数为源操作数,表达的是数据的来源;左边操作数为目的操作数,表达的是数据的去向。
3.2.1以累加器为目的操作数的指令 • 1.指令格式 MOV A,Rn ;A←(Rn) MOV A,direct ;A←(直接地址) MOV A,@Ri ;A←((Ri)) MOV A,#data ;A←立即数 • 2.指令解释 • 3.举例说明 例3.1:已知(R1)=40H;(30H)=12H;(40H)=34H MOV A,R1 MOV A,30H MOV A,@R1 MOV A,#56H 返回 结束
3.2.2以寄存器Rn为目的操作的指令 • 1.指令格式 MOV Rn,A ;Rn←(A) MOV Rn,direct ;Rn←(直接地址) MOV Rn,#data ;Rn←立即数 • 2.指令解释 • 3.举例说明 例3.2:已知(A)=40H;(30H)=12H;(40H)=34H MOV R1,A MOV R1,30H MOV R1,#40H 返回 结束
3.2.3 以直接地址为目的操作数的指令 • 1.指令格式 MOV direct,A;(直接地址)←(A) MOV direct,Rn;(直接地址)←(Rn) MOV direct1,direct2;(直接地址1)←(直接地址2) MOV direct,@Ri;(直接地址)←((Ri)) MOV direct,#data;(直接地址)←立即数 • 2.指令解释 • 3.举例说明 例3.3 已知(R1)= 40H;(30H)=12H;(40H)=34H;(A)=78H。 MOV 50H,A MOV 50H,R1 MOV 50H,30H MOV 50H,@R1 MOV 50H,#56H 返回 结束
3.2.4 以间接地址为目的操作数的指令 • 1.指令格式 MOV @Ri,A;(Ri)←(A) MOV @Ri,direct;(Ri)←(直接地址) MOV @Ri,#data;(Ri)←立即数 • 2.指令解释 • 3.举例说明 例3.4 已知(R0)=40H;(30H)=12H;(A)=78H。 MOV @R0,A MOV @R0,30H MOV @R0,#56H 返回 结束
3.2.5 十六位数的传递指令 • 1.指令格式 MOV DPTR,#data16 ;DPTR←16位立即数 • 2.指令解释 • 3.举例说明 例3.5 MOV DPTR,#1234H 例3.6 MOV DPH,#12H MOV DPL,#34H 返回 结束
3.2.6累加器A与片外RAM之间的 数据传递类指令 • 1.指令格式 MOVX A,@Ri;A ←((Ri)) MOVX @Ri,A;(Ri)←A MOVX A,@DPTR; A ←((DPTR)) MOVX @DPTR,A;(DPTR)←A • 2.指令解释 • (1)从外部RAM的寄存器Ri的内容作为地址的地址单元内容传送至A中。 • (2)将A中的内容传送至寄存器Ri的内容作为地址的外部RAM单元中。 返回 结束
3.2.6累加器A与片外RAM之间的 数据传递类指令 说明: 1、MCS-51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必须通过A送去,而所有要读入的外部RAM中的数据也必须通过A读入。 2、使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再使用读写命令。 • 3.举例说明 将外部RAM中100H单元中的内容送入外部RAM中200H单元中。已知(0100H)=12H,(0200H)=34H MOV DPTR,#0100H MOVX A,@DPTR MOV DPTR,#0200H MOVX @DPTR,A
3.2.7程序存储器向累加器A传送指令 • 1.指令格式 MOVC A,@A+DPTR;A ←((A)+(DPTR)) • 2.指令解释 • 3.举例说明 例3.8 有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5) MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR …… TABLE: DB 0,1,4,9,16,25 返回 结束
3.2.8堆栈操作类指令 • 1.指令格式 PUSH direct ;①PC←(PC)+2,②SP←(SP)+1,③(SP)←(直接地址) POP direct;①PC←(PC)+2,②(直接地址)←((SP)),③SP←(SP)-1 • 2.指令解释 • 3.举例说明 例3.9 已知(SP)=5FH,(A)=#64H,(B)=20H PUSH ACC PUSH B ………… POP B POP ACC 返回 结束
3.2.9 数据交换指令 • 1.指令格式 XCH A,direct;(A)←→(直接地址) XCH A,Rn;(A)←→(Rn) XCH A,@Ri;(A)←→(Ri) XCHD A;(A)3~0←→((Ri))3~0 • 2.指令解释 • 3.举例说明 例3.10 已知(A)=20H,(R1)=30H,(20H)=12H,(30H)=54H。 XCH A,R1 XCH A,@R1 XCH A,30H XCHD A,@R1 返回 结束
3.3 算术运算类指令 • 3.3.1不带进位加法指令 • 3.3.2 带进位的加法指令 • 3.3.3 加1指令 • 3.3.4 十进制调整指令 • 3.3.5 带进位的减法指令 • 3.3.6减1指令 • 3.3.7 乘法指令 • 3.3.8 除法指令 下一节 返回 结束
3.3.1不带进位加法指令 • 1.指令格式 ADD A,#data;A←(A)+立即数 ADD A,direct;A←(A)+(直接地址) ADD A,@Ri;A←(A)+((Ri)) ADD A,Rn;A←(A)+(Rn) • 2.指令解释 • 3.举例说明 例3.11 设(A)=0C3H,(R0)=0AAH,执行指令: ADD A,R0 返回 结束
3.3.2 带进位的加法指令 • 1.指令格式 ADDC A,#data;A←(A)+立即数+CY ADDC A,direct;A←(A)+(直接地址) +CY ADDC A,@Ri;A←(A)+((Ri)) +CY ADDC A,Rn;A←(A)+(Rn) +CY • 2.指令解释 • 3.举例说明 例3.13 设(A)=85H,(20H)=0FFH,CY=1。.执行指令: ADDC A,20H 返回 结束
3.3.3 加1指令 • 1.指令格式 INC A;A←(A)+1 INC Rn;Rn←(Rn)+1 INC direct;(直接地址)←(直接地址)+1 INC @Ri;(Ri)←((Ri))+1 INC DPTR;DPTR← (DPTR)+1 • 2.指令解释 • 3.举例说明 例3.14 设(A)=0FFH,(R3)=0FH,(R0)=40H,(30H)=0F0H,(40H)=00H。.执行指令: INC A INC R3 INC 30H INC @R0 返回 结束
3.3.4 十进制调整指令 • 1.指令格式 DA A • 2.指令解释 这条指令是在进行BCD码运算时,跟在ADD和ADDC指令之后,将相加后存放在累加器A中的结果进行修正。 修正的条件和方法: 若(A)>9或(AC)=1,则(A)+6H→(A); 若(A)>9或(CY)=1,则(A)+6H→(A)。 若以上两条同时发生,或高4位虽等于9,但低4位修正后有进位,则应加66H修正。 • 3.举例说明 例3.15 设(A)=56H,(R5)=67H。.执行指令: ADD A,R5 DA A 结果为:(A)=23H,CY=1。 返回 结束
3.3.5 带进位的减法指令 • 1.指令格式 SUBB A,#data;A←(A)-立即数-CY SUBB A,direct;A←(A)-(直接地址) -CY SUBB A,@Ri ;A←(A)-((Ri)) -CY SUBB A,Rn;A←(A)-(Rn) -CY • 2.指令解释 • 3.举例说明 例3.17 设(A)=0C9H,(R2)=54H,CY=1。.执行指令: SUBB A,R2 返回 结束
3.3.6减1指令 • 1.指令格式 DEC A;A←(A)+1 DEC direct;(直接地址)←(直接地址)+1 DEC @Ri ;(Ri)←((Ri))+1 DEC Rn;Rn←(Rn)+1 • 2.指令解释 • 3.举例说明 例3.18 设(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH。.执行指令: DEC A DEC R7 DEC 30H DEC @R1 返回 结束
3.3.7 乘法指令 • 1.指令格式 MUL AB;BA←(A)×(B) • 2.指令解释 • 3.举例说明 例3.19 设(A)=50H,(B)=0A0H。.执行指令: MUL AB 结果为:(B)=32H,(A)=00H,即积为3200H,标志位OV=1,CY=0。 返回 结束
3.3.8 除法指令 • 1.指令格式 DIV AB;(A)÷(B)=A……B • 2.指令解释 • 3.举例说明 例3.20 设(A)=0FBH,(B)=12H。.执行指令: DIV AB 结果为:(A)=0DH,(B)=11H,标志位OV=0,CY=0。 返回 结束
3.4 逻辑操作类指令 • 3.4.1 循环移位指令 • 3.4.2 累加器半字节交换指令 • 3.4.3 求反指令 • 3.4.4 清0指令 • 3.4.5 逻辑与指令 • 3.4.6逻辑或指令 • 3.4.7 逻辑异或指令 下一节 返回 结束
3.4.1 循环移位指令 • 1.指令格式 • 2.指令解释 • 3.举例说明 例3.21 设(A)=01H,CY=1。.执行指令: RL A RLC A 返回 结束
3.4.2 累加器半字节交换指令 • 1.指令格式 SWAP A • 2.指令解释 指令的功能是将累加器A的高半字节(A.7~A.4)和低半字节(A.3 ~A.0)交换。 • 3.举例说明 例3.22 设(A)=56H。.执行指令: SWAP A 结果为:(A)=65H。 返回 结束