第 3章
MCS-51指令系统数据传送3.3
寻址方式3.2
程序状态字3.1
算术指令3.4
跳转指令3.7
MCS-51指令集小结3.8
布尔指令3.6
逻辑指令3.5
3.1 程序状态字
程序状态字( program status word,
PSW)包含反映当前 CPU状态的若干状态位。
图 3-1 在 MCS-51设备中的 PSW(程序状态字)
3.2 寻 址 方 式
3.2.1 立即寻址
某些指令用包含在指令中的数据作为源操作数,这些操作数称为立即操作数
(简称立即数)。常数的值能跟在程序存储器的操作码后,例如:
MOV A,#100
指令,MOV DPTR,#DATA16
MOV DPTR,#1234H
图 3-2 立即寻址示意图
3.2.2 寄存器寻址
指令,MOV A,Rn
操作码,11101rrr
图 3-3 寄存器寻址示意图
3.2.3 直接寻址
MOV A,50H
区别,MOV A,#50H
图 3-4 直接寻址示意图
3.2.4 隐含寻址
3.2.5 间接寻址
在间接寻址中,指令规定包含操作数地址的寄存器。内部 RAM与外部
RAM都能间接寻址。
8位地址使用 R0,R1作间接寻址寄存器
16位地址使用 DPTR作间接寻址寄存器
对于 8位地址,地址寄存器可以是所选择的寄存器体的 R0或 R1或堆栈指针。对于
16位地址,其地址寄存器只能是“数据指针”寄存器 DPTR。例如指令:
MOV A,@Ri
片外 RAM寻址用 MOVX A,@Ri
MOVX A,@DPTR
图 3-5 间接寻址示意图
3.2.6 变址寻址
只有程序存储器能用变址寻址方式访问且只能用于读。此寻址方式用于在程序存储器中查找表项。一 16位基寄存器
( DPTR或程序计数器 PC)指向表的基地址,而累加器作为表的入口偏移。在程序存储器中的表项的地址由累加器数据加至基指针形成。
这种寻址方式的指令只有两条:
MOVC A,@A+PC
MOVC A,@A+DPTR
变址寻址示意图如图 3-6所示。
图 3-6 变址寻址示意图表 3-1 寻址方式小结分 类 寻 址 方式 采用的寄存 器变量 寻 址 空 间与字节数据有关立即寻址 — 程序存储器( ROM)的全部空间(最大 64KB)
直接寻址 — 片内 128 RAM空间和 SFR空间隐含寻址 A,AB、DPTR 4个 SFR的字节地址,80H,F0H、82H,83H
分 类 寻 址 方式 采用的寄存器 变量 寻 址 空 间与字节数据有关寄存器寻址 R7~ R0 片内 RAM低 32B空间( 00H~ 31H)
间接寻址
@R1,@R0 片内 RAM的 128B空间( 8052系列可为256B)
@R1,@R0 限于片外 RAM的任何一项( 256B)空间
@DPTR 片外 RAM的全部空间(最大 64KB)
变址寻址 @A+DPTR、@A+PC 程序存储器( ROM)的全部空间(最大64KB)
续表分 类 寻 址 方 式 采用的寄存器变量 寻 址 空 间与跳转地址有关相对跳转寻址 PC+rel 限于程序存储器( ROM)的 256B范围绝对跳转寻址 — 程序存储器( ROM)的全部空间(最大 64KB)
变址跳转寻址 @A+DPTR 程序存储器( ROM)的全部空间(最大 64KB)
与位数据有关隐含位寻址 C CY(位地址,D7H)
直接位寻址 —
片内 RAM区内的 20H~
2FH字节和 SFR区内的实有的 83个可寻址位
3.3 数 据 传 送
3.3.1 指令中的常用符号
Rn -- 当前选择的寄存器体的寄存器 R7~ R0。
Direct-- 8位内部的数器单元的地址。
只能是一内部 RAM的数据单元( 0~ 127)
或一 SFR(即 I/O端口、控制寄存器、状态寄存器等( 128~ 255))。
@Ri -- 通过寄存器 R1或 R0间接寻址的 8位内部 RAM单元( 0~ 255)。
#data -- 包含在指令中的 8位常数。
#data16 -- 包含在指令中的 16位常数。
addr16 -- 16位目的地址。由 LCALL
与 LJMP使用。能分支至 64KB程序存储器地址空间内的任一处。
addr11 -- 11位目的地址。由 LCALL
与 LJMP使用。分支在程序存储器的同一
2KB页内作为下一条指令的第一字节。
rel -- 带符号的 8位偏移字节。由
SJMP与所有条件跳转指令使用。范围是相对于下一条指令的第一个字节的?128~
+127。
bit -- 在内部 RAM或特殊功能寄存器中的直接地址位。
← -- 表示数据传送方向。
+ -- 代表算术“加法”运算符。
- -- 代表算术“减法”运算符。
× -- 代表算术“乘法”运算符。
÷ -- 代表算术“除法”运算符。
∧ -- 代表逻辑“与”运算符。
∨ -- 代表逻辑“或”运算符。
⊕ -- 代表逻辑“异或”运算符。
/ -- 出现在位地址前面时,表示将对应位操作数取反。
@ -- 出现在特定寄存器前面时,
表示被用作间接寻址寄存器。
# -- 用在指令中的操作数前面时,
表示该操作数为一个立即数,即常数。
3.3.2 内部 RAM
表 3-2 访问内部 RAM的 MCS-51数据传送指令清单助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
MOV A,<src> A=<src> × × × × 1
MOV <dest>,A <dest>=A × × × 1
MOV <dest>,
<src> <dest>=<src> × × × × 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
MOV DPTR,
#data16
DPTR=16位立即常数 × 2
PUSH <src>
INC
SP:MOV―
@esp‖,
<src>
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
POP <dest>
MOV <dest>,
―@esp‖:
DEC SP
× 2
助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
XCH A,
<字节 >
累加器与 <字节 >
交换数据 × × × 1
XCHD A,
@Ri
累加器与 @Ri交换低半字节 × 1
续表图 3-7 把 BCD数向右移两个数字图 3-8 向右移 BCD数一个数字
3.3.3 外部 RAM
地 址 宽 度 助 记 符 操 作 执行时间 (?s)
8位
MOVX A,@Ri 读外部 RAM@Ri
2
8位
MOVX @Ri,A 写外部 RAM@Ri
2
16位
MOVX
A,@DPTR
读外部
RAM@DPTR 2
16位
MOVX
@DPTR,A
写外部
RAM@DPTR 2
表 3-3 访问外部 RAM空间的 MCS-51数据传送指令清单
3.3.4 查找表助 记 符 操 作 执行时间 (?s)
MOVC A,@A+DPTR 在( A + DPTR)读程序存储器
2
MOVC A,@A+PC 在( A + PC)读程序存储器
2
表 3-4 MCS-51读查找表指令
3.4 算 术 指 令表 3-5 元 MCS-51算术指今清单助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
ADD A,<字节> A=A + <字节> × × × × 1
ADDC A,<字节 > A=A + <字节 > + C × × × × 1
续表助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
SUBB A,<字节 >
A=A? <字节
>? C × × × × 1
INC A A=A + 1 只适用于累加器 1
INC <字节 > <字节 >=<字节 > + 1 × × × 1
续表助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
INC DPTR DPTR=DPTR + 1 只适用于 DPTR 2
DEC A A=A? 1 只适用于累加器 1
DEC <字节 > <字节 >? 1 × × × 1
续表助 记 符 操 作寻址方式执行时间
(?s)直接 间接 寄存器 立即数
MUL AB B:A=B× A 只适用于累加器与 B 4
DIV AB A=Int[A/B]B=Mod[A/B] 只适用于累加器与 B 4
DA A 十进制调整 只适用于累加器 1
若在 50H,51H与 60H,61H存放着两个 16位数(地址高的为高字节),求它们的和放至在自 70H单元开始的存储单元中。
MOV A,50H ;取第一个数的低字节至累加器 A
ADD A,60H ;与第二个数的低字节相加,若有进位保留在标志 C中
MOV 70H,A ;把相加的和送至 RAM
MOV A,51H ;取第一个数的第二个字节
ADDC A,61H ;与第二个数的第二个字节以及进位位一起相加
MOV 71H,A ;和写至 RAM
MOV A,#00H ;清零累加器 A
ADDC A,#00H ;两位 16位数相加,可能产生进位,与进位位相加
MOV 72H,A ;存进位位
3.5 逻 辑 指 令
表 3-6 MCS-51逻辑指令清单助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
ANL A,<字节 > A=A―与,<字节 > × × × × 1
ANL <字节 >,A <字节 >=<字节>―与,A × 1
ANL <字节
>,
#DATA
<字节 >=<字节
>―与,#D
ATA
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
ORL A,<字节 > A=A―或,<字节 > × × × × 1
ORL <字节 >,A
<字节 >=
<字节
>―或,A
× 1
ORL <字节 >,
#DATA
<字节 >=<字节 >―或,
#DATA
× 2
XRL A,<字节 > A=A―异或,<字节 > × × × × 1
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
XRL <字节 >,A
<字节 >=
<字节 >
―异或,A
× 1
XRL <字节 >,
#DATA
<字节 >=
<字节 >
―异或
” #DATA
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
CRL A A=0 只用于累加器 1
CPL A A=―非,A 只用于累加器 1
RL A 累加器左旋转 1位 只用于累加器 1
RLC A 带进位位左旋转 只用于累加器 1
RR A 累加器右旋转 1位 只用于累加器 1
RRC A 带进位位右旋转 只用于累加器 1
SWAP A 在 A中半字节交换 只用于累加器 1
ANL A,<字节 >指令能取以下形式的任一种:
ANL A,7FH (直接寻址)
ANL A,@R1 (间接寻址)
ANL A,R6 (寄存器寻址)
ANL A,#53H (立即常数)
1.逻辑,与,指令
2.逻辑,或,指令
MOV A,51H;把第二个单元的 00000111取入累加器 A
SWAP A;使 A中的高 4位与低 4位交换,变为 01110000
ORL A,50H;与 50H单元的 00000100相“或”,变为
01110100
MOV 60H,A;结果存至 60H单元
3,逻辑,异或,指令
4,旋转指令 ( RLA,RLCA等 )
图 3-9 旋转指令
5,SWAP A指令
MOV B,#10
DIV AB
SWAP A
ADD A,B
3.6 布 尔 指 令助 记 符 操 作 执行时间 (?s)
ANL C,bit C=C―与,bit 2
ANL C,/bit C=C―与,,非,bit 2
OR C,bit C=C―或,bit 2
OR C,/bit C=C―或,,非,bit 2
MOV C,bit C=bit 1
MOV bit,C Bit=C 1
CLR C C=0 1
CLR bit Bit=0 1
表 3-7 MCS-51布尔指令清单续表助 记 符 操 作 执行时间 (?s)
SETB C C=1 1
SETB bit Bit=1 1
CPL C C=―非,C 1
CPL bit Bit=―非,bit 1
JC rel 若 C=1跳转 2
JNC rel 若 C=0跳转 2
JB bit,rel 若 bit=1跳转 2
JNB bit,rel 若 bit=0跳转 2
JBC bit,rel 若 bit=1跳转,清除 bit 2
隐含寻址方式 直接寻址方式
CLR C CLR CY
SETB C SETB CY
CPL C CPL CY
JC rel JB CY,rel
JNC rel JNB CY,rel
3.7 跳 转 指 令助 记 符 操 作 执行时间 (?s)
JMP addr 跳转至 addr 2
JMP @A+DPTR 跳转至 A+DPTR 2
CALL addr 在 addr调用子例程 2
RET 从子例程返回 2
RETI 从中断返回 2
NOP 无操作 1
表 3-8MCS-51设备中的无条件跳转指令
1.相对短跳转 SJMP
SJMP是一相对跳转指令,指令为 2字节,指令第二字节是一 8位符号数的相对于指令指针的偏移量。
2.绝对近跳转 AJMP
AJMP指令是 2字节长,由操作码,在它的高 3位中包全地址的高 3位,a10~ a8和指令码中的另一地址字节 a7~ a0形成了 11
位目标地址。当指令执行时,这 11位简单地替换在 PC中的低 11位,高 5位保持。
因此,目的地址在 AJMP指令的下一条指令的相同的 2KB块内。此指令既继承了
SJMP指令编码短的优点,又扩展了跳转的范围。
3.绝对远跳转 LJMP
LJMP指令是一条 3字节指令,指令的第 2、第 3字节形成了 16位目的地址。把这
16位地址送至 PC,程序能跳转至 64KB程序存储器空间的任一处。
4.绝对变址跳转
JMP @A + DPTR指令,采用变址寻址方式,支持情况( case)跳转,目的地址在执行时计算,用 DPTR 16位寄存器与累加器之和作为目的地址。
3.7.2 子程序调用与返回指令
1,近调用 ACALL
PC ← PC + 2,
SP ← SP + 1,(SP) ← PCL,
SP ← SP + 1,(SP) ← PCH,
PC[10 – 0] ← addr11
2,远调用 LCALL
PC ← PC + 3,
SP ← SP + 1,(SP) ← PCL,
SP ← SP + 1,(SP) ← PCH,
PC ← addr16
3.返回指令
PCH ← (SP),SP ← SP - 1,
PCL ← (SP),SP ← SP - 1
3.7.3 条件跳转指令助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
JZ rel 若 A=0跳转 只适用于累加器 2
JNZ rel 若 A ≠ 0跳转 只适用于累加器 2
表 3-9 在 MCS-51设备中的条件跳转指令续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
DJNE <字节 >,rel
减量,若不为 0
跳转
× × 2
CJNE A,
<字节 >,rel
若 A ≠ <字节 >跳转
× × 2
CJNE <字节 >
,#data,rel
若 <字节 >
≠
#data
跳转
× × 2
1.判 0跳转
指令 JZ rel,判断累加器 A,若其内容为 0,则跳转。指令 JNZ rel,也判断累加器 A,若其内容不为 0,则跳转。
2.减 1不为 0跳转
DJNZ指令有两种,一种为,DJNZ
Rn,rel
Rn ← Rn – 1,若 Rn ≠ 0,则 PC ←
PC + 2 + rel
这是寄存器寻址方式,先使寄存器减 1,
若其不等于 0,则满足条件,跳转。
另一种指令为,DJNZ direct,rel
direct ← (direct) – 1,若 (direct) ≠ 0,
则 PC ← PC + 2 + rel
MOV COUNTER,#10
LOOP,(开始循环)
(终止循环)
DJNZ COUNTER,LOOP
(继续)
3.8 MCS-51指令集小结
3.8.1 指令对标志位的影响指 令 标 志C OV AC
ADD × ② × ×
ADDC × × ×
SUBB × × ×
MUL 0 ×
DIV 0 ×
DA ×
表 3-10 影响标志设置的指令续表指 令 标 志C OV AC
RRC ×
RLC ×
SETB 1
CLR C 0
CPL C ×
ANL C,bit ×
续表指 令 标 志C OV AC
ANL C,/bit ×
ORL C,bit ×
ORL C,/bit ×
MOV C,bit ×
CJNE ×
助 记 符 描 述 字 节振荡器频率
( MHz
)
算术运算
ADD A,Rn 加寄存器至累加器 1 12
ADD A,direct 加直接地址字节单元内容至累加器 2 12
ADD A,@Ri 加间接寻址的 RAM内容至累加器 1 12
ADD A,#data 加立即数至累加器 2 12
表 3-11 MCS-51指令集续表助 记 符 描 述 字 节振荡器频率
( MHz
)
ADDC A,Rn 加寄存器至累加器,带进位位 1 12
ADDC A,direct 加直接地址字节单元内容至累加器,带进位 2 12
ADDC A,@Ri 加间接寻址的 RAM内容至累加器,带进位 1 12
ADDC A,#data 加立即数至累加器,带进位 2 12
SEBB A,Rn 从累加器减寄存器,带借位 1 12
SUBB A,direct 从累加器减直接寻址字节单元内容,带借位 2 12
助 记 符 描 述 字 节振荡器频率
( MHz
)
SUBB A,@Ri 从累加器减间接寻址字节单元内容,带借位 1 12
SUBB A,#data 从累加器减立即数,带借位 2 12
INC A 增量累加器内容 1 12
INC Rn 增量寄存器中的内容 1 12
INC direct 增量直接寻址的内存单元内容 2 12
INC @Ri 增量间接寻址的内存单元内容 1 12
DEC A 减量累加器内容 1 12
DEC Rn 减量寄存器中的内容 1 12
DEC direct 减量直接寻址的内存单元内容 2 12
续表续表助 记 符 描 述 字 节振荡器频率
( MHz)
DEC @Ri 减量间接寻址的内存单元内容 1 12
INC DPTR 增量数据指针寻址的内存单元内容 1 24
MUL AB 乘 A与 B 1 48
DIV AB A被 B除 1 48
DA A 对累加器进行十进制调整 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz
)
逻辑运算
ANL A,Rn 累加器与寄存器做逻辑,与,运算 1 12
ANL A,direct 累加器与直接寻址内存单元内容 做逻辑,与,运算 2 12
ANL A,@Ri 累加器与间接寻址内存单元内容 做逻辑,与,运算 1 12
ANL A,#data 累加器与立即数做逻辑,与,运算 2 12
ANL direct,A 直接寻址内存单元的内容与累加 器做逻辑,与,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
ANL direct,#data 直接寻址内存单元的内容与立 即数做逻辑,与,运算 3 24
ORL A,Rn 累加器与寄存器做逻辑,或,运算 1 12
ORL A,direct 累加器与直接寻址内存单元的 内容做逻辑,或,运算 2 12
ORL A,@Ri 累加器与间接寻址内存单元的 内容做逻辑,或,运算 1 12
ORL A,#data 累加器与立即数做逻辑,或,运算 2 12
ORL direct,A 直接寻址内存单元的内容与累 加器做逻辑,或,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
ORL direct,#data 直接寻址内存单元的内容与立 即数做逻辑,或,运算 3 24
XRL A,Rn 累加器与寄存器做,异或,运算 1 12
XRL A,direct 累加器与直接寻址内存单元的 内容做,异或,运算 2 12
XRL A,@Ri 累加器与间接寻址内存单元的 内容做,异或,运算 1 12
XRL A,#data 累加器与立即数做,异或,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
XRL direct,A
直接寻址内存单元的内容与累加器做,异或,运算
2 12
XRL direct,#data
直接寻址内存单元的内容与立即数做,异或,运算
3 24
CLR A 清除累加器 1 12
CPL A 对累加器求补 1 12
RL A 累加器左循环移位 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
RLC A 累加器带进位位左循环移位 1 12
RR A 累加器右循环移位 1 12
RRC A 累加器带进位位右循环移位 1 12
SWAP A 累加器内半字节对换 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV A,Rn 寄存器传送至累加器 1 12
MOV A,direct 直接寻址内存单元的内容传 送至累加器 2 12
MOV A,@Ri 间接寻址内存单元的内容传 送至累加器 1 12
MOV A,#data 立即数传送至累加器 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV Rn,A 累加器传送至寄存器 1 12
MOV Rn,direct 直接寻址内存单元的内容传 送至寄存器 2 12
MOV Rn,#data 立即数传送至寄存器 2 12
MOV direct,A 累加器传送至直接寻址内存 单元 2 12
MOV direct,Rn 寄存器传送至直接寻址内存 单元 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV direct,direct 直接寻址内存单元的内存传送 至直接寻址的内存单元 3 24
MOV direct,@Ri 间接寻址内存单元的内存传送 至直接寻址的内存单元 2 24
MOV direct,#data 立即数传送至直接寻址内存单 元 3 24
MOV @Ri,A 传送累加器至间接寻址的内存 单元 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
MOV @Ri,direct 传送直接寻址内存单元的内 容至间接寻址的内存单元 2 24
MOV @Ri,#data 传送立即数至间接寻址的内 存单元 2 12
MOV
DPTR,#data16 传送 16位立即数至数据指针 3 24
MOVC
A,@A+DPTR
传送相对于 DPTR的代码字节至累加器 1 24
MOVC A,@A+PC 传送相对于 PC的代码字节至累加器 1 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
MOVX A,@Ri 传送外部 RAM( 8位地址)的内容至累加器 1 24
MOVX
A,@DPTR
传送外部 RAM( 16位地址)的内容至累加器 1 24
MOVX @Ri,A 传送累加器至外部 RAM( 8位地址)单元 1 24
MOVX
@DPTR,A
传送累加器至外部 RAM
( 16位地址)单元 1 24
PUSH direct 把直接寻址内存单元的内 容推入堆栈 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
POP direct 把堆栈的内容弹出至直接 寻址内存单元 2 24
XCH A,Rn 累加器与寄存器内容交换 1 12
XCH A,direct 累加器与直接寻址内存单 元的内容交换 2 12
XCH A,@Ri 累加器与间接寻址内存单 元的内容交换 1 12
XCHD A,@Ri 累加器与间接寻址内存单 元的内容交换低序数 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
CLR C 清除进位位 1 12
CLR bit 清除直接寻址的位 2 12
SETB C 设置进位位 1 12
SETB bit 设置直接寻址的位 1 12
CPL C 进位位求补 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
CPL bit 直接寻址的位求补 2 12
ANL C,bit 进位位和直接寻址的位做,与,运算 2 24
ANL C,/bit 进位位和直接寻址的位的 补码做,与,运算 2 24
ORL C,bit 进位位和直接寻址的位做,或,运算 2 24
ORL C,/bit 进位位和直接寻址的位的 补码做,或,运算 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
MOV C,bit 传送直接寻址的位至累加器 2 12
MOV bit,C 传送累加器至直接寻址的位 2 24
JC rel 若进位位设置跳转 2 24
JNC rel 若进位位未设置跳转 2 24
JB bit,rel 若直接寻址的位设置跳转 3 24
JNB bit,rel 若直接寻址的位未设置跳转 3 24
JBC bit,rel 若直接寻址的位设置跳转并清除位 3 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
ACALL addr11 绝对子例程调用 2 24
LCALL addr16 长子例程调用 3 24
RET 从子例程返回 1 24
RETI 从中断返回 1 24
AJMP addr11 绝对跳转 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
LJMP addr16 长跳转 3 24
SJMP rel 短跳转(相对地址) 2 24
JMP @A+DPTR 相对于 DPTR的间接跳转 1 24
JZ rel 若累加器为 0跳转 2 24
JNZ rel 若累加器不为 0跳转 2 24
CJNE A,direct,rel 比较累加器与直接寻址字节,若不相等,跳转 3 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
CJNE A,#data,rel 比较累加器与立即数,若不相等,跳转 3 24
CJNE
Rn,#data,rel 比较寄存器与立即数,若不相等,跳转 3 24
CJNE
@Ri,#data,rel
立即数与间接寻址字节比较,若不相等,
跳转 3 24
DJNZ Rn,rel 减量寄存器,若不为 0,跳转 2 24
DJNZ direct,rel 减量直接寻址内存单元,若不为 0,跳转 3 24
NOP 无操作 1 12
MCS-51指令系统数据传送3.3
寻址方式3.2
程序状态字3.1
算术指令3.4
跳转指令3.7
MCS-51指令集小结3.8
布尔指令3.6
逻辑指令3.5
3.1 程序状态字
程序状态字( program status word,
PSW)包含反映当前 CPU状态的若干状态位。
图 3-1 在 MCS-51设备中的 PSW(程序状态字)
3.2 寻 址 方 式
3.2.1 立即寻址
某些指令用包含在指令中的数据作为源操作数,这些操作数称为立即操作数
(简称立即数)。常数的值能跟在程序存储器的操作码后,例如:
MOV A,#100
指令,MOV DPTR,#DATA16
MOV DPTR,#1234H
图 3-2 立即寻址示意图
3.2.2 寄存器寻址
指令,MOV A,Rn
操作码,11101rrr
图 3-3 寄存器寻址示意图
3.2.3 直接寻址
MOV A,50H
区别,MOV A,#50H
图 3-4 直接寻址示意图
3.2.4 隐含寻址
3.2.5 间接寻址
在间接寻址中,指令规定包含操作数地址的寄存器。内部 RAM与外部
RAM都能间接寻址。
8位地址使用 R0,R1作间接寻址寄存器
16位地址使用 DPTR作间接寻址寄存器
对于 8位地址,地址寄存器可以是所选择的寄存器体的 R0或 R1或堆栈指针。对于
16位地址,其地址寄存器只能是“数据指针”寄存器 DPTR。例如指令:
MOV A,@Ri
片外 RAM寻址用 MOVX A,@Ri
MOVX A,@DPTR
图 3-5 间接寻址示意图
3.2.6 变址寻址
只有程序存储器能用变址寻址方式访问且只能用于读。此寻址方式用于在程序存储器中查找表项。一 16位基寄存器
( DPTR或程序计数器 PC)指向表的基地址,而累加器作为表的入口偏移。在程序存储器中的表项的地址由累加器数据加至基指针形成。
这种寻址方式的指令只有两条:
MOVC A,@A+PC
MOVC A,@A+DPTR
变址寻址示意图如图 3-6所示。
图 3-6 变址寻址示意图表 3-1 寻址方式小结分 类 寻 址 方式 采用的寄存 器变量 寻 址 空 间与字节数据有关立即寻址 — 程序存储器( ROM)的全部空间(最大 64KB)
直接寻址 — 片内 128 RAM空间和 SFR空间隐含寻址 A,AB、DPTR 4个 SFR的字节地址,80H,F0H、82H,83H
分 类 寻 址 方式 采用的寄存器 变量 寻 址 空 间与字节数据有关寄存器寻址 R7~ R0 片内 RAM低 32B空间( 00H~ 31H)
间接寻址
@R1,@R0 片内 RAM的 128B空间( 8052系列可为256B)
@R1,@R0 限于片外 RAM的任何一项( 256B)空间
@DPTR 片外 RAM的全部空间(最大 64KB)
变址寻址 @A+DPTR、@A+PC 程序存储器( ROM)的全部空间(最大64KB)
续表分 类 寻 址 方 式 采用的寄存器变量 寻 址 空 间与跳转地址有关相对跳转寻址 PC+rel 限于程序存储器( ROM)的 256B范围绝对跳转寻址 — 程序存储器( ROM)的全部空间(最大 64KB)
变址跳转寻址 @A+DPTR 程序存储器( ROM)的全部空间(最大 64KB)
与位数据有关隐含位寻址 C CY(位地址,D7H)
直接位寻址 —
片内 RAM区内的 20H~
2FH字节和 SFR区内的实有的 83个可寻址位
3.3 数 据 传 送
3.3.1 指令中的常用符号
Rn -- 当前选择的寄存器体的寄存器 R7~ R0。
Direct-- 8位内部的数器单元的地址。
只能是一内部 RAM的数据单元( 0~ 127)
或一 SFR(即 I/O端口、控制寄存器、状态寄存器等( 128~ 255))。
@Ri -- 通过寄存器 R1或 R0间接寻址的 8位内部 RAM单元( 0~ 255)。
#data -- 包含在指令中的 8位常数。
#data16 -- 包含在指令中的 16位常数。
addr16 -- 16位目的地址。由 LCALL
与 LJMP使用。能分支至 64KB程序存储器地址空间内的任一处。
addr11 -- 11位目的地址。由 LCALL
与 LJMP使用。分支在程序存储器的同一
2KB页内作为下一条指令的第一字节。
rel -- 带符号的 8位偏移字节。由
SJMP与所有条件跳转指令使用。范围是相对于下一条指令的第一个字节的?128~
+127。
bit -- 在内部 RAM或特殊功能寄存器中的直接地址位。
← -- 表示数据传送方向。
+ -- 代表算术“加法”运算符。
- -- 代表算术“减法”运算符。
× -- 代表算术“乘法”运算符。
÷ -- 代表算术“除法”运算符。
∧ -- 代表逻辑“与”运算符。
∨ -- 代表逻辑“或”运算符。
⊕ -- 代表逻辑“异或”运算符。
/ -- 出现在位地址前面时,表示将对应位操作数取反。
@ -- 出现在特定寄存器前面时,
表示被用作间接寻址寄存器。
# -- 用在指令中的操作数前面时,
表示该操作数为一个立即数,即常数。
3.3.2 内部 RAM
表 3-2 访问内部 RAM的 MCS-51数据传送指令清单助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
MOV A,<src> A=<src> × × × × 1
MOV <dest>,A <dest>=A × × × 1
MOV <dest>,
<src> <dest>=<src> × × × × 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
MOV DPTR,
#data16
DPTR=16位立即常数 × 2
PUSH <src>
INC
SP:MOV―
@esp‖,
<src>
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
POP <dest>
MOV <dest>,
―@esp‖:
DEC SP
× 2
助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
XCH A,
<字节 >
累加器与 <字节 >
交换数据 × × × 1
XCHD A,
@Ri
累加器与 @Ri交换低半字节 × 1
续表图 3-7 把 BCD数向右移两个数字图 3-8 向右移 BCD数一个数字
3.3.3 外部 RAM
地 址 宽 度 助 记 符 操 作 执行时间 (?s)
8位
MOVX A,@Ri 读外部 RAM@Ri
2
8位
MOVX @Ri,A 写外部 RAM@Ri
2
16位
MOVX
A,@DPTR
读外部
RAM@DPTR 2
16位
MOVX
@DPTR,A
写外部
RAM@DPTR 2
表 3-3 访问外部 RAM空间的 MCS-51数据传送指令清单
3.3.4 查找表助 记 符 操 作 执行时间 (?s)
MOVC A,@A+DPTR 在( A + DPTR)读程序存储器
2
MOVC A,@A+PC 在( A + PC)读程序存储器
2
表 3-4 MCS-51读查找表指令
3.4 算 术 指 令表 3-5 元 MCS-51算术指今清单助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
ADD A,<字节> A=A + <字节> × × × × 1
ADDC A,<字节 > A=A + <字节 > + C × × × × 1
续表助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
SUBB A,<字节 >
A=A? <字节
>? C × × × × 1
INC A A=A + 1 只适用于累加器 1
INC <字节 > <字节 >=<字节 > + 1 × × × 1
续表助 记 符 操 作 寻址方式 执行时间 (?s)直接 间接 寄存器 立即数
INC DPTR DPTR=DPTR + 1 只适用于 DPTR 2
DEC A A=A? 1 只适用于累加器 1
DEC <字节 > <字节 >? 1 × × × 1
续表助 记 符 操 作寻址方式执行时间
(?s)直接 间接 寄存器 立即数
MUL AB B:A=B× A 只适用于累加器与 B 4
DIV AB A=Int[A/B]B=Mod[A/B] 只适用于累加器与 B 4
DA A 十进制调整 只适用于累加器 1
若在 50H,51H与 60H,61H存放着两个 16位数(地址高的为高字节),求它们的和放至在自 70H单元开始的存储单元中。
MOV A,50H ;取第一个数的低字节至累加器 A
ADD A,60H ;与第二个数的低字节相加,若有进位保留在标志 C中
MOV 70H,A ;把相加的和送至 RAM
MOV A,51H ;取第一个数的第二个字节
ADDC A,61H ;与第二个数的第二个字节以及进位位一起相加
MOV 71H,A ;和写至 RAM
MOV A,#00H ;清零累加器 A
ADDC A,#00H ;两位 16位数相加,可能产生进位,与进位位相加
MOV 72H,A ;存进位位
3.5 逻 辑 指 令
表 3-6 MCS-51逻辑指令清单助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
ANL A,<字节 > A=A―与,<字节 > × × × × 1
ANL <字节 >,A <字节 >=<字节>―与,A × 1
ANL <字节
>,
#DATA
<字节 >=<字节
>―与,#D
ATA
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
ORL A,<字节 > A=A―或,<字节 > × × × × 1
ORL <字节 >,A
<字节 >=
<字节
>―或,A
× 1
ORL <字节 >,
#DATA
<字节 >=<字节 >―或,
#DATA
× 2
XRL A,<字节 > A=A―异或,<字节 > × × × × 1
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
XRL <字节 >,A
<字节 >=
<字节 >
―异或,A
× 1
XRL <字节 >,
#DATA
<字节 >=
<字节 >
―异或
” #DATA
× 2
续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
CRL A A=0 只用于累加器 1
CPL A A=―非,A 只用于累加器 1
RL A 累加器左旋转 1位 只用于累加器 1
RLC A 带进位位左旋转 只用于累加器 1
RR A 累加器右旋转 1位 只用于累加器 1
RRC A 带进位位右旋转 只用于累加器 1
SWAP A 在 A中半字节交换 只用于累加器 1
ANL A,<字节 >指令能取以下形式的任一种:
ANL A,7FH (直接寻址)
ANL A,@R1 (间接寻址)
ANL A,R6 (寄存器寻址)
ANL A,#53H (立即常数)
1.逻辑,与,指令
2.逻辑,或,指令
MOV A,51H;把第二个单元的 00000111取入累加器 A
SWAP A;使 A中的高 4位与低 4位交换,变为 01110000
ORL A,50H;与 50H单元的 00000100相“或”,变为
01110100
MOV 60H,A;结果存至 60H单元
3,逻辑,异或,指令
4,旋转指令 ( RLA,RLCA等 )
图 3-9 旋转指令
5,SWAP A指令
MOV B,#10
DIV AB
SWAP A
ADD A,B
3.6 布 尔 指 令助 记 符 操 作 执行时间 (?s)
ANL C,bit C=C―与,bit 2
ANL C,/bit C=C―与,,非,bit 2
OR C,bit C=C―或,bit 2
OR C,/bit C=C―或,,非,bit 2
MOV C,bit C=bit 1
MOV bit,C Bit=C 1
CLR C C=0 1
CLR bit Bit=0 1
表 3-7 MCS-51布尔指令清单续表助 记 符 操 作 执行时间 (?s)
SETB C C=1 1
SETB bit Bit=1 1
CPL C C=―非,C 1
CPL bit Bit=―非,bit 1
JC rel 若 C=1跳转 2
JNC rel 若 C=0跳转 2
JB bit,rel 若 bit=1跳转 2
JNB bit,rel 若 bit=0跳转 2
JBC bit,rel 若 bit=1跳转,清除 bit 2
隐含寻址方式 直接寻址方式
CLR C CLR CY
SETB C SETB CY
CPL C CPL CY
JC rel JB CY,rel
JNC rel JNB CY,rel
3.7 跳 转 指 令助 记 符 操 作 执行时间 (?s)
JMP addr 跳转至 addr 2
JMP @A+DPTR 跳转至 A+DPTR 2
CALL addr 在 addr调用子例程 2
RET 从子例程返回 2
RETI 从中断返回 2
NOP 无操作 1
表 3-8MCS-51设备中的无条件跳转指令
1.相对短跳转 SJMP
SJMP是一相对跳转指令,指令为 2字节,指令第二字节是一 8位符号数的相对于指令指针的偏移量。
2.绝对近跳转 AJMP
AJMP指令是 2字节长,由操作码,在它的高 3位中包全地址的高 3位,a10~ a8和指令码中的另一地址字节 a7~ a0形成了 11
位目标地址。当指令执行时,这 11位简单地替换在 PC中的低 11位,高 5位保持。
因此,目的地址在 AJMP指令的下一条指令的相同的 2KB块内。此指令既继承了
SJMP指令编码短的优点,又扩展了跳转的范围。
3.绝对远跳转 LJMP
LJMP指令是一条 3字节指令,指令的第 2、第 3字节形成了 16位目的地址。把这
16位地址送至 PC,程序能跳转至 64KB程序存储器空间的任一处。
4.绝对变址跳转
JMP @A + DPTR指令,采用变址寻址方式,支持情况( case)跳转,目的地址在执行时计算,用 DPTR 16位寄存器与累加器之和作为目的地址。
3.7.2 子程序调用与返回指令
1,近调用 ACALL
PC ← PC + 2,
SP ← SP + 1,(SP) ← PCL,
SP ← SP + 1,(SP) ← PCH,
PC[10 – 0] ← addr11
2,远调用 LCALL
PC ← PC + 3,
SP ← SP + 1,(SP) ← PCL,
SP ← SP + 1,(SP) ← PCH,
PC ← addr16
3.返回指令
PCH ← (SP),SP ← SP - 1,
PCL ← (SP),SP ← SP - 1
3.7.3 条件跳转指令助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
JZ rel 若 A=0跳转 只适用于累加器 2
JNZ rel 若 A ≠ 0跳转 只适用于累加器 2
表 3-9 在 MCS-51设备中的条件跳转指令续表助 记 符 操 作 寻 址 方 式 执行时间 (?s)直接 间接 寄存器 立即
DJNE <字节 >,rel
减量,若不为 0
跳转
× × 2
CJNE A,
<字节 >,rel
若 A ≠ <字节 >跳转
× × 2
CJNE <字节 >
,#data,rel
若 <字节 >
≠
#data
跳转
× × 2
1.判 0跳转
指令 JZ rel,判断累加器 A,若其内容为 0,则跳转。指令 JNZ rel,也判断累加器 A,若其内容不为 0,则跳转。
2.减 1不为 0跳转
DJNZ指令有两种,一种为,DJNZ
Rn,rel
Rn ← Rn – 1,若 Rn ≠ 0,则 PC ←
PC + 2 + rel
这是寄存器寻址方式,先使寄存器减 1,
若其不等于 0,则满足条件,跳转。
另一种指令为,DJNZ direct,rel
direct ← (direct) – 1,若 (direct) ≠ 0,
则 PC ← PC + 2 + rel
MOV COUNTER,#10
LOOP,(开始循环)
(终止循环)
DJNZ COUNTER,LOOP
(继续)
3.8 MCS-51指令集小结
3.8.1 指令对标志位的影响指 令 标 志C OV AC
ADD × ② × ×
ADDC × × ×
SUBB × × ×
MUL 0 ×
DIV 0 ×
DA ×
表 3-10 影响标志设置的指令续表指 令 标 志C OV AC
RRC ×
RLC ×
SETB 1
CLR C 0
CPL C ×
ANL C,bit ×
续表指 令 标 志C OV AC
ANL C,/bit ×
ORL C,bit ×
ORL C,/bit ×
MOV C,bit ×
CJNE ×
助 记 符 描 述 字 节振荡器频率
( MHz
)
算术运算
ADD A,Rn 加寄存器至累加器 1 12
ADD A,direct 加直接地址字节单元内容至累加器 2 12
ADD A,@Ri 加间接寻址的 RAM内容至累加器 1 12
ADD A,#data 加立即数至累加器 2 12
表 3-11 MCS-51指令集续表助 记 符 描 述 字 节振荡器频率
( MHz
)
ADDC A,Rn 加寄存器至累加器,带进位位 1 12
ADDC A,direct 加直接地址字节单元内容至累加器,带进位 2 12
ADDC A,@Ri 加间接寻址的 RAM内容至累加器,带进位 1 12
ADDC A,#data 加立即数至累加器,带进位 2 12
SEBB A,Rn 从累加器减寄存器,带借位 1 12
SUBB A,direct 从累加器减直接寻址字节单元内容,带借位 2 12
助 记 符 描 述 字 节振荡器频率
( MHz
)
SUBB A,@Ri 从累加器减间接寻址字节单元内容,带借位 1 12
SUBB A,#data 从累加器减立即数,带借位 2 12
INC A 增量累加器内容 1 12
INC Rn 增量寄存器中的内容 1 12
INC direct 增量直接寻址的内存单元内容 2 12
INC @Ri 增量间接寻址的内存单元内容 1 12
DEC A 减量累加器内容 1 12
DEC Rn 减量寄存器中的内容 1 12
DEC direct 减量直接寻址的内存单元内容 2 12
续表续表助 记 符 描 述 字 节振荡器频率
( MHz)
DEC @Ri 减量间接寻址的内存单元内容 1 12
INC DPTR 增量数据指针寻址的内存单元内容 1 24
MUL AB 乘 A与 B 1 48
DIV AB A被 B除 1 48
DA A 对累加器进行十进制调整 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz
)
逻辑运算
ANL A,Rn 累加器与寄存器做逻辑,与,运算 1 12
ANL A,direct 累加器与直接寻址内存单元内容 做逻辑,与,运算 2 12
ANL A,@Ri 累加器与间接寻址内存单元内容 做逻辑,与,运算 1 12
ANL A,#data 累加器与立即数做逻辑,与,运算 2 12
ANL direct,A 直接寻址内存单元的内容与累加 器做逻辑,与,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
ANL direct,#data 直接寻址内存单元的内容与立 即数做逻辑,与,运算 3 24
ORL A,Rn 累加器与寄存器做逻辑,或,运算 1 12
ORL A,direct 累加器与直接寻址内存单元的 内容做逻辑,或,运算 2 12
ORL A,@Ri 累加器与间接寻址内存单元的 内容做逻辑,或,运算 1 12
ORL A,#data 累加器与立即数做逻辑,或,运算 2 12
ORL direct,A 直接寻址内存单元的内容与累 加器做逻辑,或,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
ORL direct,#data 直接寻址内存单元的内容与立 即数做逻辑,或,运算 3 24
XRL A,Rn 累加器与寄存器做,异或,运算 1 12
XRL A,direct 累加器与直接寻址内存单元的 内容做,异或,运算 2 12
XRL A,@Ri 累加器与间接寻址内存单元的 内容做,异或,运算 1 12
XRL A,#data 累加器与立即数做,异或,运算 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
XRL direct,A
直接寻址内存单元的内容与累加器做,异或,运算
2 12
XRL direct,#data
直接寻址内存单元的内容与立即数做,异或,运算
3 24
CLR A 清除累加器 1 12
CPL A 对累加器求补 1 12
RL A 累加器左循环移位 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
RLC A 累加器带进位位左循环移位 1 12
RR A 累加器右循环移位 1 12
RRC A 累加器带进位位右循环移位 1 12
SWAP A 累加器内半字节对换 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV A,Rn 寄存器传送至累加器 1 12
MOV A,direct 直接寻址内存单元的内容传 送至累加器 2 12
MOV A,@Ri 间接寻址内存单元的内容传 送至累加器 1 12
MOV A,#data 立即数传送至累加器 2 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV Rn,A 累加器传送至寄存器 1 12
MOV Rn,direct 直接寻址内存单元的内容传 送至寄存器 2 12
MOV Rn,#data 立即数传送至寄存器 2 12
MOV direct,A 累加器传送至直接寻址内存 单元 2 12
MOV direct,Rn 寄存器传送至直接寻址内存 单元 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
数据传送
MOV direct,direct 直接寻址内存单元的内存传送 至直接寻址的内存单元 3 24
MOV direct,@Ri 间接寻址内存单元的内存传送 至直接寻址的内存单元 2 24
MOV direct,#data 立即数传送至直接寻址内存单 元 3 24
MOV @Ri,A 传送累加器至间接寻址的内存 单元 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
MOV @Ri,direct 传送直接寻址内存单元的内 容至间接寻址的内存单元 2 24
MOV @Ri,#data 传送立即数至间接寻址的内 存单元 2 12
MOV
DPTR,#data16 传送 16位立即数至数据指针 3 24
MOVC
A,@A+DPTR
传送相对于 DPTR的代码字节至累加器 1 24
MOVC A,@A+PC 传送相对于 PC的代码字节至累加器 1 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
MOVX A,@Ri 传送外部 RAM( 8位地址)的内容至累加器 1 24
MOVX
A,@DPTR
传送外部 RAM( 16位地址)的内容至累加器 1 24
MOVX @Ri,A 传送累加器至外部 RAM( 8位地址)单元 1 24
MOVX
@DPTR,A
传送累加器至外部 RAM
( 16位地址)单元 1 24
PUSH direct 把直接寻址内存单元的内 容推入堆栈 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
POP direct 把堆栈的内容弹出至直接 寻址内存单元 2 24
XCH A,Rn 累加器与寄存器内容交换 1 12
XCH A,direct 累加器与直接寻址内存单 元的内容交换 2 12
XCH A,@Ri 累加器与间接寻址内存单 元的内容交换 1 12
XCHD A,@Ri 累加器与间接寻址内存单 元的内容交换低序数 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
CLR C 清除进位位 1 12
CLR bit 清除直接寻址的位 2 12
SETB C 设置进位位 1 12
SETB bit 设置直接寻址的位 1 12
CPL C 进位位求补 1 12
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
CPL bit 直接寻址的位求补 2 12
ANL C,bit 进位位和直接寻址的位做,与,运算 2 24
ANL C,/bit 进位位和直接寻址的位的 补码做,与,运算 2 24
ORL C,bit 进位位和直接寻址的位做,或,运算 2 24
ORL C,/bit 进位位和直接寻址的位的 补码做,或,运算 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
布尔变量操作
MOV C,bit 传送直接寻址的位至累加器 2 12
MOV bit,C 传送累加器至直接寻址的位 2 24
JC rel 若进位位设置跳转 2 24
JNC rel 若进位位未设置跳转 2 24
JB bit,rel 若直接寻址的位设置跳转 3 24
JNB bit,rel 若直接寻址的位未设置跳转 3 24
JBC bit,rel 若直接寻址的位设置跳转并清除位 3 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
ACALL addr11 绝对子例程调用 2 24
LCALL addr16 长子例程调用 3 24
RET 从子例程返回 1 24
RETI 从中断返回 1 24
AJMP addr11 绝对跳转 2 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
LJMP addr16 长跳转 3 24
SJMP rel 短跳转(相对地址) 2 24
JMP @A+DPTR 相对于 DPTR的间接跳转 1 24
JZ rel 若累加器为 0跳转 2 24
JNZ rel 若累加器不为 0跳转 2 24
CJNE A,direct,rel 比较累加器与直接寻址字节,若不相等,跳转 3 24
续表助 记 符 描 述 字 节振荡器频率
( MHz)
程序分支
CJNE A,#data,rel 比较累加器与立即数,若不相等,跳转 3 24
CJNE
Rn,#data,rel 比较寄存器与立即数,若不相等,跳转 3 24
CJNE
@Ri,#data,rel
立即数与间接寻址字节比较,若不相等,
跳转 3 24
DJNZ Rn,rel 减量寄存器,若不为 0,跳转 2 24
DJNZ direct,rel 减量直接寻址内存单元,若不为 0,跳转 3 24
NOP 无操作 1 12