ANL direct,A
; (direct)←(direct)∧(A) 0101 0010 direct ANL direct,#data ; 0101 0011 (direct)←(direct)∧data
direct data 这组指令的功能是在指出的变量之间进行以位为基础的逻辑“与”操作,将结果存放在
目的变量中。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。当指令ANL direct,A和ANL direct,#data用于修改一个输出口时,即直接地址direct为端口P0~P3时,作为原始端口数据的值将从输出口数据锁存器(P0~P3)读入,而不是读引脚状态。
例如:设(A)=07H,(R0)=0FDH,执行指令: ANL A,R0 结果:(A)=05H
2.逻辑或指令
汇编指令格式 机器码格式 操 作 ORL A,Rn
; 0100 0101 (A)←(A)∨(direct)
direct
; (A)←(A)∨(Rn) 0100 1rrr ORL A,direct
ORL A,@Ri
ORL A,#data
26
; 0100 011i (A)←(A)∨((Ri))
0100 0100 ;
data (A)←(A)∨Data
ORL direct,A
; 0100 0010 direct (direct)←(direct)∨(A)
ORL direct,#data ; 0100 0011 data
direct data (direct)←(direct)∨
这组指令的功能是在所指出的变量之间执行以位为基础的逻辑“或”操作,结果存到目的变量中去。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式。当指令ORL direct,A和ORL direct,#data用于修改一个输出口时,即直接地址direct为端口P0~P3时,作为原始端口数据的值将从输出口数据锁存器(P0~P3)读入,而不是读引脚状态。
例如:设(P1)=05H,(A)=33H执行指令: 结果:(P1)=37H
3.逻辑异或指令
汇编指令格式 机器码格式 操 作
XRL A,Rn
XRL A,direct
; 0110 0101 (A)←(A)⊕(direct)
direct ; (A)←(A)⊕((Ri)) 0110 011i
ORL P1,A
; (A)←(A)⊕(Rn) 0110 1rrr XRL A,@Ri
XRL A,#data
XRL direct,A
; 0110 (A)←(A)⊕Data 0100 data 0110 0010 ; direct
(direct)←(direct)⊕(A)
27
0110 0011 XRL direct,#data ; (direct)←(direct)⊕data
direct data
这组指令的功能是在所指出的变量之间执行以位为基础的逻辑“异或”操作,结果存放到目的变量中去。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。当指令XRL direct,A和XRL direct,#data用于修改一个输出口时,即直接地址direct为端口P0~P3时,作为原始端口数据的值将从输出口数据锁存器(P0~P3)读入,而不是读引脚状态。
例如:设(P1)=05H,(A)=33H,执行指令:
XRL
P1,A
结果:(P1)=36H
i.
3.3.4 控制转移指令
MCS-51系列单片机有丰富的转移类指令(共17条),包括无条件转移指令、条件转移指令、调用指令及返回指令等。所有这些指令的目的地址都是在64KB程序存储器地址空间。
1. 无条件转移指令(LJMP、AJMP、SJMP、JMP)
(1)绝对转移指令
汇编指令格式 机器码格式 操 作
AJMP addr11
a10a9a8 0 0001 ; (PC)+2→(PC)
a7~a0 addr11→PC10~0 PC15~11不变
28
这是2KB范围内的无条件跳转指令,把程序的执行转移到a10~a0指定的地址。该指令在运行时先将PC+2,然后通过把指令中的a10~a0→(PC10~0)得到跳转目的地址(即把PC15PC14PC13PC12PC11 a10a9a8a7a6a5a4a3a2a1a0送入PC)。因为指令只提供低11位地址,因此目标地址必须与AJMP后面一条指令的第一个字节在同一个2KB区域的存储器区内。指令的操作码与转移目标地址所在的页号有关。见表3-1
例如:KWR: AJMP addr11
如果设addr11=00100000000B,标号KWR的地址为1030,则执行该条指令后,程序将转移到1100H。此时该指令的机器码为21H,00H(a10a9a8=001,故指令第一个字节为21H)。
表3-1 AJMP、ACALL指令操作码与页面的关系
子 程 序 入 口 转 移 地 址 页 面 号 00 08 10 18 20 18 30 38 40 48 50 58 60 68 70 78 80 88 90 98 A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8 01 09 11 19 21 19 31 39 41 49 51 59 61 69 71 79 81 89 91 99 A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9 02 0A 12 1A 22 1A 32 3A 42 4A 52 5A 62 6A 72 7A 82 8A 92 9A A2 AA B2 BA C2 CA D2 DA E2 EA F2 FA 03 0B 13 1B 23 1B 33 3B 43 4B 53 5B 63 6B 73 7B 83 8B 93 9B A3 AB B3 BB C3 CB D3 DB E3 EB F3 FB 04 0C 14 1C 24 1C 34 3C 44 4C 54 5C 64 6C 74 7C 84 8C 94 9C A4 AC B4 BC C4 CC D4 DC E4 EC F4 FC 05 0D 15 1D 25 1D 35 3D 45 4D 55 5D 65 6D 75 7D 85 8D 95 9D A5 AD B5 BD C5 CD D5 DD E5 ED F5 FD 06 0E 16 1E 26 1E 36 3E 46 4E 56 5E 66 6E 76 7E 86 8E 96 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 FE 07 0F 17 1F 27 1F 37 3F 47 4F 57 5F 67 6F 77 7F 87 8F 97 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 FF 操 作 码 AJMP 01 21 41 61 81 A1 C1 E1 ACALL 11 31 51 71 91 B1 D1 F1
(2)长跳转指令
汇编指令格式 机器码格式 操 作
0000 0010 LJMP addr16 ; addr16→(PC) a15~a8
a7~a0 29
指令提供了16位目标地址,执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64KB程序存储器地址空间的任何地方,不影响任何标志。
例如:执行指令 LJMP 3000H
不管这条长跳转指令存放在什么地方,执行时将使程序转移到3000H。这和AJMP指令是有差别的。
(3)相对转移(短跳转)指令
汇编指令格式 机器码格式 操 作
SJMP rel ; (PC)+2→(PC) 1000 0000 相对地址(rel)
(PC)+ rel→(PC)
指令的操作数是相对地址,rel是一个带符号的偏移字节数(2的补码),因此,转向的目标地址可以在这条指令前128字节到后127字节之间。在用汇编语言编写程序时,rel是目的地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。
例如: KRD: SJMP PKRD
如果KRD标号值为0100H(即SJMP这条指令的机器码存放于0100H和0101H这两处单元中);标号PKRD值为0123H,即跳转的目标地址为0123H,则指令的第二个字节(相对偏移量)应为:
rel=0123H-0102H=21H
4. 散转指令
汇编指令格式 机器码格式 操 作
30