1、C51单片机汇编语言指令集C51单片机汇编语言指令集51汇编语言指令集符号定义表符号含义RnR0R7寄存器n=07Direct直接地址,内部数据区的地址RAM(00H7FH)SFR(80HFFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0Ri间接地址Ri=R0或R1 8051/31RAM地址(00H7FH) 8052/32RAM地址(00HFFH)#data8位常数#data1616位常数Addr1616位的目标地址Addr1111位的目标地址Rel相关地址bit内部数据RAM(20H2FH),特殊功能寄存器的直接地址的位指令介绍指令字节周期动作说明算数运算指
2、令1.ADD A,Rn11将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct21将累加器与直接地址的内容相加,结果存回累加器3.ADD A,Ri11将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data21将累加器与常数相加,结果存回累加器5.ADDC A,Rn11将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct21将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,Ri11将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data21将累加器与常数及进位C相加,结果存回累加器9.SUB
3、B A,Rn11将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct21将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,Ri11将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,0data21将累加器的值减常数值减借位C,结果存回累加器13.INC A11将累加器的值加114.INC Rn11将寄存器的值加l15.INC direct21将直接地址的内容加116.INC Ri11将间接地址的内容加117.INC DPTR11数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时
4、,会使高字节(DPH)加1,不影响任何标志位18.DEC A11将累加器的值减119.DEC Rn11将寄存器的值减120.DEC direct21将直接地址的内容减121.DEC Ri11将间接地址的内容减122.MUL AB14将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为023.DIV AB14将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除
5、以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为024DA A11将累加器A作十进制调整,若(A) 3-09或(AC)=1,则(A) 3-0(A)3-0+6若(A) 7-49或 (C)=1,则(A) 7-4(A)7-4+6逻辑运算指令ANL A,Rn11将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器ANL A,direct21将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器ANL A,Ri11将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器ANL A,#data21将累加器的值与常数做AND的逻辑判断,结果存回累加
6、器ANL direct,A21将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址ANL direct,#data32将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址ORL A,Rn11将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器32ORL A,direct21将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器33ORL A,Ri11将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器34ORL A,#data21将累加器的值与常数做OR的逻辑判断,结果存回累加器35ORL direct,A21将直接地址的内容与累加器的值做OR的逻辑判
7、断,结果存回该直接地址36ORL direct,#data32将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址37XRL A,Rn11将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器38XRL A,direct21将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器39XRL A,Ri11将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器40XRL A,#data21将累加器的值与常数作XOR的逻辑判断,结果存回累加器XRL direct,A21将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址42XRL direct,#data32
8、将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址43CLR A11清除累加器的值为044CPL A11将累加器的值反相45RL A11将累加器的值左移一位46RLC A11将累加器含进位C左移一位47RR A11将累加器的值右移一位48RRC A11将累加器含进位C右移一位49SWAP A11将累加器的高4位与低4位的内容交换。(A)3-0(A)7-4数据转移指令50MOV A,Rn11将寄存器的内容载入累加器51MOV A,direct21将直接地址的内容载入累加器52MOV A,Ri11将间接地址的内容载入累加器53MOV A,#data21将常数载入累加器54MOV Rn
9、,A11将累加器的内容载入寄存器55MOV Rn,direct22将直接地址的内容载入寄存器56MOV Rn,gdata21将常数载入寄存器57MOV direct,A21将累加器的内容存入直接地址58MOV direct,Rn22将寄存器的内容存入直接地址59MOV direct1, direct232将直接地址2的内容存入直接地址160MOV direct,Ri22将间接地址的内容存入直接地址61MOV direct,#data32将常数存入直接地址62MOV Ri,A11将累加器的内容存入某间接地址63MOV Ri,direct22将直接地址的内容存入某间接地址64MOV Ri,#dat
10、a21将常数存入某间接地址65MOV DPTR,#data1632将16位的常数存入数据指针寄存器66MOVC A,A+DPTR12(A) (A)+(DPTR)累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器67MOVC A,A+PC12(PC)(PC)+1;(A)(A)+(PC)累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器68MOVX A,Ri12将间接地址所指定外部存储器的内容读入累加器(8位地址)69MOVX A,DPTR12将数据指针所指定外部存储器的内容读入累加器(16位地址)70MOVX Ri,A12将累加器的内容写入间接地址所指定的
11、外部存储器(8位地址)71MOVX DPTR,A12将累加器的内容写入数据指针所指定的外部存储器(16位地址)72PUSH direct22将直接地址的内容压入堆栈区73POP direct22从堆栈弹出该直接地址的内容74XCH A,Rn11将累加器的内容与寄存器的内容互换75XCH A,direct21将累加器的值与直接地址的内容互换76XCH A,Ri11将累加器的值与间接地址的内容互换77XCHD A,Ri11将累加器的低4位与间接地址的低4位互换布尔代数运算78CLR C11清除进位C为079CLR bit21清除直接地址的某位为080SETB C11设定进位C为181SETB bi
12、t21设定直接地址的某位为182CPL C11将进位C的值反相83CPL bit21将直接地址的某位值反相84ANL C,bit22将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C85ANL C,/bit22将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C86ORL C,bit22将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C87ORL C,/bit22将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C88MOV C,bit21将直接地址的某位值存入进位C89MOV bit,C22将进位C的值存入直接地址的某位90JC rel22若进位C=1
13、则跳至rel的相关地址91JNC rel22若进位C=0则跳至rel的相关地址92JB bit,rel32若直接地址的某位为1,则跳至rel的相关地址93JNB bit,rel32若直接地址的某位为0,则跳至rel的相关地址94JBC bit,rel32若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0程序跳跃95ACALL addr1122调用2K程序存储器范围内的子程序96LCALL addr1632调用64K程序存储器范围内的子程序97RET12从子程序返回98RETI12从中断子程序返回99AJMP addr1122绝对跳跃(2K内)100LJMP addr1632长跳跃
14、(64K内)101SJMP rel22短跳跃(2K内)-128+127字节102JMP A+DPTR12跳至累加器的内容加数据指针所指的相关地址103JZ rel22累加器的内容为0,则跳至rel所指相关地址104JNZ rel22累加器的内容不为0,则跳至rel所指相关地址105CJNE A,direct,rel32将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址106CJNE A,#data,rel32将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址CJNE Rn, #data,rel32将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址CJNE
15、Ri, #data,rel32将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址109DJNZ Rn,rel22将寄存器的内容减1,不等于0则跳至rel所指的相关地址110DJNZ direct,rel32将直接地址的内容减1,不等于0则跳至rel所指的相关地址111NOP11无动作符号 地址 功能介绍 BF0HB寄存器 ACCE0H累加器 PSWD0H程序状态字 IPB8H中断优先级控制寄存器 P3B0HP3口锁存器 IEA8H中断允许控制寄存器 P2A0HP2口锁存器 SBUF99H串行口锁存器 SCON98H串行口控制寄存器 P190HP1口锁存器 TH18DH定时器/计数器
16、1(高8位) TH08CH定时器/计数器1(低8位) TL18BH定时器/计数器0(高8位) TL08AH定时器/计数器0(低8位) TMOD89A定时器/计数器方式控制寄存器 TCON88H定时器/计数器控制寄存器 DPH83H数据地址指针(高8位) DPL82H数据地址指针(低8位) SP81H堆栈指针 P080HP0口锁存器 PCON87H电源控制寄存器 P3.0RXD串行口输入端P3.1TXD串行口输出端P3.2INT0外部中断0请求输入端,低电平有效P3.3INT1外部中断1请求输入端,低电平有效P3.4T0定时器/计数器0计数脉冲输入端P3.5T1定时器/计数器1计数脉冲输入端P3
17、.6WR外部数据存储器写选通信号输出端,低电平有效P3.7RD外部数据存储器读选通信号输出端,低电平有效 CY(PSW.7)进位标志位。 AC(PSW.6)辅助进位(或称半进位)标志。 F0(PSW.5)由用户定义的标志位。 RS1(PSW.4)、 RS0(PSW.3)工作寄存器组选择位。 OV(PSW.2)溢出标志位。 由硬件置位或清零。 PSW.1未定义位。 P(PSW.0)奇偶标志位。位寻址区 20H2FH单元是位寻址区。这16个单元(共计168=128位)的每一位都赋予了一个位地址,位地址范围为00H7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行位处理。通常可以把各种程序状态标志、位控制变量存于位寻址区内。