MCS-51(51单片机)常用指令功能表(汇编)

考研复试单片机汇编用  我是借鉴别人的表格,然后按自己的理解补充的

立即寻址型传送指令 MOV   A,#data MOV A,#55; A = 55  
MOV   Rn,#data MOV R7, #46; R7 = 46  n=0~7  
MOV   @Ri,#data MOV @R0, #78; 如果R0=15H,那么就把78放在15H地址的内容上,n=0,1  
MOV   direct,#data MOV 75H,#78; 78放到75H地址的内容上  
直接寻址型传送指令 MOV   A,direct MOV A,55H ;55H单元地址里面的值放到A  
MOV   direct,A MOV 55H,A ;A里面的值放到55H地址所在的内容上  
MOV   Rn,direct MOV R0,12H; 12H地址里面的内容,赋值给R0  
MOV   @Rn,direct MOV @R0,12H; 12H地址里面的内容,放到R0所在地址内容上  
MOV   direct2,direct1 MOV 01H,02H; 02H地址的内容,赋值给01H地址的内容上  
 寄存器寻址型传送指令 MOV   A,Rn A = Rn  
MOV   Rn,A Rn = A  
MOV   direct,Rn MOV 55H,R5; 55H地址里的内容=R5  
寄存器间址型传送指令 MOV   A,@Ri MOV A,@R0; R0地址的内容值 赋值 A  
MOV   @Ri,A A的值 赋值给 Ri现在地址的内容值   
MOV   direct,@Ri MOV 34H,@R0;将 现在R0的地址的内容 赋值 给 34H地址的内容上  
16位数传送指令 MOV   DPTR,#data16 MOV DPTR,#1123;DPRT = 1123 唯一一条16位数传送指令  
外部ROM字节传送指令 MOVC   A,@A+DPTR A=(A+DPTR)  查表数据送入A(DPTR)           外部ROM  
MOVC   A,@A+PC PC=PC+1,A=(A+PC)  查表数据送入APC 外部ROM  
外部RAM字节传送指令 MOVX   A,@Ri 外部RAM Ri地址上的内容 送到A i=0,1  
MOVX   @Ri,A A内容 赋值到 外部RAM Ri地址的内容上,i=0,1  
MOVX   A,@DPTR 将 外部RAM16位地址(DPTR)的内容 赋值给 A  
MOVX   @DPTR,A A的值 赋值给 外部16RAM(DPTR)地址的内容上  
堆栈操作指令 PUSH   direct SP=SP+1,(SP)=(direct)  将地址入栈(保护现场)  
POP   direct direct=(SP),SP=SP-1      将地址出栈(恢复现场)  
数据交换指令 XCH   A,Rn  Rn 互换数据  
XCH   A,direct A=(direct),(direct)=A  如果direct=30H,就是 30H地址上的内容 互换  
XCH   A,@Ri A=(Ri),(Ri)=A       A  Ri地址上面的内容 互换  
XCHD   A,@Ri A(Ri)4位相互交换  
不带Cy加法指令 ADD   A,Rn A = A+Rn ,n=0~7 减法是 SUB
ADD   A,direct A = A+ direct地址里面的内容 减法是 SUB
ADD   A,@Ri A = A + Ri地址里面的内容,i=0,1 减法是 SUB
ADD   A,#data A = A + data 这个数 减法是 SUB
Cy加法指令 ADDC   A,Rn A=A+Rn+Cy Cy是执行指令之前的,而不是指令执行中生成的Cy
ADDC   A,direct A=A+direct地址上的内容 + Cy
ADDC   A,@Ri A = A+ Ri地址上的内容 +Cy 
ADDC   A,#data A = A + data这个数 +Cy
1指令 INC   A A++ 只有第一条指令对奇偶标志位P产生影响,其余3条不会对任何标志位产生影响
INC   Rn Rn++
INC   direct direct地址上的内容++
INC   @Ri Ri地址上的内容++
INC    DPTR DPTR=DPTR+1
带Cy减法指令 SUBB   A,Rn A=A-Rn-Cy  
SUBB   A,direct A=A-direct地址上的内容 - Cy  
SUBB   A,@Ri A = A - Ri地址上的内容 - Cy   
SUBB   A,#data A = A - data这个数 -Cy  
1指令 DEC   A A--  
DEC   Rn Rn --  
DEC   direct direct地址上的内容--  
DEC   @Ri Ri地址上的内容--  
十进制调整指令 DA   A AC=1/低四位>9,A=A+06H;Cy=1/高四位>9,A=A+60H  
乘除指令 MUL   AB A*B=BA,形成标志位(OV溢出) B是高8位,A是低8  
DIV   AB A/B=A……B,形成标志位(OV溢出) A是商,B是余数 例如5/2=21 A=2,B=1  
逻辑与指令 ANL   A,Rn A = A & Rn (注意是按位与&,不是逻辑与&&)  
ANL   A,direct A = A & direct地址上的内容  
ANL   A,@Ri A= A & Ri地址上的内容  
ANL   A,#data A = A & data这个数  
ANL   direct,A direct地址上的内容 = direct地址上的内容 & A  
ANL   direct,#data direct地址上的内容 = direct地址上的内容 & data这个数  
逻辑或指令 ORL   A,Rn A = A | Rn  (按位或| , 而不是逻辑或||)  
ORL   A,direct A = A | direct地址上的内容  
ORL   A,@Ri A = A | Ri地址上的内容  
ORL   A,#data A = A | data这个数  
ORL   direct,A direct地址上的内容 = direct地址上的内容 | A  
ORL   direct,#data direct地址上的内容 = direct地址上的内容 | data这个数  
逻辑异或指令 XRL   A,Rn A = A ^ Rn(^C指的是“异或”,在汇编可能是指的“与” )  
XRL   A,direct A ^= direct地址上的内容  
XRL   A,@Ri A ^=Ri地址上的内容  
XRL   A,#data A ^= data这个数  
XRL   direct,A direct地址内容 ^= A  
XRL   direct,#data direct地址上内容 ^= data这个数  
取反和清理指令 CPL    A A = ~A 取反  
CLR    A A=0 清零  
移位指令 RL   A A左移一位(不是<<),高位移出到低位  
RR   A 右移,不是>>,低位移出到高位  
RLC   A Cy在最高位,向左移一位  
RRC   A Cy在最高位,向右移一位  
SWAP   A 高四位和低四位交换位置  
控制转移指令 LJMP   addr16 PC=addr16(长跳转,能跳64K内的地址)  
AJMP   addr11 PC=PC+2,PC10~PC0=addr11(2K内的地址)  
SJMP   rel PC=PC+2,PC=PC+rel PC+2,再PC=PC+rel(跳256字节地址)  
JMP   @A+DPTR PC=A+DPTR 通常跳到自己定义的数组去的  
比较条件转移指令 CJNE   A,#data,rel A=data,PC=PC+3;A!=data,PC=PC+3+rel;形成Cy标志位 A>=data,Cy=0;A<data,Cy=1
CJNE   A,direct,rel C比较,跳转,NE不相等
CJNE   Rn,#data,rel Rn   data这个数 比较,不相等就跳到rel上去,相等就顺序执行下一条
CJNE   @Ri,#data,rel  
1转移指令 DJNZ   Rn,rel  Rn-1!=0,PC=PC+2+rel;Rn-1=0,PC=PC+2; D1J跳转,NZ不等于0  
DJNZ   direct,rel direct地址上的内容 - 1 )不等于 0 就跳到 rel上去, 相等就顺序执行  
短调用指令 ACALL   addr11 PC=PC+2,SP=SP+1,(SP)=PC7~PC0,SP=SP+1,SP=PC15~PC8,PC10~0=addr11  
长调用指令 LCALL   addr16 PC=PC+3,SP=SP+1,(SP)=PC7~PC0,SP=SP+1,SP=PC15~PC8,PC=addr16 调用地址,如LCALL DELAY
返回指令 RET  PC15~PC8=(SP),SP=SP-1,PC7~PC0=(SP),SP=SP-1 程序返回
RETI PC15~PC8=(SP),SP=SP-1,PC7~PC0=(SP),SP=SP-1 中断返回,相当于执行完程序,返回中断前的地址
位传送指令 MOV   C,bit C=(bit) C应该是Cy
MOV   bit,C bit = C bit位地址吧 20~2Fh单元
位清零和位置位指令 CLR   C Cy =0  
CLR   bit 位地址bit = 0  
SETB   C Cy = 1  
SETB   bit bit = 1 位地址
位运算指令(布尔操作) ANL   C,bit 与&  
ANL   C,/bit /bit指的是bit先取反,再进行与&  
ORL   C,bit 或|  
ORL   C,/bit /bit指的是bit先取反,再进行或|  
CPL    C Cy = ~Cy  
CPL    bit bit = ~bit  
位跳转指令 JC   rel Cy=1,PC=PC+2+rel;                      Cy=0,PC=PC+2 Cy=1就跳
JNC   rel Cy=0,PC=PC+2+rel;                      Cy=1,PC=PC+2 Cy=0就跳
JB   bit,rel (bit)=1,PC=PC+3+rel;                   (bit)=0,PC=PC+3 bit =1就跳
JNB   bit,rel (bit)=0,PC=PC+3+rel;                   (bit)=1,PC=PC+3 bit =0就跳
JBC   bit,rel (bit)=1,PC=PC+3+rel,bit=0;           (bit)=0,PC=PC+3 bit =1就跳,并将bit0
JZ rel A=0,则知PC=PC+2+rel;                 PC=PC+2 A=0就跳
  JNZ rel A != 0 就跳  

移位补充说明:

猜你喜欢

转载自blog.csdn.net/jwdeng1995/article/details/106174822