指令类型 | 指令 | 主要功能 | 影响标志位 | 示例代码 |
数据传送类 | MOV | 数据传送 | 无 | MOV A,#25H |
数据传送类 | MOVC | 程序存储器数据传送 | 无 | MOVC A,@A+DPTR |
数据传送类 | MOVX | 外部RAM数据传送 | 无 | MOVX A,@DPTR |
数据传送类 | PUSH | 入栈 | 无 | PUSH ACC |
数据传送类 | POP | 出栈 | 无 | POP ACC |
数据传送类 | XCH | 交换 | 无 | XCH A,R0 |
数据传送类 | XCHD | 低半字节交换 | 无 | XCHD A,@R0 |
数据传送类 | SWAP | 累加器高低半字节交换 | 无 | SWAP A |
算术运算类 | ADD | 加法 | C,AC,OV | ADD A,#34H |
算术运算类 | ADDC | 带进位加法 | C,AC,OV | ADDC A,R0 |
算术运算类 | SUBB | 带借位减法 | C,AC,OV | SUBB A,#56H |
算术运算类 | INC | 加1 | 无 | INC A |
算术运算类 | DEC | 减1 | 无 | DEC R0 |
算术运算类 | MUL | 乘法 | C,OV | MUL AB |
算术运算类 | DIV | 除法 | C,OV | DIV AB |
逻辑运算类 | ANL | 与运算 | 无 | ANL A,#0FH |
逻辑运算类 | ORL | 或运算 | 无 | ORL A,R0 |
逻辑运算类 | XRL | 异或运算 | 无 | XRL A,#55H |
逻辑运算类 | CLR | 清零 | 根据位 | CLR A |
逻辑运算类 | CPL | 取反 | 根据位 | CPL A |
逻辑运算类 | RL | 循环左移 | 无 | RL A |
控制转移类 | AJMP | 绝对跳转 | 无 | AJMP LABEL |
控制转移类 | LJMP | 长跳转 | 无 | LJMP LABEL |
控制转移类 | SJMP | 短跳转 | 无 | SJMP LABEL |
控制转移类 | JZ | 为零跳转 | 无 | JZ LABEL |
控制转移类 | JNZ | 非零跳转 | 无 | JNZ LABEL |
控制转移类 | CALL | 调用子程序 | 无 | LCALL SUB1 |
布尔操作类 | SETB | 置位 | 根据位 | SETB C |
布尔操作类 | CLR | 清位 | 根据位 | CLR C |
布尔操作类 | JB | 位为1跳转 | 无 | JB P1.0,LABEL |
布尔操作类 | JNB | 位为0跳转 | 无 | JNB P1.0,LABEL |
标志位
指令类别 | 具体指令 | 影响的标志位 | 说明与备注 |
数据传送 | MOV, MOVX, MOVC, PUSH, POP, XCH, SWAP | 基本不影响 | 不改变CY, AC, OV。若A为操作数,P标志位会根据A的新值变化。 |
程序控制 | JMP, CALL, RET, NOP, DJNZ, JZ, JNC 等 | 不影响 | 它们本身不修改PSW,但条件跳转指令(如JNC)会“检查”标志位来决定是否跳转。 |
算术运算 | INC, DEC | 不影响 | 这是算术指令中的特例,为提高效率,硬件设计上不影响任何标志位。 |
逻辑与移位 | ANL, ORL, XRL, RL, RR, CPL A, CLR A | P (若操作数是A) | CY, AC, OV不受影响。若结果在累加器A中,仅P标志位会根据新值更新。 |
指令类别 | 具体指令 | 影响的标志位 | 说明与备注 |
算术运算 | ADD, ADDC, SUBB | CY, AC, OV, P | 标准的加减法,会全面影响状态标志。在SUBB中,CY作为借位标志。 |
ㅤ | MUL AB, DIV AB | OV, P (CY总是清0) | 复杂的数学运算。CY被固定清0,OV有特殊含义(乘积超范围或除数为0)。 |
ㅤ | DA A | CY, P | BCD码校正指令,其执行依赖于AC和CY,并可能最终置位CY。 |
逻辑与移位 | RLC A, RRC A | CY, P | 带进位循环移位,CY位参与了整个循环过程,其值会被改变。 |
布尔(位)操作 | SETB C, CLR C, CPL C, MOV C, bit, ANL C, bit 等 | CY | 这一类指令就是为了直接操作进位标志位 CY 而设计的。 |