——————————————————————————————
跳转命令
——————————————————————————————-
根据条件作出是否跳转的决定,通常前面会有一个判断语句,例如:
CMP AX,BX
JZ XX //jump zero
上面两条命令意为用 AX 减 BX ,它的值如果为 0 则跳转到 XX 的标号行。
常用的跳转命令有:
JZ/JE 相等或为零为则跳转
JNZ/JNE 不相等或不为零则跳转
JL/JLE 小于/小于或等于则跳转
JG/JGE 大于/大于或等于则跳转
JMP 无条件跳转
——————————————————————————————-
比较语句
——————————————————————————————-
CMP AX , BX //AX 寄存器减去 BX 寄存器的内容
AND AX , BX //AX 与 BX 做“与运算 ”
OR AX , BX //AX 与 BX 做“或运算 ”
TEST AX , BX 与 AND AX,BX 命令有相同效果
XOR AX , AX 使 AX 的内容清零,每个寄存器与自己作异或运算等于清零动作
——————————————————————————————-
子程序
——————————————————————————————-
一个子程的模样长得像这个样子
CALL 15F:334422
子程式是个很重要的概念,它是主程式的一个分支,用来做特定动作。
打个比方:你要上班,先你是走路到车站,然后上车,然后下车,然后走到自己的办公室。
这里如果要把上班编为一段程式的话,那么就可以把 “走路 ”、 “搭车 ”、 “走到办公室 ”做为分支程式来处理。
说得再通俗一点就是 : 你要 破解 的程式不可能就是一条主程式到底, 肯定会呼叫下面的子程式,由子程式来处理你发送的注册信息,然后比较,然后标记是否注册正确,这些都是靠它来完成的。所以说,破解的关键在于,你找准程式在哪儿将会作注册判断,并进入那个注册子程式,仔细观察,你就成功了。(子程式的返回码是 RET )
——————————————————————————————-
算术运算
——————————————————————————————-
ADD AX,BX | 加法运算 | AX=AX+BX |
---|---|---|
SUB AX,BX | 减法运算 | AX=AX-BX |
INC AX | 寄存器加一 | AX=AX+1 |
DEC AX | 寄存器减一 | AX=AX-1 |
MUL | 乘法运算 | |
DIV/idiv | 除法运算 |
——————————————————————————————-
数据操作
——————————————————————————————-
MOV AX,BX 数据传送指令,将 BX 的值移送到 AX 中
XCHG AX,BX 将 AX 与 BX 的值互换
8086/8088 指令集
为了便于查询,这里分类列出 8086/8088 汇编指令:
数据传送指令
MOV
功能 : 把源操作数送给目的操作数
语法 : MOV 目的操作数 ,源操作数
格式 : MOV r1,r2 或 MOV r,m 或 MOV m,r 或 MOV r,data
XCHG
功能 : 交换两个操作数的数据
语法 : XCHG
格式 : XCHG r1,r2 或 XCHG m,r 或 XCHG r,m
PUSH,POP
功能 : 把操作数压入或取出堆栈
语法 : PUSH 操作数 POP 操作数
格式 : PUSH r 或 PUSH M 或 PUSH data POP r 或 POP m
PUSHF,POPF,PUSHA,POPA // PUSHFD POPFD PUSHAD POPAD
功能 : 堆栈指令群
格式 : PUSHF POPF PUSHAPOPA
LEA,LDS,LES
功能 : 取地址至寄存器
语法 : LEA r,m LDS r,mLES r,m
XLAT(XLATB)
功能 : 查表指令
语法 : XLAT XLAT m
算术运算指令
ADD,ADC
功能 : 加法指令
语法 : ADD OP1,OP2 ADCOP1,OP2
格式 : ADD r1,r2 ADDr,m ADD m,r ADD r,data
影响标志 : C,P,A,Z,S,O
SUB,SBB
功能 :减法指令
语法 : SUB OP1,OP2 SBB OP1,OP2
格式 : SUB r1,r2 SUBr,m SUB m,r SUB r,data SUB m,data
影响标志 : C,P,A,Z,S,O
INC,DEC
功能 : 把 OP 的值加一或减一
语法 : INC OP DEC OP
格式 : INC r/m DEC r/m
影响标志 : P,A,Z,S,O
NEG
功能 : 将 OP 的符号反相 (取二进制补码 )
语法 : NEG OP
格式 : NEG r/m
影响标志 : C,P,A,Z,S,O
MUL,IMUL
功能 : 乘法指令
语法 : MUL OP IMUL OP
格式 : MUL r/m IMUL r/m
影响标志 : C,P,A,Z,S,O( 仅 IMUL 会影响 S 标志 )
DIV,IDIV
功能 :除法指令
语法 : DIV OP IDIV OP
格式 : DIV r/m IDIV r/m
CBW,CWD //change byte word // change word dword
功能 : 有符号数扩展指令
格式 : CBW CWD
AAA,AAS,AAM,AAD
功能 : 非压 BCD 码运算调整指令
格式 : AAA AAS AAM AAD
影响标志 : A,C(AAA,AAS)S,Z,P(AAM,AAD)
DAA,DAS
功能 : 压缩 BCD 码调整指令
格式 : DAA DAS
影响标志 : C,P,A,Z,S
字符串操作指令
MOVSB,MOVSW,MOVSD
功能 : 字符串传送指令
格式 : MOVSB MOVSWMOVSD
标志位 : 无
CMPSB,CMPSW,CMPSD
功能 : 字符串比较指令
格式 : CMPSB CMPSWCMPSD
标志位 : C,P,Z,S,O
SCASB,SCASW //scansb
功能 : 字符串搜索指令
格式 : SCASB SCASW
标志位 : C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能 : 字符串载入或存贮指令
格式 : LODSB LODSWSTOSB STOSW
标志位 : 无
REP,REPE,REPNE
功能 : 重复前缀指令集
格式 : REP 指令 S REPE 指令 S REPNE 指令 S
标志位 : 依指令 S 而定
位运算指令集
AND,OR,XOR,NOT,TEST
功能 : 执行 BIT 与 BIT 之间的逻辑运算
格 式 : AND r/m,r/m/dataOR r/m,r/m/data XOR r/m,r/m/data TEST
r/m,r/m/data NOT r/m
影响标志 : C,O,P,Z,S( 其中 C 与 O 两个标志会被设为 0) NOT 指令不影响任何标志位
SHR,SHL,SAR,SAL
功能 : 移位指令
格式 : SHR r/m,data/CLSHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志 : C,P,Z,S,O
ROR,ROL,RCR,RCL
功能 : 循环移位指令
格式 : ROR r/m,data/CLROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影响标志 : C,P,Z,S,O
程序流程控制指令
CLC,STC,CMC
功能 : 设定进位标志
格式 : CLC STC CMC
标志位 : C
CLD,STD
功能 : 设定方向标志
格式 : CLD STD
标志位 : D
CLI,STI
功能 : 设定中断标志
格式 : CLI STI
标志位 : I
CMP
功能 : 比较 OP1 与 OP2 的值
格式 : CMP r/m,r/m/data
标志位 : C,P,A,Z,O
JMP
功能 : 跳往指定地址执行
格式 : JMP 地址
JXX
功能 : 当特定条件成立则跳往指定地址执行
格式 : JXX 地址
XX 为下列值 :
A: ABOVE, 当 C=0,Z=0 时成立
B: BELOW, 当 C=1 时成立
C: CARRY, 当 CF=1 时成立
CXZ: CX 寄存器的值为 0(ZERO) 时成立
E: EQUAL, 当 Z=1 时成立
G: GREATER( 大于 ), 当 Z=0 且 S=0 时成立
L: LESS( 小于 ), 当 S 不为零时成立
N: NOT( 相反条件 ), 需和其它符号配合使用
O: OVERFLOW,O=1 时成立
P: PARITY,P=1 时成立
PE: PARITY EVEN,P=1 时成立
PO: PARITY ODD,P=0 时成立
S: SIGN,S=1 时成立
Z: ZERO,Z=1 时成立
LOOP
功能 : 循环指令集
语法 : LOOP 地址
LOOPE(Z)
格式: LOOPNE(Z) 地址
标志位 : 无
CALL,RET
功能 : 子程序调用 ,返回指令
语法 : CALL 地址 RET RET n
标志位 : 无
INT,IRET
功能 : 中断调用及返回指令
语法 : INT n IRET
标志位 : 在执行 INT 时,CPU 会自动将标志寄存器的值入栈 ,在执行 IRET 时则会将堆栈中
的标志值弹回寄存器
处理器状态控制指令
NOP
功能 : 空操作指令。不执行任何操作,但要花费 CPU 一个机器周期
格式 : NOP
HLT
功能 : 暂停指令。 CPU 不执行任何操作,一直处于暂停状态,但 IP 指向 HLT 的下一条指令。
格式 : HLT
脱离 HLT 状态的方式: 1 、 CPU 复位; 2 、 CPU 响应中断ESC, WAIT , LOCK
功能 : 用于多处理器系统。其中 ESC 是交权指令; WAIT 是等待指令; LOCK 是总线封锁指令
助记符 | 指令说明 | 字节数 | 周期数 | ||
---|---|---|---|---|---|
(数据传递类指令) | |||||
MOV | A, Rn | 寄存器传送到累加器 | 1 | 1 | |
MOV | A, direct | 直接地址传送到累加器 | 2 | 1 | |
MOV | A, @Ri | 累加器传送到外部 RAM(8 地址 | 1 | 1 | |
MOV | A, #data | 立即数传送到累加器 | 2 | 1 | |
MOV | Rn, A | 累加器传送到寄存器 | 1 | 1 | |
MOV | Rn, direct | 直接地址传送到寄存器 | 2 | 2 | |
MOV | Rn, #data | 累加器传送到直接地址 | 2 | 1 | |
MOV | direct , Rn | 寄存器传送到直接地址 | 2 | 1 | |
MOV | direct , direct | 直接地址传送到直接地址 | 3 | 2 | |
MOV | direct , A | 累加器传送到直接地址 | 2 | 1 | |
MOV | direct , @Ri | 间接 RAM传送到直接地址 | 2 | 2 | |
MOV | direct , #data | 立即数传送到直接地址 | 3 | 2 | |
MOV | @Ri, A | 直接地址传送到直接地址 | 1 | 2 | |
MOV | @Ri, direct | 直接地址传送到间接 RAM | 2 | 1 | |
MOV | @Ri, #data | 立即数传送到间接 RAM | 2 | 2 | |
MOV | DPTR, #data16 | 16 位常数加载到数据指针 | 3 | 1 | |
MOVC | A, @A+DPTR | 代码字节传送到累加器 | 1 | 2 | |
MOVC | A, @A+PC | 代码字节传送到累加器 | 1 | 2 | |
MOVX | A, @Ri | 外部 RAM(8 地址 ) 传送到累加器 | 1 | 2 | |
MOVX | A, @DPTR | 外部 RAM(16 地址 ) 传送到累加器 | 1 | 2 | |
MOVX | @Ri, A | 累加器传送到外部 RAM(8 地址 ) | 1 | 2 | |
MOVX | @DPTR , A | 累加器传送到外部 RAM(16 地址 ) | 1 | 2 | |
PUSH | direct | 直接地址压入堆栈 | 2 | 2 | |
POP | direct | 直接地址弹出堆栈 | 2 | 2 | |
XCH | A,Rn | 寄存器和累加器交换 | 1 | 1 | |
XCH | A, direct | 直接地址和累加器交换 | 2 | 1 | |
XCH | A, @Ri | 间接 RAM和累加器交换 | 1 | 1 | |
XCHD | A, @Ri | 间接 RAM和累加器交换低 4 位字节 | 1 | 1 | |
( 算术运算类指令 ) | |||||
INC | A | 累加器加 1 | 1 | 1 | |
INC | Rn | 寄存器加 1 | 1 | 1 | |
INC | direct | 直接地址加 1 | 2 | 1 | |
INC | @Ri | 间接 RAM加 1 | 1 | 1 | |
INC | DPTR | 数据指针加 1 | 1 | 2 | |
DEC | A | 累加器减 1 | 1 | 1 | |
DEC | Rn | 寄存器减 1 | 1 | 1 | |
DEC | direct | 直接地址减 1 | 2 | 2 | |
DEC | @Ri | 间接 RAM减 1 | 1 | 1 | |
MUL | AB | 累加器和 B 寄存器相乘 | 1 | 4 | |
DIV | AB | 累加器除以 B 寄存器 | 1 | 4 | |
DA | A | 累加器十进制调整 | 1 | 1 | |
ADD | A,Rn | 寄存器与累加器求和 | 1 | 1 | |
ADD | A,direct | 直接地址与累加器求和 | 2 | 1 | |
ADD | A,#data | 立即数与累加器求和 | 2 | 1 | |
ADD | A,@Ri | 间接 RAM与累加器求和 | 1 | 1 | |
ADDC | A,Rn | 寄存器与累加器求和 ( 带进位 ) | 1 | 1 | |
ADDC | A,direct | 直接地址与累加器求和 ( 带进位 ) | 2 | 1 | |
ADDC | A,@Ri | 间接 RAM与累加器求和 ( 带进位 ) | 1 | 1 | |
ADDC | A,#data | 立即数与累加器求和 ( 带进位 ) | 2 | 1 | |
SUBB | A,Rn | 累加器减去寄存器 ( 带借位 ) | 1 | 1 | |
SUBB | A,direct | 累加器减去直接地址 ( 带借位 ) | 2 | 1 | |
SUBB | A,@Ri | 累加器减去间接 RAM(带借位 ) | 1 | 1 | |
SUBB | A,#data | 累加器减去立即数 ( 带借位 ) | 2 | 1 | |
( 逻辑运算类指令 ) | |||||
ANL | A,Rn | 寄存器“与”到累加器 | 1 | 1 | |
ANL | A,direct | 直接地址“与”到累加器 | 2 | 1 | |
ANL | A,@Ri | 间接 RAM“与”到累加器 | 1 | 1 | |
ANL | A,#data | 立即数“与”到累加器 | 2 | 1 | |
ANL | direct,A | 累加器“与”到直接地址 | 2 | 1 | |
ANL | direct, #data | 立即数“与”到直接地址 | 3 | 2 | |
ORL | A,Rn | 寄存器“或”到累加器 | 1 | 2 | |
ORL | A,direct | 直接地址“或”到累加器 | 2 | 1 | |
ORL | A,@Ri | 间接 RAM“或”到累加器 | 1 | 1 | |
ORL | A,#data | 立即数“或”到累加器 | 2 | 1 | |
ORL | direct,A | 累加器“或”到直接地址 | 2 | 1 | |
ORL | direct, #data | 立即数“或”到直接地址 | 3 | 1 | |
XRL | A,Rn | 寄存器“异或”到累加器 | 1 | 2 | |
XRL | A,direct | 直接地址“异或”到累加器 | 2 | 1 | |
XRL | A,@Ri | 间接 RAM“异或”到累加器 | 1 | 1 | |
XRL | A,#data | 立即数“异或”到累加器 | 2 | 1 | |
XRL | direct,A | 累加器“异或”到直接地址 | 2 | 1 | |
XRL | direct, #data | 立即数“异或”到直接地址 | 3 | 1 | |
CLR | A | 累加器清零 | 1 | 2 | |
CPL | A | 累加器求反 | 1 | 1 | |
RL | A | 累加器循环左移 | 1 | 1 | |
RLC | A | 带进位累加器循环左移 | 1 | 1 | |
RR | A | 累加器循环右移 | 1 | 1 | |
RRC | A | 带进位累加器循环右移 | 1 | 1 | |
SWAP | A | 累加器高、低 4 位交换 | 1 | 1 | |
( 控制转移类指令 ) | |||||
JMP | @A+DPTR | 相对 DPTR 的无条件间接转移 | 1 | 2 | |
JZ | rel | 累加器为 0 则转移 | 2 | 2 | |
JNZ | rel | 累加器为 1 则转移 | 2 | 2 | |
CJNE | A,direct,rel | 比较直接地址和累加器 , 不相等转移 | 3 | 2 | |
CJNE | A,#data,rel | 比较立即数和累加器 , 不相等转移 | 3 | 2 | |
CJNE | Rn,#data,rel | 比较寄存器和立即数 , 不相等转移 | 2 | 2 | |
CJNE | @Ri,#data,rel | 比较立即数和间接 RAM,不相等转移 | 3 | 2 | |
DJNZ | Rn,rel | 寄存器减 1, 不为 0 则转移 | 3 | 2 | |
DJNZ | direct,rel | 直接地址减 1, 不为 0 则转移 | 3 | 2 | |
NOP | 空操作 , 用于短暂延时 | 1 | 1 | ||
ACALL | add11 | 绝对调用子程序 | 2 | 2 | |
LCALL | add16 | 长调用子程序 | 3 | 2 | |
RET | 从子程序返回 | 1 | 2 | ||
RETI | 从中断服务子程序返回 | 1 | 2 | ||
AJMP | add11 | 无条件绝对转移 | 2 | 2 | |
LJMP | add16 | 无条件长转移 | 3 | 2 | |
SJMP | rel | 无条件相对转移 | 2 | 2 | |
( 布尔指令 ) | |||||
CLR | C | 清进位位 | 1 | 1 | |
CLR | bit | 清直接寻址位 | 2 | 1 | |
SETB | C | 置位进位位 | 1 | 1 | |
SETB | bit | 置位直接寻址位 | 2 | 1 | |
CPL | C | 取反进位位 | 1 | 1 | |
CPL | bit | 取反直接寻址位 | 2 | 1 | |
ANL | C,bit | 直接寻址位“与”到进位位 | 2 | 2 | |
ANL | C, /bit | 直接寻址位的反码“与”到进位位 | 2 | 2 | |
ORL | C,bit | 直接寻址位“或”到进位位 | 2 | 2 | |
ORL | C, /bit | 直接寻址位的反码“或”到进位位 | 2 | 2 | |
MOV | C,bit | 直接寻址位传送到进位位 | 2 | 1 | |
MOV | bit, C | 进位位位传送到直接寻址 | 2 | 2 | |
JC | rel | 如果进位位为 1 则转移 | 2 | 2 | |
JNC | rel | 如果进位位为 0 则转移 | 2 | 2 | |
JB | bit, rel | 如果直接寻址位为 1 则转移 | 3 | 2 | |
JNB | bit, rel | 如果直接寻址位为 0 则转移 | 3 | 2 | |
JBC | bit, rel | 直接寻址位为 1 则转移并清除该位 | 2 | 2 | |
(伪指令) | |||||
ORG | 指明程序的开始位置 | ||||
DB | 定义数据表 | ||||
DW | 定义 16 位的地址表 | ||||
EQU | 给一个表达式或一个字符串起名 | ||||
DATA | 给一个 8 位的内部 RAM起名 | ||||
XDATA | 给一个 8 位的外部 RAM起名 | ||||
BIT | 给一个可位寻址的位单元起名 | ||||
END | 指出源程序到此为止 | ||||
(指令中的符号标识) | |||||
Rn | 工作寄存器 R0-R7 | ||||
Ri | 工作寄存器 R0 和 R1 | ||||
@Ri | 间接寻址的 8 位 RAM单元地址( 00H-FFH) | ||||
#data8 | 8 位常数 | ||||
#data16 | 16 位常数 | ||||
addr16 | 16 位目标地址,能转移或调用到 64KROM的任何地方 | ||||
addr11 | 11 位目标地址,在下条指令的 2K 范围内转移或调用 | ||||
Rel | 8 位偏移量,用于 SJMP 和所有条件转移指令,范围 -128 ~+127 | ||||
Bit | 片内 RAM中的可寻址位和 SFR 的可寻址位 | ||||
$ | 指本条指令的起始位置 | ||||
Rn R0 ~ R7 寄存器 n=0 ~ 7
Direct 直接地址,内部数据区的地址 RAM(00H ~ 7FH)
SFR(80H ~ FFH) B , ACC , PSW , IP, P3, IE, P2 , SCON , P1 , TCON , P0
@Ri 间接地址 Ri=R0 或 R1 8051/31RAM 地址 (00H ~ 7FH) 8052/32RAM 地址 (00H ~FFH)
#data 8 位常数
#data16 16 位常数
Addr16 16 位的目标地址
Addr11 11 位的目标地址
Rel 相关地址
bit 内部数据 RAM(20H ~ 2FH) ,特殊功能寄存器的直接地址的位指令介绍指令 字节 周期 动作说明算数运算指令
1. ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器
2. ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器
3. ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器
4. ADD A,#data 2 1 将累加器与常数相加,结果存回累加器
5. ADDC A,Rn 1 1 将累加器与寄存器的内容及进位 C 相加,结果存回累加器
6. ADDC A,direct 2 1 将累加器与直接地址的内容及进位 C 相加,结果存回累加器
7. ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位 C 相加,结果存回累加器
8. ADDC A,#data 2 1 将累加器与常数及进位 C 相加,结果存回累加器
9. SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位 C,结果存回累加器
10. SUBB A,direct 2 1 将累加器的值减直接地址的值减借位 C,结果存回累加器
11. SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位 C,结果存回累加器
12. SUBB A,#data 2 1 将累加器的值减常数值减借位 C,结果存回累加器
13. INC A 1 1 将累加器的值加 1
14. INC Rn 1 1 将寄存器的值加 l
15. INC direct 2 1 将直接地址的内容加 1
16. INC @Ri 1 1 将间接地址的内容加 1
17. INC DPTR 1 1 数据指针寄存器值加 1
说明:将 16 位的 DPTR 加 1,当 DPTR 的低字节 (DPL) 从 FFH 溢出至 00H 时,会使高字节(DPH) 加 1,不影响任何标志位
18. DEC A 1 1 将累加器的值减 1
19. DEC Rn 1 1 将寄存器的值减 1
20. DEC direct 2 1 将直接地址的内容减 1
21. DEC @Ri 1 1 将间接地址的内容减 1
22. MUL AB 1 4 将累加器的值与 B 寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回 B 寄存器
说明:将累加器 A 和寄存器 B 内的无符号整数相乘,产生 16 位的积,低位字节存入 A,高位字节存入 B 寄存器 。 如果积大于 FFH, 则溢出标志位 (OV) 被设定为 1, 而进位标志位为 0
23. DIV AB 1 4 将累加器的值除以 B 寄存器的值,结果的商存回累加器,余数存回 B 寄存器
说明:无符号的除法运算,将累加器 A 除以 B 寄存器的值,商存入 A,余数存入 B。执行本指令后,进位位 (C)及溢出位 (OV) 被清除为 0
24. DA A 1 1 将累加器 A 作十进制调整,
若(A) 3-0>9 或(AC)=1 ,则 (A) 3- 0←(A)3 -0+6
若(A) 7-4>9 或 (C)=1 ,则 (A) 7- 4←(A)7 -4+6
逻辑运算指令
25. ANL A,Rn 1 1 将累加器的值与寄存器的值做 AND 的逻辑判断,结果存回累加器
26. ANL A,direct 2 1 将累加器的值与直接地址的内容做 AND 的逻辑判断,结果存回累加器
27. ANL A,@Ri 1 1 将累加器的值与间接地址的内容做 AND 的逻辑判断,结果存回累加器
28. ANL A,#data 2 1 将累加器的值与常数做 AND 的逻辑判断,结果存回累加器
29. ANL direct,A 2 1 将直接地址的内容与累加器的值做 AND 的逻辑判断,结果存回该直接地址
30. ANL direct,#data 3 2 将直接地址的内容与常数值做 AND 的逻辑判断,结果存回该直接地址
31. ORL A,Rn 1 1 将累加器的值与寄存器的值做 OR 的逻辑判断,结果存回累加器
32. ORL A,direct 2 1 将累加器的值与直接地址的内容做 OR 的逻辑判断,结果存回累加器
33. ORL A,@Ri 1 1 将累加器的值与间接地址的内容做 OR 的逻辑判断,结果存回累加器
34. ORL A,#data 2 1 将累加器的值与常数做 OR 的逻辑判断,结果存回累加器
35. ORL direct,A 2 1 将直接地址的内容与累加器的值做 OR 的逻辑判断,结果存回该直接地址
36. ORL direct,#data 3 2 将直接地址的内容与常数值做 OR 的逻辑判断,结果存回该直接地址
37. XRL A,Rn 1 1 将累加器的值与寄存器的值做 XOR 的逻辑判断,结果存回累加器
38. XRL A,direct 2 1 将累加器的值与直接地址的内容做 XOR 的逻辑判断,结果存回累加器
39. XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做 XOR 的逻辑判断,结果存回累加器
40. XRL A,#data 2 1 将累加器的值与常数作 XOR 的逻辑判断,结果存回累加器
41. XRL direct,A 2 1 将直接地址的内容与累加器的值做 XOR 的逻辑判断,结果存回该直接地址
42. XRL direct,#data 3 2 将直接地址的内容与常数的值做 XOR 的逻辑判断,结果存回该直接地址
43. CLR A 1 1 清除累加器的值为 0
44. CPL A 1 1 将累加器的值反相
45. RL A 1 1 将累加器的值左移一位
46. RLC A 1 1 将累加器含进位 C 左移一位
47. RR A 1 1 将累加器的值右移一位
48. RRC A 1 1 将累加器含进位 C 右移一位
49. SWAP A 1 1 将累加器的高 4 位与低 4 位的内容交换。 (A)3- 0←(A)7 -4数据转移指令
50. MOV A,Rn 1 1 将寄存器的内容载入累加器
51. MOV A,direct 2 1 将直接地址的内容载入累加器
52. MOV A,@Ri 1 1 将间接地址的内容载入累加器
53. MOV A,#data 2 1 将常数载入累加器
54. MOV Rn , A 1 1 将累加器的内容载入寄存器
55. MOV Rn,direct 2 2 将直接地址的内容载入寄存器
56. MOV Rn,gdata 2 1 将常数载入寄存器
57. MOV direct,A 2 1 将累加器的内容存入直接地址
58. MOV direct,Rn 2 2 将寄存器的内容存入直接地址
59. MOV direct1, direct2 3 2 将直接地址 2 的内容存入直接地址 1
60. MOV direct,@Ri 2 2 将间接地址的内容存入直接地址
61. MOV direct,#data 3 2 将常数存入直接地址
62. MOV @Ri,A 1 1 将累加器的内容存入某间接地址
63. MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址
64. MOV @Ri,#data 2 1 将常数存入某间接地址
65. MOV DPTR,#data16 3 2 将 16 位的常数存入数据指针寄存器
66. MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR)) 累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器
67. MOVC A,@A+PC 1 2 (PC)←(PC)+1 ; (A) ←((A)+(PC)) 累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器
68. MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器 (8 位地址 )
69. MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器 (16 位地址 )
70. MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器 (8 位地址 )
71. MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器 (16 位地址 )
72. PUSH direct 2 2 将直接地址的内容压入堆栈区
73. POP direct 2 2 从堆栈弹出该直接地址的内容
74. XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换
75. XCH A,direct 2 1 将累加器的值与直接地址的内容互换
76. XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换
77. XCHD A,@Ri 1 1 将累加器的低 4 位与间接地址的低 4 位互换布尔代数运算
78. CLR C 1 1 清除进位 C 为 0
79. CLR bit 2 1 清除直接地址的某位为 0
80. SETB C 1 1 设定进位 C 为 1
81. SETB bit 2 1 设定直接地址的某位为 1
82. CPL C 1 1 将进位 C 的值反相
83. CPL bit 2 1 将直接地址的某位值反相
84. ANL C,bit 2 2 将进位 C 与直接地址的某位做 AND 的逻辑判断,结果存回进位 C
85. ANL C,/bit 2 2 将进位 C 与直接地址的某位的反相值做 AND 的逻辑判断,结果存回进位 C
86. ORL C,bit 2 2 将进位 C 与直接地址的某位做 OR 的逻辑判断,结果存回进位 C
87. ORL C,/bit 2 2 将进位 C 与直接地址的某位的反相值做 OR 的逻辑判断,结果存回进位 C
88. MOV C,bit 2 1 将直接地址的某位值存入进位 C
89. MOV bit,C 2 2 将进位 C 的值存入直接地址的某位
90. JC rel 2 2 若进位 C=1 则跳至 rel 的相关地址
91. JNC rel 2 2 若进位 C=0 则跳至 rel 的相关地址
92. JB bit,rel 3 2 若直接地址的某位为 1,则跳至 rel 的相关地址
93. JNB bit,rel 3 2 若直接地址的某位为 0,则跳至 rel 的相关地址
94. JBC bit,rel 3 2 若直接地址的某位为 1,则跳至 rel 的相关地址,并将该位值清除为 0程序跳跃
95. ACALL addr11 2 2 调用 2K 程序存储器范围内的子程序
96. LCALL addr16 3 2 调用 64K 程序存储器范围内的子程序
97. RET 1 2 从子程序返回
98. RETI 1 2 从中断子程序返回
99. AJMP addr11 2 2 绝对跳跃 (2K 内)
100 . LJMP addr16 3 2 长跳跃 (64K 内)
101 . SJMP rel 2 2 短跳跃 (2K 内)-128 ~ +127 字节
102 . JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址
103 . JZ rel 2 2 累加器的内容为 0,则跳至 rel 所指相关地址104 . JNZ rel 2 2累加器的内容不为0,则跳至 rel 所指相关地址105 . CJNE A,direct,rel32 将累加器的内容与直接地址的内容比较,不相等则跳至rel 所指的相关地址106 . CJNE A,#data,rel 32将累加器的内容与常数比较,若不相等则跳至rel 所指的相关地址107. CJNE @Rn,#data,rel3 2将寄存器的内容与常数比较,若不相等则跳至rel 所指的相关地址108 . CJNE@Ri,#data,rel3 2将间接地址的内容与常数比较,若不相等则跳至rel 所指的相关地址109 . DJNZ Rn,rel 2 2将寄存器的内容减1,不等于0 则跳至 rel 所指的相关地址110 . DJNZ direct,rel 32将直接地址的内容减1,不等于0 则跳至 rel 所指的相关地址111 . NOP 1 1无动作