MCS-51
1、数据传送类指令(共29条)
助记符 功能说明 字节数 振荡周期
MOV A,Rn 寄存器内容送入累加器 1 12
MOV A,direct 直接地址单元中的数据送入累加器 2 12
MOV A,@Ri 间接RAM中的数据送入累加器 1 12
MOV A,#data8 8位立即数送入累加器 2 12
MOV Rn,A 累加器内容送入寄存器 1 12
MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24
MOV Rn,#data8 8位立即数送入寄存器 2 12
MOV direct,A 累加器内容送入直接地址单元 2 12
MOV direct,Rn 寄存器内容送入直接地址单元 2 24
MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24
MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24
MOV direct,#data8 8位立即数送入直接地址单元 3 24
MOV @Ri,A 累加器内容送入间接RAM单元 1 12
MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24
MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12
MOV DPTR,#data16 16位立即数地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24
MOVC A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24
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
POP DIRECT 堆栈中的数据弹出到直接地址单元 2 24
XCH A,Rn 寄存器与累加器交换 1 12
XCH A,direct 直接地址单元与累加器交换 2 12
XCH A,@Ri 间接RAM与累加器交换 1 12
XCHD A,@Ri 间接RAM与累加器进行低半字节交换 1 12
2、算术操作类指令(共24条)
助记符 功能说明 字节数 振荡周期
ADD A,Rn 寄存器内容加到累加器 1 12
ADD A,direct 直接地址单元加到累加器 2 12
ADD A,@Ri 间接RAM内容加到累加器 1 12
ADD A,#data8 8位立即数加到累加器 2 12
ADDC A,Rn 寄存器内容带进位加到累加器 1 12
ADDC A,dirct 直接地址单元带进位加到累加器 2 12
ADDC A,@Ri 间接RAM内容带进位加到累加器 1 12
ADDC A,#data8 8位立即数带进位加到累加器 2 12
SUBB A,Rn 累加器带借位减寄存器内容 1 12
SUBB A,dirct 累加器带借位减直接地址单元 2 12
SUBB A,@Ri 累加器带借位减间接RAM内容 1 12
SUBB A,#data8 累加器带借位减8位立即数 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址单元内容加1 2 12
INC @Ri 间接RAM内容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器减1 1 12
DEC Rn 寄存器减1 1 12
DEC direct 直接地址单元内容减1 2 12
DEC @Ri 间接RAM内容减1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器进行十进制转换 1 12
3、逻辑操作类指令(共24条)
助记符 功能说明 字节数 振荡周期
ANL A,Rn 累加器与寄存器相“与” 1 12
ANL A,direct 累加器与直接地址单元相“与” 2 12
ANL A,@Ri 累加器与间接RAM内容相“与” 1 12
ANL A,#data8 累加器与8位立即数相“与” 2 12
ANL direct,A 直接地址单元与累加器相“与” 2 12
ANL direct,#data8 直接地址单元与8位立即数相“与” 3 24
ORL A,Rn 累加器与寄存器相“或” 1 12
ORL A,direct 累加器与直接地址单元相“或” 2 12
ORL A,@Ri 累加器与间接RAM内容相“或” 1 12
ORL A,#data8 累加器与8位立即数相“或” 2 12
ORL direct,A 直接地址单元与累加器相“或” 2 12
ORL direct,#data8 直接地址单元与8位立即数相“或” 3 24
XRL A,Rn 累加器与寄存器相“异或” 1 12
XRL A,direct 累加器与直接地址单元相“异或” 2 12
XRL A,@Ri 累加器与间接RAM内容相“异或” 1 12
XRL A,#data8 累加器与8位立即数相“异或” 2 12
XRL direct,A 直接地址单元与累加器相“异或” 2 12
XRL direct,#data8 直接地址单元与8位立即数相“异或” 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循环左移 1 12
RLC A 累加器带进位循环左移 1 12
RR A 累加器循环右移 1 12
RRC A 累加器带进位循环右移 1 12
SWAP A 累加器半字节交换 1 12
4、控制转移类指令(共17条)
助记符 功能说明 字节数 振荡周期
ACALL addr11 绝对短调用子程序 2 24
LACLL addr16 长调用子程序 3 24
RET 子程序返回 1 24
RETI 中断返回 1 24
AJMP addr11 绝对短转移 2 24
LJMP addr16 长转移 3 24
SJMP rel 相对转移 2 24
JMP @A+DPTR 相对于DPTR的间接转移 1 24
JZ rel 累加器为零转移 2 24
JNZ rel 累加器非零转移 2 24
CJNE A,direct,rel 累加器与直接地址单元比较,不等则转移 3 24
CJNE A,#data8,rel 累加器与8位立即数比较,不等则转移 3 24
CJNE Rn,#data8,rel 寄存器与8位立即数比较,不等则转移(相等则执行本指令的下一条指令) 3 24
DJNZ Rn,rel 寄存器减1,非零转移 3 24
DJNZ direct,rel 直接地址单元减1,非零转移 3 24
NOP 空操作 1 12
5、布尔变量操作类指令(共17条)
助记符 功能说明 字节数 振荡周期
CLR C 清进位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置进位位 1 12
SETB bit 置直接地址位 2 12
CPL C 进位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 进位位和直接地址位相“与” 2 24
ANL C,bit 进位位和直接地址位的反码相“与” 2 24
ORL C,bit 进位位和直接地址位相“或” 2 24
ORL C,bit 进位位和直接地址位的反码相“或” 2 24
MOV C,bit 直接地址位送入进位位 2 12
MOV bit,C 进位位送入直接地址位 2 24
JC rel 进位位为1则转移(CY=O不转移,=1转移) 2 24
JNC rel 进位位为0则转移(和上面相反) 2 24
JB bit,rel 直接地址位为1则转移 3 24
JNB bit,rel 直接地址位为0则转移 3 24
JBC bit,rel 直接地址位为1则转移,该位清零 3 24
ARM
1、ARM储存器访问指令
助记符 功能说明
LDR R0,[R1] 将存储器地址为R1的字数据读入寄存器R0。
LDRB R0,[R1] 将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。
LDRH R0,[R1] 将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。
STR R0,[R1],#8 将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8] 将R0中的字数据写入以R1+8为地址的存储器中。
STRB R0,[R1] 将寄存器R0中的字节数据写入以R1为地址的存储器中。
STRH R0,[R1] 将寄存器R0中的半字数据写入以R1为地址的存储器中。
STMFD R13!,{R0,R4-R12,LR} 将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈。
LDMFD R13!,{R0,R4-R12,PC} 将堆栈内容恢复到寄存器(R0,R4到R12,LR)。
SWP R0,R1,[R2] 将R2所指向的存储器中的字数据传送到R0,同时将R1中的字数据传送到R2所指向的存储单元。
SWPB R0,R1,[R2] 将R2所指向的存储器中的字节数据传送到R0,R0的高24位清零,同时将R1中的低8位数据传送到R2所指向的存储单元。
PLD
2、ARM数据处理指令
助记符 功能说明
LSL(ASL) 操作数 按操作数指定的数量向左移位,低位用零来填充。
LSR 操作数 按操作数指定的数量向右移位,左端用零来填充。
ASR 操作数 按操作数指定的数量向右移位,左端用第31位的值来填充。
ROR 操作数 按操作数指定的数量向右循环移位,左端用右端移出的位填充。
RRX 操作数 按操作数指定的数量向右循环移位,左端用进位标志位C填充。
ADD R0,R1,R2 R0 = R1 + R2
SUB R0,R1,R2 R0 = R1 - R2
RSB
ADC R1,R2,R3 R1 = R2 + R3,带进位
SBC
RSC R0,R1,R2 R0 = R2 - R1 - !C
AND R0,R0,#3 该指令保持R0的0、1位,其余位清零。
ORR R0,R0,#3 该指令设置R0的0、1位,其余位保持不变。
EOR R0,R0,#3 该指令反转R0的0、1位,其余位保持不变。
BIC R0,R0,#%1011 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。
MOV R1,R0 将寄存器R0的值传送到寄存器R1
MVN R0,#0 将立即数0取反传送到寄存器R0中,完成后R0=-1
CMP R1,R0 将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
CMN R1,R0 将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位
TST R1,#0xffe 将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位
TEQ R1,R2 将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位
CLZ
MUL R0,R1,R2 R0 =R1 × R2
MLA R0,R1,R2,R3 R0 = R1 × R2 + R3
SMULL R0,R1,R2,R3 R0 = (R2 × R3)的低32位 R1 = (R2 × R3)的高32位
SMLAL R0,R1,R2,R3 R0= (R2 × R3)的低32位+R0 R1 = (R2 × R3)的高32位+R1
UMULL R0,R1,R2,R3 R0=(R2 × R3)的低32位 R1 = (R2 × R3)的高32位
UMLAL R0,R1,R2,R3 R0= (R2 × R3)的低32位+R0 R1 = (R2 × R3)的高32位+R1
3、ARM转移指令
助记符 功能说明
B Label 程序无条件跳转到标号Label处执行
BL Label 当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中
BX R7 跳转到R7所指定的目标地址
BLX 目标地址
4、ARM协处理器指令
助记符 功能说明
CDP P3,2,C12,C10,C3,4 该指令完成协处理器P3的初始化
LDC P3,C4,[R0] 将ARM处理器的寄存器R0所指向的存储器中的字数据传送到协处理器P3的
寄存器C4中。
STC P3,C4,[R0] 将协处理器P3的寄存器C4中的字数据传送到ARM处理器的寄存器R0所指向
的存储器中。
MCR P3,3,R0,C4,C5,6 该指令将ARM处理器寄存器R0中的数据传送到协处理器P3的寄存器C4和C5中。
MCRR
MRC P3,3,R0,C4,C5,6 该指令将协处理器P3的寄存器中的数据传送到ARM处理器寄存器中。
MRRC
LDC
STC
5、杂项ARM指令
助记符 功能说明
SWI 0x02 该指令调用操作系统编号位02的系统例程。
MRS R0,CPSR 传送CPSR的内容到R0
MSR CPSR,R0 传送R0的内容到CPSR
BKPT 16位立即数 BKPT指令产生软件断点中断,可用于程序的调试。
6、ARM伪指令
助记符 功能说明
ADR
ADRL
LDR
NOP