第 3章 MCS-51的指令系统介绍 MCS-51汇编语言 的指令系统。
3.1 指令系统概述
MCS-51的基本指令共 111条,按指令所占的字节来分:
(1) 单字节指令 49条;
(2) 双字节指令 45条;
(3) 三字节指令 17条 。
按指令的执行时间来分,
(1) 1个机器周期 ( 12个时钟振荡周期 ) 的指令 64
条;
(2) 2个机器周期( 24个时钟振荡周期)的指令 45
条;
(3) 只有 乘,除两条指令 的执行时间为 4个机器周期
( 48个时钟振荡周期 ) 。
12MHz晶振,机器周期为 1?s。
3.2 指令格式两部分组成,即 操作码 和 操作数 。
操作码 用来规定指令进行什么操作操作数 则是指令操作的对象有单字节指令、双字节指令、三字节不同长度的指令,
格式不同:
( 1)单字节指令,指令只有一个字节,操作码和操作数同在一个字节中。
( 2) 双字节指令,一个字节为操作码,另一个字节是操作数 。
( 3)三字节指令,操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。
3.3 指令系统的寻址方式寻址方式 就是在指令中说明操作数所在地址的方法。
共 7种 寻址方式。
1.寄存器寻址方式操作数在寄存器中
MOV A,Rn ;( Rn) → A,n=0~ 7
表示把寄存器 Rn的内容传送给累加器 A
寻址范围包括:
( 1) 4组通用工作寄存区共 32个工作寄存器。
( 2)部分特殊功能寄存器,例如 A,B 以及数据指针寄存器 DPTR等。
2.直接寻址方式操作数直接以单元地址的形式给出:
MOV A,40H
寻址范围:
(1) 内部 RAM的 128个单元
(2) 特殊功能寄存器。除了以单元地址的形式外,
还 可用寄存器符号 的形式给出。例如:
MOV A,80H 与 MOV A,P0是等价的 。
直接寻址方式是访问特殊功能寄存器的唯一寻址方式
3,寄存器间接寻址方式寄存器中存放的是操作数的地址在寄存器的名称前面加 前缀标志,@”
访问内部 RAM或外部数据存储器的低 256个字节时,只能采用 R0或 R1作为间址寄存器 。例如,
MOV A,@Ri ; i=0或 1
其中 Ri中的内容为 40H,把内部 RAM中 40H单元的内容送到 A。
寻址范围:
( 1)访问内部 RAM低 128个单元,其通用形式为 @Ri
( 2)对片外数据存储器的 64K字节的间接寻址,例如:
MOVX A,@DPTR
( 3)片外数据存储器的低 256字节例如,MOVX A,@Ri
( 4)堆栈区堆栈操作指令 PUSH(压栈)和 POP(出栈)使用堆栈指针( SP)作间址寄存器
4.立即寻址方式操作数在指令中直接给出,需在操作数前面加前缀标志,#”。例如:
MOV A,#40H
5.基址寄存器加变址寄存器间址寻址方式本寻址方式是以 DPTR或 PC作基址寄存器,以累加器 A
作为变址寄存器。
例如,指令 MOVC A,@A+DPTR 其中 A的原有内容为 05H,
DPTR的内容为 0400H,该指令执行的结果是把程序存储器 0405H单元的内容传送给 A。
说明:
( 1) 本寻址方式是专门针对程序存储器的寻址方式,
寻址范围可达到 64KB。
( 2) 本寻址方式的指令只有 3条:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
6.位寻址方式
MCS-51有位处理功能,可以对数据位进行操作,例如:
MOV C,40H
是把位 40H的值送到进位位 C。
寻址范围包括:
( 1)内部 RAM中的位寻址区。位有两种表示方法,例如,
40H;另一种是单元地址加上位,例如,(28H).0,指的是 28H单元中的最低位。它们是等价的。
( 2)特殊功能寄存器中的可寻址位可寻址位在指令中有如下 4种的表示方法:
a,直接使用位地址 。例如 PSW.5的位地址为 0D5H。
b.位名称的表示 方法 。 例如,PSW.5是 F0标志位,可使用 F0表示该位 。
c.单元地址加位数 的表示方法 。 例如,(0D0H).5。
d.特殊功能寄存器符号加位数 的表示方法 。 例如,PSW.5。
7,相对寻址方式在相对寻址的转移指令中,给出了地址偏移量,以
,rel”表示,即把 PC的当前值加上偏移量就构成了程序转移的目的地址:
目的地址 =转移指令所在的地址 + 转移指令的字节数
+ rel
偏移量 rel是一带符号的 8位二进制数补码数 。
范围是,–128 ~ +127
向地址增加方向最大可转移 ( 127+转移指令字节 ) 个单元地址,向地址减少方向最大可转移 ( 128-转移指令字节 ) 个单元地址 。
7种寻址方式及寻址空间,见表 3-1( P43)。
3.4 MCS-51指令系统分类介绍
111条指令,按功能分类,可分为下面 5大类,
( 1) 数据传送类 (28条 )
( 2) 算术操作类 (24条
( 3) 逻辑运算类 (25条 )
( 4) 控制转移类 (17条 )
( 5) 位操作类 (17条 )
指令中符号的意义,
Rn 当前寄存器区的 8个工作寄存器 R0~ R7(n=0~ 7)。
Ri 当前选中的寄存器区中可作间接寻址寄存器的 2
个寄存器 R0,R1(i=0,1)。
Direct 直接地址,即 8位的内部数据存储器单元或特殊功能寄存器的地址 。
#data 包含在指令中的 8位立即数 。
#data16 包含在指令中的 16位立即数 。
rel 相对转移指令中的偏移量,为 8位的带符号补码数
DPTR 数据指针,可用作 16位的地址寄存器 。
bit 内部 RAM或特殊功能寄存器中的直接寻址位 。
C( 或 Cy) 进位标志位或位处理机中的累加器 。
addr11 11位目的地址
addr16 16位目的地址
@ 间接寻址寄存器前缀,如 @Ri,@A+DPTR
(X) X中的内容 。
((X)) 由 X寻址的单元中的内容 。
→ 箭头右边的内容被箭头左边的内容所取代 。
3.4.1 数据传送类指令使用最频繁的一类指令,通用格式:
MOV <目的操作数 >,<源操作数 >
属,复制,性质,而不是,搬家,
数据传送类指令 不影响标志位,Cy,Ac和 OV,但不包括奇偶标志位 P。
1,以累加器为目的操作数的指令
MOV A,Rn ; (Rn)→A,n=0~ 7
MOV A,@Ri ; ((Ri))→A,i= 0,1
MOV A,direct ;( direct) → A
MOV A,#data ; #data→A
例如:
MOV A,R6 ;(R6)→A,寄存器寻址
MOV A,70H ;(70H)→A,直接寻址
MOV A,@R0 ;((R0))→A,间接寻址
MOV A,#78H ;78H→A,立即寻址
2,以 Rn为目的操作数的指令
MOV Rn,A ; (A)→Rn,n= 0~ 7
MOV Rn,direct ;( direct) → Rn,n=0~ 7
MOV Rn,#dat ; #data→Rn,n= 0~ 7
功能:是把源操作数的内容送入当前一组工作寄存器区的 R0~ R7中的某一个寄存器 。
3.以直接地址 direct为目的操作数的指令
MOV direct,A ; (A)→direct
MOV direct,Rn;(Rn)→direct,n=0~ 7
MOV direct1,direct2;
MOV direct,@Ri ; ((Ri))→direct
MOV direct,#data; #data→direct
功能:把源操作数送入直接地址指出的存储单元 。
direct指的是内部 RAM或 SFR的地址 。
4.以寄存器间接地址为目的操作数的指令
MOV @Ri,A ;(A)→((Ri)),i= 0,1
MOV @Ri,direct ; ( direct) → ((Ri))
MOV @Ri,#data ; #data→((Ri))
5.16位数传送指令
MOV DPTR,#data16 ; #data16→DPTR
唯一的 16位数据的传送指令,立即数的高 8位送入 DPH,
立即数的低 8位送入 DPL。
6.堆栈操作指令
MCS-51内部 RAM中可以设定一个 后进先出 ( LIFO-
Last In First Out)的区域称作 堆栈,
堆栈指针 SP指出堆栈的栈顶位置。
(1)进栈指令
PUSH direct
先将栈指针 SP加 1,然后把 direct中的内容送到栈指针 SP指示的内部 RAM单元中 。
例如,当 ( SP) =60H,( A) =30H,( B) =70H时,执行下列指令
PUSH ACC ;
(SP)+1=61H→SP,(A)→ 61H
PUSH B ;
(SP)+1=62H→SP,(B)→ 62H
结果,(61H)=30H,(62H)=70H,(SP)=62H
(2)出栈指令
POP direct
SP指示的栈顶 ( 内部 RAM单元 ) 内容送入 direct字节单元中,栈指针 SP减 1.
例如,当 (SP)=62H,(62H)=70H,(61H)=30H,执行下列指令:
POP DPH ;((SP))→DPH,(SP) -1→SP
POP DPL ;((SP))→DPL,(SP) -1→SP
结果,(DPTR)=7030H,(SP)=60H
7.累加器 A与外部数据存储器传送指令
MOVX A,@DPTR ;((DPTR))→A,读外部 RAM/IO
MOVX A,@Ri ;((Ri))→A,读外部 RAM/IO
MOVX @DPTR,A;(A)→((DPTR)),写外部 RAM/IO
MOVX @Ri,A ;(A)→((Ri)),写外部 RAM/IO
功能:读外部 RAM存储器或 I/O中的一个字节,或把 A中一个字节的数据写到外部 RAM存储器或 I/O中 。
注意,RD*或 WR*信号有效 。
采用 DPTR间接寻址,高 8位地址 ( DPH) 由 P2口输出,
低 8位地址 ( DPL) 由 P0口输出 。
采用 Ri( i=0,1) 间接寻址,可寻址片外 256个单元的数据存储器 。 Ri内容由 P0口输出 。
8位地址和数据均由 P0口输出,可选用其它任何输出口线来输出高于 8位的地址(一般选用 P2口输出高 8位的地址)。
MOV后,X”表示单片机访问的是片外 RAM存储器或 I/O。
8.查表指令共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。
(1) MOVC A,@A+PC
以 PC作基址寄存器,A的内容作为无符号整数和 PC中的内容(下一条指令的起始地址)相加后得到一个 16
位的地址该地址指出的程序存储单元的内容送到累加器 A。
注意,PSEN*信号有效 。
例如,(A)=30H,执行地址 1000H处的指令
1000H,MOVC A,@A+PC
本指令占用一个字节,执行结果将程序存储器中
1031H的内容送入 A。
优点,不改变特殊功能寄存器及 PC的状态,根据 A的内容就可以取出表格中的常数。
缺点,表格只能存放在该条查表指令后面的 256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。
(2) MOVC A,@A+DPTR
以 DPTR作为基址寄存器,A的内容作为无符号数和 DPTR
的内容相加得到一个 16位的地址,把由该地址指出的程序存储器单元的内容送到累加器 A,
例如 (DPTR)=8100H (A)=40H 执行指令
MOVC A,@A+DPTR
本指令的执行结果只和指针 DPTR及累加器 A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在 64K程序存储器中任意安排,一个表格可以为各个程序块公用 。
两条指令是在 MOV的后面加 C,,C”是 CODE的第一个字母,即代码的意思。
9,字节交换指令
XCH A,Rn
XCH A,direct
XCH A,@Ri
例如:
(A)=80H,(R7)=08H,(40H)=F0H
(R0)=30H,(30H)=OFH
执行下列指令:
XCH A,R7 ;(A)与 (R7)互换
XCH A,40H ;(A)与 (40H)互换
XCH A,@R0 ;(A)与 ((R0))互换结果,(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H
10,半字节交换指令
XCHD A,@Ri
累加器的低 4位与内部 RAM低 4位交换 。 例如:
(R0)=60H,(60H)=3EH,(A)=59H
执行完 XCHD A,@RO 指令,则 (A)=5EH,(60H)=39H。
3.4.2 算术操作类指令单字节的加、减、乘、除法指令,都是针对 8位二进制无符号数。
执行的结果对 Cy,Ac,OV 三种标志位有影响。
但增 1和减 1指令不影响上述标志。
1,加法指令共有 4条加法运算指令:
ADD A,Rn ;(A)+(Rn)→A,n=0~ 7
ADD A,direct ;(A)+(direct)→A
ADD A,@Ri ;(A)+((Ri))→A,i= 0,1
ADD A,#data ; (A)+#data→A
一个加数总是来自累加器 A,而另一个加数可由不同的寻址方式得到 。 结果总是放在 A中 。
使用加法指令时,要注意累加器 A中的运算结果对各个标志位的影响:
( 1) 如果位 7有进位,则置,1”进位标志 Cy,否则清
,0”Cy
( 2) 如果位 3有进位,置,1”辅助进位标志 Ac,否则清,0”Ac( Ac为 PSW寄存器中的一位 )
( 3) 如果位 6有进位,而位 7没有进位,或者位 7有进位,而位 6没有,则溢出标志位 OV置,1”,否则清
,0”OV。
溢出标志位 OV的状态,只有在带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器 A所能表示的带符号数的有效范围例 (A)=53H,(R0)=FCH,执行指令
ADD A,R0
结果为,(A)=4FH,Cy=1,Ac=0,OV=0,P=1
注意:上面的运算中,由于位 6和位 7同时有进位,所以标志位 OV=0。
例 (A)= 85H,(R0)=20H,( 20H) =AFH,执行指令:
ADD A,@R0
结果为,( A) =34H,Cy=1,Ac=1,OV=1,P=1
注意:由于位 7有进位,而位 6无进位,所以标志位
OV=1
2.带进位加法指令标志位 Cy参加运算,因此是三个数相加。共 4条:
ADDC A,Rn ;(A)+(Rn)+C→A,n=0 ~ 7
ADDC A,direct ;(A)+(direct)+C→A
ADDC A,@Ri ;(A)+(Ri)+C→A,i=0,1
ADDC A,#data ;(A)+#data+C→A
例,( A) =85H,( 20H) =FFH,Cy=1,执行指令:
ADDC A,20H
结果为,( A) =85H,Cy=1,Ac=1,OV=0,P=1 ( A中 1
的位数为奇数 )
3,增 1指令
5条增 1指令:
INC A
INC Rn ;n=0~ 7
INC direct
INC @Ri ;i=0,1
INC DPTR
不影响 PSW中的任何标志 。
第 5条指令 INC DPTR,是 16位数增 1指令 。 指令首先对低 8位指针 DPL的内容执行加 1的操作,当产生溢出时,
就对 DPH的内容进行加 1操作,并不影响标志 Cy的状态 。
4,十进制调整指令用于对 BCD码十进制数加法运算结果的内容修正 。
指令格式,DA A
两个 BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩 BCD码的和数 。
二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果 。 例如:
( a) 3+6=9 0011+0101=1001 运算结果正确
( b) 7+8=15 0111+1000=1111 运算结果不正确
( c) 9+8=17 1001+1000=00001 C=1 结果不正确二进制数加法指令不能完全适用于 BCD码十进制数的加法运算,对结果作有条件的修正 ——十进制调整
出错原因和调整方法:
BCD码只用了了其中的 10个,6个没用到的编码 。
( 1010,1011,1100,1101,1110,1111)为 无效码凡结果进入或者跳过无效码编码区时,其结果就是错误的 。
调整的方法是把结果加 6调整,即所谓十进制调整修正。
修正方法应是:
( a) 累加器低 4位大于 9或辅助进位位 Ac=1,则进行低 4位加 6修正 。
( b) 累加器高 4位大于 9或进位位 Cy=1,则进行高 4
位加 6修正 。
( c) 加器高 4位为 9,低 4位大于 9,则高 4位和低 4位分别加 6修正 。
具体是通过执行指令,DA A 来自动实现的 。
例 ( A) =56H,( R5) =67H,把它们看作为两个压缩的 BCD数,进行 BCD数的加法 。 执行指令:
ADD A,R5
DA A
由于高、低 4位分别大于 9,所以要分别加 6进行十进制调整对结果进行修正。
结果为,( A) =23H,Cy=1
可见,56+67=123,结果是正确的。
5.带借位的减法指令
4条指令:
SUBB A,Rn ; ( A) -( Rn) - Cy→A,n=0~ 7
SUBB A,direct ; ( A) -( direct) - Cy→A
SUBB A,@Ri;( A) -( (Ri)) - Cy→A,i=0,1
SUBB A,#data ;( A) -#data - Cy→A
从累加器 A中的内容减去指定的变量和进位标志 Cy的值,结果存在累加器 A中。
如果位 7需借位则置,1” Cy,否则清,0”Cy;
如果位 3需借位则置,1”Ac,否则清,0”Ac;
如果位 6需借位而位 7不需要借位,或者位 7需借位,
位 6不需借位,则置,1”溢出标志位 OV,否则清
,0”OV。
例 ( A) =C9H,( R2) =54H,Cy=1,执行指令,
SUBB A,R2
结果,( A) =74H,Cy=0,Ac=0,OV=1( 位 6向位 7借位 )
6,减 1指令
4条指令:
DEC A ; (A)-1→A
DEC Rn ; (Rn)-1→Rn,n=0~ 7
DEC direct ; (direct)-1→direct
DEC @Ri ; ((Ri))-1→ ( Ri),i=0,1
减 1指令不影响标志位 。
7,乘法指令
MUL AB ; A× B→BA
如果积大于 255,则置,1”溢出标志位 OV
8.除法指令
DIV AB ; A/B→A ( 商 ),余数 → B
如果 B的内容为,0”( 即除数为,0”),则存放结果的 A,B中的内容不定,并置,1”溢出标志位 OV。
3.4.3 逻辑运算指令
1,简单逻辑操作指令
(1) CLR A
功能是累加器 A清,0”。 不影响 Cy,Ac,OV等标志 。
(2) CPL A
功能是将累加器 A的内容 按位逻辑取反,不影响标志 。
2,左环移指令
RL A
功能是累加器 A的 8位向左循环移位,位 7循环移入位 0,
不影响标志。
3,带进位左环移指令
RLC A
功能是将累加器 A的内容和进位标志位 Cy一起向左环移一位,Acc.7移入进位位 Cy,Cy移入 Acc.0,不影响其它标志。
4,右环移指令
RR A
功能是累加器 A的内容向右环移一位,Acc.0移入
Acc.7,不影响其它标志 。
5.带进位环移指令
RRC A
这条指令的功能是累加器 A的内容和进位标志 Cy一起向右环移一位,Acc.0进入 Cy,Cy移入 Acc.7。
6,累加器半字节交换指令
SWAP A
将累加器 A的高半字节 ( Acc.7~ Acc.4) 和低半字节
( Acc.3~ Acc.0) 互换 。
例 ( A) =0C5H,执行指令:
SWAP A
结果,( A) =5CH
7,逻辑与指令
ANL A,Rn ; ( A) ∧ ( Rn) → A,n=0~ 7
ANL A,direct ; ( A) ∧ ( direct) → A
ANL A,#data ; ( A) ∧ #data→A
ANL A,@Ri ; ( A) ∧ (( Ri) )→A,i=0~ 1
ANL direct,A ; ( direct) ∧ (A)→direct
ANL direct,#data; ( direct) ∧ #data→direct
例 ( A) =07H,( R0) =0FDH,执行指令:
ANL A,R0
结果,( A) =05H
8.逻辑或指令
ORL A,Rn ; (A)∨ ( Rn) → A,n=0~ 7
ORL A,direct ; (A)∨ ( direct) → A
ORL A,#data ; (A)∨ data→A
ORL A,@Ri ; (A)∨((Ri))→A,i=0,1
ORL direct,A ; ( direct) ∨ (A)→direct
ORL direct,#data; ( direct) ∨ #data→direct
例 ( P1) =05H,( A) =33H,执行指令
ORL P1,A
结果,( P1) =37H
9,逻辑异或指令
XRL A,Rn ; (A) ⊕(Rn)→A
XRL A,direct ; (A) ⊕ ( direct) → A
XRL A,@Ri; (A)⊕( ( Ri) )→A,i=0,1
XRL A,#data ; (A)⊕#data→A
XRL direct,A; ( direct) ⊕ ( A) → direct
XRL direct,#data;( direct) ⊕ #data →direct
例 ( A) =90H,( R3) =73H 执行指令:
XRL A,R3
结果:( A) =E3H
3.4.4 控制转移类指令
1,无条件转移指令
AJMP addrll
2K字节范围内 的无条件跳转指令,64K程序存储器空间分为 32个区,每区 2K字节,转移的目标地址必须与 AJMP下一条指令的地址的高 5位地址码
A15~A11相同。
执行指令时,先 PC加 2,然后把 addrll送入 PC.10~
PC.0,PC.15~ PC.11保持不变,程序转移到目标地址。
本指令是为能与 MCS-48的 JMP指令兼容而设的。
2,相对转移指令
SJMP rel
实现的程序转移是双向的。
在编写程序时,直接写上要转向的目标地址标号就可以。
例如:
LOOP,MOV A,R6

SJMP LOOP

程序在汇编时,由汇编程序自动计算和填入偏移量 。
手工汇编时,偏移量 rel的值则需程序设计人员自己计算。
3,长跳转指令
LJMP addr16
指令执行时把指令的第二和第三字节分别装入 PC的高位和低位字节中,无条件地转向 addr16指出的目标地址 。
目标地址可以在 64K程序存储器地址空间的任何位置 。
4,间接跳转指令
JMP @A+DPTR
由 A中 8位无符号数与 DPTR的 16位数内容之和来确定 。 以
DPTR内容作为基址,A的内容作变址 。
给 A赋予不同的值,即可实现程序的多分支转移 。
5.条件转移指令规定的条件满足,则进行转移,条件不满足则顺序执行下一条指令。
当条件满足时,把 PC装入下一条指令的第一个字节地址,再把带符号的相对偏移量 rel加到 PC上,计算出目标地址。
JZ rel ;如果累加器为,0”,则转移
JNZ rel ;如果累加器非,0”,则转移
6,比较不相等转移指令
CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
比较前面两个操作数的大小,如果它们的值不相等则转移。
如果第一操作数(无符号整数)小于第二操作数(无符号整数),则置进位标志位 Cy,否则清,0”Cy。
7,减 1不为 0转移指令这是一组把减 1与条件转移两种功能结合在一起的指令 。 共两条指令:
DJNZ Rn,rel ;n=0~ 7
DJNZ direct,rel
将源操作数( Rn或 direct)减 1,结果回送到 Rn寄存器或 direct中去。如果结果不为 0则转移。允许程序员把寄存器 Rn或内部 RAM的 direct单元用作程序循环计数器。主要用于控制程序循环。以减 1后是否为,0”作为转移条件,即可实现按次数控制循环。
8.调用子程序指令
(1)短调用指令
ACALL addrll
与 AJMP指令相类似,是为了与 MCS-48中的 CALL指令兼容而设的 。
(2)长调用指令
LCALL addr16
9,子程序的返回指令
RET
执行本指令时:
( SP) → PCH,然后 ( SP) -1→SP
( SP) → PCL,然后 ( SP) -1→SP
功能是从堆栈中退出 PC的高 8位和低 8位字节,把栈指针减 2,从 PC值开始继续执行程序。
10,中断返回指令
RETI
功能与 RET指令相似,两指令不同之处,是本指令清除了中断响应时,被置,1”的 MCS-51内部中断优先级寄存器的优先级状态 。
11,空操作指令
NOP
3.4.5 位操作指令
1.数据位传送指令
MOV C,bit
MOV bit,C
例 MOV C,06H ; (20H).6→Cy
06H是内部 RAM 20H字节位 6的位地址 。
MOV P1.0,C ; Cy→P 1.0
2,位变量修改指令
CLR C ;清,0”Cy
CLR bit ;清,0”bit位
CPL C ; Cy求反
CPL bit ; bit位求反
SETB C ;置,1” Cy
SETB bit ;置,1” bit位这组指令将操作数指出的位清,0”、求反、置,1”,
不影响其它标志。
例 CLR C ; 0→Cy
CLR 27H ; 0→ ( 24H),7位
CPL 08H ; → ( 21H),0位
SETB P1.7 ; 1→P 1.7位
3.位变量逻辑与指令
ANL C,bit ; bit∧Cy→Cy
ANL C,/bit; ; /bit ∧Cy→Cy
4,位变量逻辑或指令
ORL C,bit
ORL C,/bit
5,条件转移类指令
JC rel ;如果进位位 Cy=1,则转移
JNC rel ;如果进位位 Cy=0,则转移
JB bit,rel ;如果直接寻址位 =1,
则转移
JNB bit,rel ;如果直接寻址位 =0,
则转移
JBC bit,rel ;如果直接寻址位 =1,
则转移,并清 0直接寻址位表 3-2至表 3-6( P61-P64)列出了按指令功能排列的全部指令及功能的简要说明,以及指令长度、执行的时间以及指令代码(机器代码)。
读者可根据指令助记符,迅速查到对应的指令代码
(手工汇编)。也可根据指令代码迅速查到对应的指令助记符(手工反汇编)。
应熟练地掌握这些指令表的使用,因为这是使用
MCS-51汇编语言进行程序设计的基础。
表 3-2