67
第第第 第第第 3.1 第第第 第第 3.2 第第 第第第第 3.3 第第第第第第第 3.4 第第第第第第第 3.5 第第第第第第第 3.6 第第第第第第

第三章 指令系统

Embed Size (px)

DESCRIPTION

第三章 指令系统. 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 指令格式. 指令的表示方式称为指令格式,一条指令通常由两部分组成,即操作码和操作数。具体格式如下: - PowerPoint PPT Presentation

Citation preview

Page 1: 第三章 指令系统

第三章 指令系统 3.1 指令系统概述3.2 数据传递类指令 3.3 算术运算类指令 3.4 逻辑操作类指令 3.5 控制转移类指令3.6 位操作类指令

Page 2: 第三章 指令系统

3.1 指令系统概述

3.1.1 指令格式 3.1.2 指令系统的分类及特点 3.1.3 指令中常用的符号说明 3.1.4 指令的寻址方式

Page 3: 第三章 指令系统

3.1.1 指令格式 指令的表示方式称为指令格式,一条指令通

常由两部分组成,即操作码和操作数。具体格式如下:

〔 标号:〕操作码〔,操作数标号:〕操作码〔,操作数 11 ,操作数,操作数 22 ,……〕〔;注,……〕〔;注释〕释〕

其中方括号的部分为任选项,如需要选项时,在程序中并不书写方括号。

Page 4: 第三章 指令系统

3.1.1 指令格式1 、标号 表示该指令所在的地址。 标号以字母开始,由 1~8 个字符(字母、数字 和一些允许的符号)组成,以“:”结尾。 在一个程序中不允许重复定义标号。

Page 5: 第三章 指令系统

3.1.1 指令格式2 、操作码 操作码是用助记符(英语缩写字符串)形式来

表示的,它表示指令进行什么操作,是指令的核心部分,必不可少。

操作码通常为 2~5 个字符组成的字符串。

Page 6: 第三章 指令系统

3.1.1 指令格式3 、操作数 操作数表示参与操作的数据及数据所在的 地址,取决于指令的寻址方式。 操作码与操作数之间必须以空格分隔 操作数与操作数之间必须以逗号分隔

Page 7: 第三章 指令系统

3.1.1 指令格式4 、注释 表示用户对该条指令的解释或说明,它是 为了方便阅读程序的一种标注。 注释以“;”开始。 注释部分不影响指令的执行。

Page 8: 第三章 指令系统

3.1.2 指令系统的分类及特点 MCS-51 单片机的指令按指令的功能分可分为: 数据传送类指令 29 条。 算数运算类指令 24 条。 逻辑操作类指令 24 条。 控制转移类指令 17 条。 位操作类指令 17 条。 MCS-51 单片机的指令按指令字节数分类可分为: 单字节指令 49 条。 双字节指令 45 条。 三字节指令 17 条。 MCS-51 单片机的指令按执行时间分类可分为: 单机器周期指令 64 条。 双机器周期指令 45 条。 四机器周期指令 2 条。

Page 9: 第三章 指令系统

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 ,常用于相对跳转指令。

Page 10: 第三章 指令系统

3.1.3 指令中常用的符号说明 bit :位地址。 / :在位操作中,表示取反。 ( x ):表示 x 地址单元中的内容,

即 x 的内容。 (( x )):表示以 x 地址单元中

的内容作为地址的单元中的内容,即 x 的内容的内容。

$ :当前指令的地址。

Page 11: 第三章 指令系统

3.1.4 指令的寻址方式

寻址方式:寻找操作数或操作数所在地址的方式。1. 寄存器寻址方式

由指令指出某一寄存器的内容做为操作数,这种 寻址方式称为寄存器寻址。 MOV A,R0 ; 把所选定的寄存器组中的 R0 寄存器的内容 ; 传送给累加器 A ,其中原操作数就是 R0 的内容。

Page 12: 第三章 指令系统

3.1.4 指令的寻址方式 MCS-51 中规定 具有寄存器寻址功能的寄存器有: A AB( 乘除指令用 ) Rn ( n = 0 ~ 7 ) DPTR ( Data Point Register )

Page 13: 第三章 指令系统

3.1.4 指令的寻址方式MOV A , R5 ; R5 中的内容送入累加器 A ,即 (R5)→(A)

指令把 R5 中的内容送入累加器 A 中。指令的执行过程如图。

Page 14: 第三章 指令系统

3.1.4 指令的寻址方式2. 直接寻址方式 指令中操作数直接以单元地址的形式给出, 就称之为直接寻址。 例如: MOV A, 3AH MOV 0D0H, A (MOV PSW, 3AH ) 直接寻址是访问特殊功能寄存器的唯一方法。

Page 15: 第三章 指令系统

3.1.4 指令的寻址方式 MOV A , 69H ; (69H)→(A) 该指令功能是把 69H单元的内容送入累加器 A 中

Page 16: 第三章 指令系统

3.1.4 指令的寻址方式3. 寄存器间接寻址方式 寄存器间接寻址方式,寄存器中存放的则是操作数的地址,

即操作数是通过寄存器间接得到的,因此称之为寄存器间接寻址。

例: MOV A, @ R0 ;把 R0 寄存器的内容作为地址,

再把该地址单元内容送累加器 A 。

Page 17: 第三章 指令系统

3.1.4 指令的寻址方式MOV A , @R1 ; ((R1))→(A) 指令代码形式为 lll001ll ,十六进制为 E7H。

Page 18: 第三章 指令系统

3.1.4 指令的寻址方式 可用来间接寻址的寄存器有: R0 、 R1 、 DPTR 。 访问片内 RAM 或片外 RAM 的低 256 字节时,

可用 R0 、 R1 作为间接寻址寄存器,访问片外RAM还可用 DPTR 作为 间接寄存器。

Page 19: 第三章 指令系统

3.1.4 指令的寻址方式 4. 立即寻址方式 立即寻址就是操作数在指令中直接给出。 为了与直接寻址指令中的直接地址相区别,在立即数前面加“#”标志。采用立即寻址方式的指令是双字节指令,第一个字节是操作码,第二个字节是立即操作数,该操作数简称为立即数。

例: MOV A, # 3AH   MOV DPTR, # 1234H

Page 20: 第三章 指令系统

3.1.4 指令的寻址方式 MOV A , #0FFH ; FFH→(A) 这条指令是用来把立即数 FFH送入累加器 A 中

Page 21: 第三章 指令系统

3.1.4 指令的寻址方式 5. 变址寻址方式 变址寻址是为了访问程序存储器中的数据和表格。

MCS-51 的变址寻址是以 DPTR 或 PC 作基址寄存器,以累加器 A 作变址寄存器,并以两者内容相加形成的 16� 位地址做为操作数地址,以达到访问数据和表格的目的。注意: A 中的数为无符号数。

例如: MOVC A, @ A+DPTR 应当指出,符号“ @” 是针对( A+DPTR )的,而不仅是针对 A 的。

Page 22: 第三章 指令系统

3.1.4 指令的寻址方式MOVC A , @A+PC ; ((A)+(PC))→(A) 这条指令是把 A 中的内容和 PC 中的内容相加作为 16

位程序存储器地址,然后再把该地址中的内容送入累加器 A 中。

Page 23: 第三章 指令系统

3.1.4 指令的寻址方式 6. 位寻址方式 位寻址是指对片内 RAM 的位寻址区和某些可

寻址的特殊功能寄存器进行位操作的寻址方式。需要指出,位地址与直接寻址中的字节地址形式相同,主要由操作码来区别。

例如: MOV C,3AH

Page 24: 第三章 指令系统

3.1.4 指令的寻址方式 7. 相对寻址方式 相对寻址方式是为解决程序转移而专门设置的,为转移

指令所采用。在相对寻址的转移指令中,给出了地址偏移量(在 MCS-51 指令系统中以“ rel” 表示),把 PC的当前值加上偏移量就构成了程序转移的目的地址。转移的目的地址可用如下公式表示:

PC 目的=PC 当前+转移指令字节数+ rel 例如: JZ 30H

Page 25: 第三章 指令系统

3.1.4 指令的寻址方式 JC 06H 这条指令表示若进位位 C=0 ,不跳转;若进位位 C=1 ,则以 PC 中的当前值为基地址,加上偏移量 06H后所得到的结果为该转移指令的目的地址。

Page 26: 第三章 指令系统

3.1.4 指令的寻址方式 表 3-1 寻址方式及寻址空间对照表

寻址方式 寻 址 空 间

寄存器寻址 工作寄存器 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 )

Page 27: 第三章 指令系统

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 数据交换指令

Page 28: 第三章 指令系统

3.2 数据传递类指令通用格式: MOV <目的操作数 >, < 源操作数 > 传输指令有从右向左传送数据的约定,即指

令的右边操作数为源操作数,表达的是数据的来源;左边操作数为目的操作数,表达的是数据的去向。

Page 29: 第三章 指令系统

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

Page 30: 第三章 指令系统

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

Page 31: 第三章 指令系统

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

Page 32: 第三章 指令系统

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

Page 33: 第三章 指令系统

3.2.5 十六位数的传递指令 1 .指令格式 MOV DPTR , #data16 ; DPTR←16 位立即数 2 .指令解释 3 .举例说明例 3.5 MOV DPTR , #1234H 例 3.6 MOV DPH , #12H MOV DPL , #34H

Page 34: 第三章 指令系统

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 单元中。

Page 35: 第三章 指令系统

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

Page 36: 第三章 指令系统

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

Page 37: 第三章 指令系统

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

Page 38: 第三章 指令系统

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

Page 39: 第三章 指令系统

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 除法指令

Page 40: 第三章 指令系统

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

Page 41: 第三章 指令系统

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

Page 42: 第三章 指令系统

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

Page 43: 第三章 指令系统

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 。

Page 44: 第三章 指令系统

3.3.5 带进位的减法指令 1 .指令格式 SUBB A , #data ; A←(A)- 立即数 -CY SUBB A , direct ; A←(A)-( 直接地址 ) -CY SUBBA , @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

Page 45: 第三章 指令系统

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 R7DEC 30H DEC @R1

Page 46: 第三章 指令系统

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 。

Page 47: 第三章 指令系统

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 。

Page 48: 第三章 指令系统

3.4 逻辑操作类指令 3.4.1 循环移位指令 3.4.2 累加器半字节交换指令 3.4.3 求反指令 3.4.4 清0指令 3.4.5 逻辑与指令 3.4.6逻辑或指令 3.4.7 逻辑异或指令

Page 49: 第三章 指令系统

3.4.1 循环移位指令 1 .指令格式

2 .指令解释 3 .举例说明

例 3.21 设 (A) = 01H , CY=1 。 . 执行指令: RL A RLC A

(A)

(A)

(A) CY

(A) CY

RL A

RR A

RLC A

RRC A

;

;

;

;

Page 50: 第三章 指令系统

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 。

Page 51: 第三章 指令系统

3.4.3 求反指令 1 .指令格式 CPL A ; A←/(A ) 2 .指令解释 指令的功能是将累加器 A 的内容逐位逻辑求反,不影响标志。 3 .举例说明

例 3.23 设 (A) = 55H 。 . 执行指令: CPL A

结果为: (A) = 0AAH 。

Page 52: 第三章 指令系统

3.4.4 清 0 指令 1 .指令格式 CLR A ; A←0 2 .指令解释 指令的功能分别是将累加器 A 的内容清“ 0” ,不影响 CY 、 AC 、

OV 等标志。 3 .举例说明

例 3.23 设 (A) = 55H 。 . 执行指令: CLR A

结果为: (A) = 00H 。

Page 53: 第三章 指令系统

3.4.5 逻辑与指令 1 .指令格式 ANL A , #data ; A←(A)∧立即数 ANL A , Rn ; A←(A)∧(Rn) ANL A , direct ; A←(A)∧( 直接地址 ) ANL A , @Ri ; A←(A)∧((Ri)) ANL direct , #data ; ( 直接地址 )←( 直接地址 )∧立即数 ANL direct , A ; ( 直接地址 )←( 直接地址 )∧(A) 2 .指令解释 3 .举例说明

例 3.25 设 (A) = 07H , (R0)=0FDH 。 . 执行指令: ANL A , R0

结果为: (A) = 05H

Page 54: 第三章 指令系统

3.4.6 逻辑或指令 1 .指令格式 ORL A , #data ; A←(A)∨立即数 ORL A , Rn ; A←(A)∨(Rn) ORL A , direct ; A←(A)∨( 直接地址 ) ORL A , @Ri ; A←(A)∨((Ri)) ORL direct , #data ; ( 直接地址 )←( 直接地址 )∨立即数 ORL direct , A ; ( 直接地址 )←( 直接地址 )∨(A) 2 .指令解释 3 .举例说明

例 3.26 设 (A) = 33H , (P1)=05H 。 . 执行指令: ORL P1 , A

结果为: (A) = 37H 。

Page 55: 第三章 指令系统

3.4.7 逻辑异或指令 1 .指令格式 XRL A , #data ; A←(A) ⊕ 立即数 XRL A , Rn ; A←(A) ⊕ (Rn) XRL A , direct ; A←(A) ⊕ ( 直接地址 ) XRL A , @Ri ; A←(A) ⊕ ((Ri)) XRL direct , #data ; ( 直接地址 )←( 直接地址 ) ⊕ 立即数 XRL direct , A ; ( 直接地址 )←( 直接地址 ) ⊕ (A) 2 .指令解释 3 .举例说明

例 3.27 设 (A) = 90H , (R3)=73H 。 . 执行指令: XRL A , R3

结果为: (A) = 0E3H 。

Page 56: 第三章 指令系统

3.5 控制转移类指令

3.5.1 无条件转移指令 3.5.2 条件转移指令 3.5.3 调用子程序及返回指令 3.5.4 空操作指令

Page 57: 第三章 指令系统

3.5.1 无条件转移指令 1 .指令格式 LJMP addr16 ;① PC←(PC)+3,②PC←addr16 AJMP addr11 ;① PC←(PC)+2,②PC←addr11 SJMP rel ;① PC←(PC)+2,②PC←(PC)+rel JMP @A+DPTR ;① PC←(PC)+1, ,② PC←((A)+(DPTR)) 2 .指令解释 3 .举例说明

例 3.27 设 (A) = 90H , (R3)=73H 。 . 执行指令: XRL A , R3

结果为: (A) = 0E3H 。

Page 58: 第三章 指令系统

3.5.2 条件转移指令 1 .指令格式 JZ rel ;( A ) =0 则转移, PC 目标 =PC 源+ 02H + rel JNZ rel ;( A )≠ 0 则转移, PC 目标 =PC 源+ 02H + rel CJNE A , direct , rel ;( A )≠(直接地址)则转移, PC 目标 =PC 源+ 03H + rel CJNE A , #data , rel ;( A )≠立即数, PC 目标 =PC 源+ 03H + rel CJNE Rn , #data , rel ;( Rn )≠立即数则转移, PC 目标 =PC 源+ 03H + rel CJNE @Ri , #data , rel ;(( Ri ))≠立即数则转移, PC 目标 =PC 源+ 03H + rel DJNZ Rn , rel ;( Rn )- 1→ ( Rn ),( Rn )≠ 0 则转移, PC 目标 =PC 源+ 02H + rel DJNZ direct , rel ;(直接地址)- 1→ (直接地址), (直接地址)≠ 0 则转移, PC 目标 =PC 源+ 02H + rel

Page 59: 第三章 指令系统

3.5.2 条件转移指令 2 .指令解释 3 .举例说明

例 3.28 指令 0100H:AJMP 0210H 是如何形成新的目标地址的?转移到达新的目标地址是否允许?

解:( 1 )因为 PC 源= 0100H ,该指令是 2 字节指令,所以 PC 当前 =PC 源

+ 02H=0102H=0000 0001 0000 0010B 。( 2 )   指令中给出的 0210H=0000 0010 0001 0000B ( 3) PC 目标 =0000 0010 0001 0000B=0210H 。 即形成新的目标地址为 0210H, 程序随即转移到该地址处。

Page 60: 第三章 指令系统

3.5.3 调用子程序及返回指令 1 .指令格式 LCALL addr16 ;① (PC) + 3→PC ,② (SP) + 1→SP , ③(PC)L→((SP)),④(SP)+1→SP , ⑤(PC)H→((SP))⑥addr16→PC ACALL addr11 ;① (PC) + 2→PC ,② (SP) + 1→SP , ③(PC)L→((SP)),④(SP)+1→SP , ⑤(PC)H→((SP)) ⑥addr16→PC RET ;① ((SP))→(PC)H ,② (SP) - 1→SP , ③((SP))→(PC)L ,④ (SP) - 1→SP RETI ;① ((SP))→(PC)H ,② (SP) - 1→SP , ③((SP))→(PC)L ,④ (SP) - 1→SP

Page 61: 第三章 指令系统

3.5.3 调用子程序及返回指令 2 .指令解释 3 .举例说明

例 3.30 如图 3-2 所示,若 (SP)=60H ,执行 START: LCALL 3456H 之后 SP 和堆栈的内容有何变化?设标号 START 为 2345H 。若上诉指令改为短调用,能否可行?

解: (1) 因为 PC 源 =2345H ,所以 PC 当前 =PC 源+ 03H=2345H+03H=2348H (断点地址入栈保护,即把 PC 当前空出来)

(2)(SP)+1=61H,(PC)L→((SP) 即 ((SP))=(61H)=48H

(3)(SP)+1=62H, (PC)H→((SP) 即 ((SP))=(62H)=23H

(4)addr16=3456H , addr16→ ( PC )即( PC ) =3456H结果: (SP)=62H,(61H)=48H,(62H)=23H,(PC)=3456H 。

Page 62: 第三章 指令系统

3.5.4 空操作指令 1 .指令格式 NOP 2 .指令解释 空操作令除了 PC 加 l 外, CPU 不进行任何操作,而转向下一条

指令去执行。 3 .举例说明

Page 63: 第三章 指令系统

3.6 位操作类指令

3.6.1 位数据传送指令 3.6.2 位状态控制指令 3.6.3 位逻辑运算指令 3.6.4 位条件转移指令

Page 64: 第三章 指令系统

3.6.1 位数据传送指令 1 .指令格式 MOV C , bit ; CY← ( bit ) MOV bit , C ; bit←CY 2 .指令解释 3 .举例说明

例 3.31 设( CY ) =0 , (20H).6=1 ,执行指令: MOV C , 06H

结果为: CY=1 。 注意,这里的 06H 是位地址, 20H 是内部 RAM 的字节地址

Page 65: 第三章 指令系统

3.6.2 位状态控制指令 1 .指令格式 CLR C ; CY ← 0 CLR bit ; bit ← 0 CPL C ; CY ← /CY CPL bit ; bit ← / bit SETB C ; CY ← 1 SETB bit ; bit ← 1 2 .指令解释 3 .举例说明

例 3.29 设 CY=1 , (24H).7=1 , (21H).0=0 , P1.7=0 ,执行指令:CLR C CLR 27HCPL 08H SETB P1.7

结果分别为: CY=0 , (24H).7=0 , (21H).0=1 , P1.7=1 。

Page 66: 第三章 指令系统

3.6.3 位逻辑运算指令 1 .指令格式 ANL C , bit ; CY←CY∧(bit) ANL C , /bit ; CY←CY∧(/bit) ORL C , bit ; CY←CY∨(bit) ORL C , /bit ; CY←CY∨(/bit) 2 .指令解释 3 .举例说明

Page 67: 第三章 指令系统

3.6.4 位条件转移指令 1 .指令格式 JC rel ;若 CY=1 则转移, PC 目标 =PC 源+ 02H + rel JNC rel ;若 CY=0 则转移, PC 目标 =PC 源+ 02H + rel

JB bit , rel ;若 bit=1 则转移, PC 目标 =PC 源+ 03H + rel JNB bit , rel ;若 bit=0 则转移, PC 目标 =PC 源+ 03H + rel JBC bit , rel ;若 bit=1 则转移同时 bit←0 ,

PC 目标 =PC 源+ 03H + rel 2 .指令解释 3 .举例说明