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

本文详细解析了单片机汇编语言的各种指令类型,包括立即寻址、直接寻址、寄存器寻址等传送指令,以及算术运算、逻辑运算、控制转移等指令的使用方法和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

 

移位补充说明:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值