51单片机汇编语言指令集表
51单片机汇编语言指令集

95.ACALL addr11 96.LCALL addr16 97.RET 98.RETI 99.AJMP addr11 100.LJMP addr16 101.SJMP rel 102.JMP @A+DPTR 103.JZ rel 104.JNZ rel 105.CJNE A,direct,rel 106.CJNE A,#data,rel 107.CJNE @Rn,#data,rel 108.CJNE @Ri,#data,rel 109.DJNZ Rn,rel 111.NOP
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址
30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址 31.ORL A,Rn 32.ORL A,direct 33.ORL A,@Ri 34.ORL A,#data 35.ORL direct,A 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址
指令 算数运算指令 1.ADD A,Rn 2.ADD A,direct 3.ADD A,@Ri 4.ADD A,#data 5.ADDC A,Rn 6.ADDC A,direct 7.ADDC A,@Ri 8.ADDC A,#data 9.SUBB A,Rn 10.SUBB A,direct 11.SUBB A,@Ri 12.SUBB A,0data 13.INC A 14.INC Rn
51单片机汇编指令手册

B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7
A, R0 A, R1 A, R2 A, R3 A, R4 A, R5 A, R6 A, R7 @DPTR, A addr11 @R0, A @R1, A A direct, A @R0, A @R1, A R0, A R1, A R2, A R3, A R4, A R5, A R6, A R7, A
2 2 1 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 3 1 1 2 2 2 2 2 2 2 2 1 2 1 1 1 2 1 1
ACALL CPL CPL CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE PUSH AJMP CLR CLR SWAP XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH POP ACALL SETB SETB DA DJNZ XCHD XCHD DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ MOVX AJMP MOVX MOVX CLR MOV MOV MOV
A, R0 A, R1 A, R2 A, R3 A, R4 A, R5 A, R6 A, R7 offset addr11 C, bit @A+DPTR A, #immed direct, #immed @R0, #immed @R1, #immed R0, #immed R1, #immed R2, #immed R3, #immed R4, #immed R5, #immed R6, #immed R7, #immed
51单片机汇编指令详解

51单片机汇编指令详解1、XCH A,Rn指令名称:寄存器寻址字节交换指令指令代码:C8H~CFH指令功能:寄存器寻址字节操作内容:(A)交换(Rn);n=0~7字节数: 1机器周期:12、XCH A,direct指令名称:直接寻址字节交换指令指令代码:C5H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct)字节数: 2机器周期:13、XCH A,@Ri指令名称:间接寻址字节交换指令指令代码:C6H~C7H指令功能:累加器内容与内部RAM低128单元内容交换操作内容:(A)交换((Ri)); i=0,1字节数: 1机器周期:14、XCHD A,@Ri指令名称:半字节交换指令指令代码:D6H~D7H指令功能:累加器内容低4位与内部RAM低128单元低4位交换操作内容:(A)3~0交换((Ri))3~0;i=0,1字节数: 1机器周期:15、XRL A,Rn指令名称;逻辑异或操作指令指令代码:68H~6FH指令功能:累加器内容与寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(Rn); n=0~7字节数: 1机器周期:16、XRL A,direct指令名称:逻辑异或操作指令指令代码:65H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct)字节数: 2机器周期:17、XRL A,@Ri指令名称:逻辑异或指令指令代码:66H~67H指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作操作内容:A<-(A)异或((Ri)); i=0,1字节数: 1机器周期:18、XRL A,#data指令名称:逻辑异或指令指令代码:64H指令功能:累加器内容与立即数进行逻辑异或操作操作内容:A1?/FONT>(A)异或data字节数: 2机器周期:19、XRL direct,A指令名称:逻辑异或操作指令指令代码:62H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:direct一(direct)异或(A)字节数: 2机器周期:110、XRL direct,#data指令名称:逻辑异或操作指令指令代码:63H指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑异或操作操作内容:direct<-(direct)异或data字节数: 3机器周期:2以R开头的指令有6条,分别为:RETRETIRL ARLC ARR ARRC A1、RET指令名称:子程序返回指令指令代码:22H指令功能:子程序返回操作内容:PC15~8<-((SP))SP<-(SP)-1PC7~0<-((SP))SP<-(SP)-1字节数: 1机器周期:22、RETI指令名称:中断返回指令指令代码:32H指令功能:中断服务程序返回操作内容’:PC15?/FONT>8<-((SP))SP<-(SP)-lPC7~0<-((SP))SP<-(SP)-1字节数: 1机器周期:23、RL A指令名称:循环左移指令指令代码:23H指令功能:累加器内容循环左移一位操作内容:An+1<-(An); n=0~6A0<-(A7)字节数: 1机器周期:14、RLC A指令名称:带进位循环左移指令指令代码:33H指令功能:累加器内容连同进位标志位循环左移一位操作内容:An-1<-(An); n=0~6A0<-(C)C<-(A7)字节数: 1机器周期:15、RR A指令名称:循环右移指令指令代码:03H指令功能:累加器内容循环右移一位操作内容:An<-(An+1);n=0~6A7<-(A0)字节数: 1机器周期:16、RRC A指令名称:带进位循环右移指令指令代码:13H指令功能:累加器内容连同进位标志位循环右移一位操作内容:An<-(An+1);n=0~6A7<-(C)C<-(A0)字节数: 1机器周期:11、SETB c指令名称:进位标志置位指令指令代码:D.H指令功能:进位标志位置位操作内容:C<-1字节数: 1机器周期:12、SETB bit指令名称:直接寻址位置位指令指令代码:D2H指令功能:内部RAM可寻址位或专用寄存器指定位置位操作内容:bit<-1字节数: 2机器周期:13、SJMP rel指令名称:短转移指令指令代码:80H指令功能:按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;操作内容:PC<-(PC)+2PC<-(PC)+rel字节数: 2机器周期:2使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC一126)一(PC+129)。
(完整版)51单片机汇编指令(全)

指令中常用符号说明Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址#data表示8位常数(立即数)#data16表示16位常数Add16表示16位地址Addr11表示11位地址Rel8位代符号的地址偏移量Bit表示位地址@间接寻址寄存器或基址寄存器的前缀( )表示括号中单元的内容(( ))表示间接寻址的内容指令系统数据传送指令(8个助记符)助记符中英文注释MOV Move 移动MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器AMOV A , Direct;(direct)→A,直接地址的内容送AMOV A ,@ Ri;(Ri)→A,RI间址的内容送AMOV A , #data;data→A,立即数送AMOV Rn , A;A→Rn,累加器A的内容送寄存器RnMOV Rn ,direct;(direct)→Rn,直接地址中的内容送RnMOV Rn , #data;data→Rn,立即数送RnMOV direct , A;A→(direct),累加器A中的内容送直接地址中MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址MOV direct , #data;8位立即数送到直接地址中MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中MOV @Ri , #data; data→@Ri ,8位立即数送到间址中MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令)(MOV类指令共16条)MOVC Move Cod 查表指令MOVC A , @A+PC;PC+1→PC,(A+PC)→AMOVC A , @A+DPTR;(A+DPTR) →A(MOVC类指令共两条)MOVX Move External 与外部数据寄存区传送数据MOVX A , @DPTR;(DPTR)→A,DPTR间址单元内容送AMOVX @DPTR , A;A→(DPTR),A中内容送入DPTR间址单元MOVX A , @Ri;(Ri)→A,Ri间址单元内容送AMOVX @Ri , A;A→(Ri),A中内容送Ri间址单元(MOVX类指令4条)XCH Exchange 交换指令XCH A , Rn;Rn←→A , Rn的内容与A的内容交换XCH A , Direct; Direct ←→A ,直接地址的内容与A的内容交换XCH A , @Ri;(Ri)←→A ,间址的内容与A的内容交换XCHD Exchange Decimal十进制交换XCHD A , @Ri;(Ri.3~Ri.0) ←→A.3~A.0,间址内容低四位与A中内容低四位交换SWAP Swap 交换SWAP A;A.3~A.0←→ A.7~A.4 , A中低四位与高四位内容交换PUSH Push 入栈PUSH direct;SP+1→SP , (direct)→(SP);直接地址内容压入堆栈顶POP Pop 出栈POP direct;(SP)→(direct) , SP-1→SP;堆栈内容弹出到直接地址●算术运算类指令(7个助记符)ADD Add 加法运算ADD A , Rn;A + Rn→A , A与Rn的内容相加,结果送到A中ADD A , direct;(direct)+A→A,A与直接地址的内容相加,结果送到A中ADD A , @Ri;((Ri))+A→A, A与间址中的内容相加,结果送到A中ADD A , #data;data+A→A,A与立即数相加,和送入AADDC ADD with Carry 带进位加法ADDC A , Rn;A + Rn+CY→A , A与Rn的内容、进位状态相加,结果送到A中ADDC A , direct;(direct)+A+CY→A,A与直接地址的内容、进位状态相加,结果送到A中ADDC A , @Ri;((Ri))+A+CY→A, A与间址中的内容、进位状态相加,结果送到A中ADDC A , #data;data+A+CY→A,A与立即数、进位状态相加,和送入ASUBB Subbtract with Borrow 带进位减法SUBB A , Rn;A-Rn-CY→A,A减寄存器Rn的内容及进位标志,结果送ASUBB A , direct; A-(direct)-CY→A,A直接地址的内容及进位标志,结果送ASUBB A , @Ri; A-((Ri))-CY→A,A间址的内容及进位标志,结果送ASUBB A , #data; A-data-CY→A,A立即数及进位标志,结果送AMUL Multiply 乘法指令MUL AB;A x B→B和A,结果16位,高8位存入B,低8位存入A;若结果大于FFH,则将溢出标志OV置1DIV Divide 除法指令DIV AB;A÷B 商→A,余数→B;若除数为0,结果不确定,则将溢出标志OV置1INC Increment 加1指令INC A;A+1→A,A加1,结果放在AINC Rn; Rn +1→ Rn, Rn加1,结果放在RnINC direct; (direct)+1→ direct,直接地址的内容加1,结果放在该地址中INC @Ri;((Ri))+1→( Ri),间址中的内容加1,结果放在该间址中INC DPTR;(DPTR)+1→DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中DEC Decrement 减1指令INC A;A-1→A,A减1,结果放在AINC Rn; Rn -1→ Rn, Rn减1,结果放在RnINC direct; (direct)-1→ direct,直接地址的内容减1,结果放在该地址中INC @Ri;((Ri))-1→( Ri),间址中的内容减1,结果放在该间址中DA Decimal Adjust 十进制加法调整指令DA A;在加法指令后,把A中二进制码自动调整为BCD码;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法●逻辑运算指令(9个助记符)ANL Logical And 逻辑与运算ANL A , Rn; (A)与(Rn)→A, A的内容与Rn中的内容相与,结果放在A中ANL A , direct; (A)与(direct)→A, A的内容与直接地址中的内容相与,结果放在A中ANL A , @Ri; (A)与((Ri))→A, A的内容与间址的内容相与,结果放在A中ANL A , #data; (A)与(data)→A, A的内容与立即数相与,结果放在A中ANL direct , A; (direct)与(A)→direct, 直接地址中的内容相与A的内容相与,结果放在直接地址中ANL direct , #data;(direct)与#data→direct, 直接地址中的内容相与立即数相与,结果放在直接地址中ORL Logical OR 逻辑或运算ORL A , Rn; (A) 或(Rn)→A, A的内容与Rn中的内容相或,结果放在A中ORL A , direct; (A) 或(direct)→A, A的内容与直接地址中的内容相或,结果放在A中ORL A , @Ri; (A) 或((Ri))→A, A的内容与间址的内容相或,结果放在A中ORL A , #data; (A) 或(data)→A, A的内容与立即数相或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相或,结果放在直接地址中ORL direct , #data;(direct) 或#data→direct, 直接地址中的内容相与立即数相或,结果放在直接地址中XRL Logical exclusive or 逻辑异或运算ORL A , Rn; (A) 异或(Rn)→A, A的内容与Rn中的内容相异或,结果放在A中ORL A , direct; (A) 异或(direct)→A, A的内容与直接地址中的内容相异或,结果放在A中ORL A , @Ri; (A) 异或((Ri))→A, A的内容与间址的内容相异或,结果放在A中ORL A , #data; (A) 异或(data)→A, A的内容与立即数相异或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相异或,结果放在直接地址中ORL direct , #data;(direct) 异或#data→direct, 直接地址中的内容相与立即数相异或,结果放在直接地址RL Rotate Left 循环左移指令RL A;每执行一次,A中的内容左移一位RR Rotate Right 循环右移指令RR A;每执行一次,A中的内容右移一位RLC Rotate Left with the Carry flag 带进位循环左移指令RLC A;每执行一次,CY和A中的内容左移一位RRC Rotate Right with the Carry flag带进位循环又移指令RRC A;每执行一次,CY和A中的内容右移一位注意:循环移位指令只能对A中的内容进行移位操作CPL Complement 取反指令(求补指令)CPL A;累加器内容按位取反,0变1,1变0CLR Clear 清零指令CLR A;累加器清零(A各位全变为0)●控制转移指令(9个助记符)LJMP Long Jump 长跳转指令LJMP add16;add16→PC,无条件跳转到add16地址,可在64KB范围内转移AJMP Absolute Jump 绝对跳转指令AJMP add11;add11→PC,无条件跳转到add11地址,可在2KB范围内转移SJMP Short Jump 短跳转指令SJMP rel;PC+2+rel→PC,rel是偏移量,8位有符号数(-127~127),可向前后跳转±128个地址单元JMP Jump 跳转指令JMP @A+DPTR;A+DPTR→PC,属于散转指令,无条件转向A与DPTR内容相加后形成的新地址JZ Jump if acc is Zero累加器为零转移JZ rel;A=0转向PC+2+rel→PC,A≠0,顺序执行JNZ Jump if acc is Not Zero累加器不为零转移JNZ rel;A≠0转向PC+2+rel→PC,A=0,顺序执行CJNE Compare and Jump if Not Equal比较不相等则转移CJNE A , direct , rel;A≠(direct)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(direct)CY=0, (A)<(direct)CY=1CJNE A , #data , rel;A≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(data)CY=0,( A)<(data)CY=1CJNE Rn , #data , rel; Rn≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); (Rn) >(data)CY=0, (Rn) <(data)CY=1CJNE @Ri , #data , rel;((Ri))≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1DJNE Decrement and Jump if Not Zero 减1不为0则转移DJNE Rn , rel;Rn-1→Rn, Rn≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)DJNZ direct , rel;(direct-1)→direct, direct≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)LCALL Long Call 长条用指令LCALL addr16;调用程序入口地址为addr16的之程序ACALL Absolute Call短调用ACALL addr11;调用程序入口地址为addr11的之程序RET ReturnRET;放在子程序最后,使程序准确返回到主程序断点处RETI Return from InterruptRETI;中断返回指令,能清楚优先级状态NOP No Operation 空操作指令NOP;空操作,产生一个机器周期延时●位操作指令MOV Move 数据传送指令MOV C , bit;(bit)→C,寻址位的状态送入CMOV bit , C;(C)→bit,C的转态送入地址中CLR Clear 清零指令CLR C;0→C,清零累加器CLR bit;清零直接寻址位CPL Complement 取反指令(求补指令)CPL C;c取反CPL bit;直接寻址位取反SETB Set Bit 置位SETB C;C置1SETB bit;直接寻址位置1ANL And Logical 与逻辑运算ANL C , bit;直接寻址位与C相与,结果放在CANL C , /bit; 直接寻址位与非C相与,结果放在CORL OR Logical 或逻辑运算ORL C , bit;直接寻址位与C相或,结果放在CORL C , /bit; 直接寻址位与非C相或,结果放在CJC Jump if Carry is set 进位位为1则转移JC rel;C=1,转向PC+2+rel→PC,否则顺序执行PC+2→PCJNC Jump if Carry is Not set 进位位为不为1则转移JNC rel;C=0,转向PC+2+rel→PC,否则顺序执行PC+2→PCJB Jump if Bit is set 进位位为1则转移JB bit , rel;(bit)=1,转向PC+3+rel→PC,否则顺序执行PC+3→PCJNB Jump if Bit is Not set 进位位为1则转移JNB bit , rel;(bit)=0,转向PC+3+rel→PC,否则顺序执行PC+3→PCJBC Jump if Bit is set and Clear bit指定位等于1转移并清该位JBC bit , rel; (bit)=1,转向PC+3+rel→PC,同时0→bit否则顺序执行PC+3→PC伪指令ORG Origin 代码起始地址指令ORG 0000HMOV A , #0010H;这条指令从0000H这个地址单元开始写起END End 汇编程序结束指令END;汇编指令结束DB字节定义伪指令ORG 1000HDB 01H , 02H;则(1000H)=01H,(1001H)=02HORG 1100HDB ‘01’;则(1100H)=30H,30H是0的ASCII码,(1101H)=31H,31H是1的ASCII码DW双字节定义伪指令ORG 2000HDW 2546H , 0178H; (2000H)=25H, (2001H)=46H, (2002H)=01H, (2003H)=78H,EQU数据赋值伪指令X EQU n;将n的值赋给xBIT位数据赋值伪指令y BIT b;y是用户定义标号,b为0或1MACRO宏指令宏指令名MACRO 形式参数······代码段······ENDM;宏指令定义结束寻址方式及相关的存储空间寻址方式寻址范围寄存器寻址R0~R7A 、B、C(CY)、AB(双字节)、DPTR(双字节)、PC(双字节)直接寻址内部RAM低128字节特殊功能寄存器内部RAM位寻区的128个位特殊功能寄存器中可寻址的位寄存器间接寻址内部数据存储器RAM【@R0,@R1,@SP(仅PUSH,POP)】内部数据存储器单元的低4位(@R0,@R1)外部RAM或I/O口(@R0,@R1,@DPTR)立即寻址程序存储器(常数)程序存储器(@A+PC,@A+DPTR)基寄存器加变址寄存器间接寻址。
51单片机指令表汇总

51单片机指令表汇总51 单片机是一种广泛应用于电子工程和嵌入式系统开发的微控制器。
要熟练掌握 51 单片机的编程,了解其指令表是至关重要的。
下面就为大家汇总一下 51 单片机的常见指令。
数据传送类指令MOV 指令:这是最基本的数据传送指令,用于在寄存器之间、寄存器与存储器之间传送数据。
例如,“MOV A, 50H”就是将立即数 50H传送到累加器 A 中。
MOVX 指令:用于在片外数据存储器和累加器 A 之间进行数据传送。
比如“MOVX A, @DPTR”,将片外数据存储器中由数据指针 DPTR 所指定单元的内容传送到累加器 A 中。
MOVC 指令:用于访问程序存储器中的数据表格。
“MOVC A, @A+DPTR”是常见的用法。
算术运算类指令ADD 指令:实现加法运算。
像“ADD A, R0”就是将累加器 A 的内容和寄存器 R0 的内容相加,结果存放在累加器 A 中。
ADDC 指令:带进位加法指令。
考虑了上一次运算产生的进位标志。
SUBB 指令:用于减法运算,并且会考虑借位标志。
逻辑运算类指令ANL 指令:进行逻辑与操作。
例如“ANL A, R0”,将累加器 A 和寄存器 R0 的内容进行逻辑与运算,结果存放在累加器 A 中。
ORL 指令:执行逻辑或操作。
XRL 指令:实现逻辑异或运算。
控制转移类指令JC 指令:若进位标志为 1 则跳转。
JZ 指令:若累加器 A 的内容为 0 则跳转。
LJMP 指令:长跳转指令,可以跳转到 64KB 程序存储器空间的任意位置。
位操作类指令SETB 指令:将指定的位设置为 1。
例如“SETB P10”,将 P1 端口的第 0 位置 1。
CLR 指令:把指定的位清零。
这些只是 51 单片机指令的一部分,实际应用中还有更多的指令和组合使用方式。
在编程时,合理选择和运用这些指令能够实现各种复杂的功能。
比如,通过数据传送指令来初始化变量和读取外部数据;利用算术运算指令进行数值计算;借助逻辑运算指令处理逻辑关系;使用控制转移指令实现程序的分支和循环;运用位操作指令控制单个引脚的状态。
51单片机汇编指令大全

51汇编指令大全Rn: 表示当前寄存器区的8个工作寄存器R0~R7Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)@: 为间接寄存器或基址寄存器的前缀.Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能寄存器SFR的地址(128~255)或名称,A: 累加器ACC.B: .特殊功能寄存器B,用于MUL和DIV指令中.C: 进位位Cy.#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.#data16: 表示包含在指令中的双字节(16位)立即数.Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.DPTR: 为数据指针,可用作16位的地址寄存器./: 加在位操作的前面,表示对该位进行非运算.bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.“(x): 寄存器或地址单元中的内容.((x)): 有x见解寻址的单元中的内容.<-: 表示将箭头右边的内容传送至箭头的左边.$: 当前指令的地址.单片机指令系统(一) 内部数据传送指令(1) 以累加器A为目的的传送指令:MOV A, #data ;(A)<-dataMOV A, direct ;(A)<-(direct)MOV A, Rn ;(A)<-(Rn)MOV A, @Ri ;(A)<- ((Ri))(2) 以通用寄存器Rn为目的的传送指令:MOV Rn, A ;(Rn)<-(A)MOV Rn, direct ; (Rn)<(direct)-MOV Rn, #data: ; (Rn)<-(data)(3) 以直接地址为目的的传送指令:MOV direct, A ;(direct)<-(A)MOV direct, Rn ; (direct)<-(Rn)MOV direct, direct2 ; (direct)<-(direct2)MOV direct, @Ri ; (direct)<-((Rn))MOV direct, #data ; (direct)<-data(4) 以寄存器间接地址为目的的传送指令:MOV @Ri, A ;((Ri))<-(A)MOV @Ri, direct ;((Ri))<-(direct)MOV @Ri, #data ;((Ri))<-data(二) 数据指针赋值指令(16位数据传送指令)MOV DPTR, #data16;(三) 片外数据传送指令MOVX A, @Ri ;(A)<-((Ri))片外MOVX A, @DPTR ;(A)<-((DPTR))片外MOVX @Ri, A ;((Ri))片外<-(A)MOVX @DPTR, A ;((DPTR))片外<-(A)(四) ROM数据访问指令(查表指令)MOVC A, @A+DPTR ;(A)<-((A)+(DPTR))romMOVC A, @A+PC ;(PC)<-(PC)+1,(A)<-((A)+(PC))rom (五) 堆栈操作指令PUSH direct ;(SP)<-(SP)+1,(SP)<-(direct)堆栈指针先加1,将数据压入栈顶POP direct ;(direct)<-(SP),(SP)<-(SP)-1将数据从栈顶弹出存入direct,SP再减1(六) 数据交换指令(1)整字节(8位)交换指令:XCH A, Rn ;A和Rn中的数互换XCH A, direct ;A和direct单元中的数互换XCH A, @Ri ;A和Ri间址单元中的数互换(2)半字节交换指令:XCHD A, @Ri ;A的低4位Ri间接单元的低4位互换,高4位不动(3)累加器高低半字节交换指令:SWAP A, ;A的高4位(D7~D4)和低4位(D3~D0)互换(七) 加法指令(1)不带Cy加法指令:ADD A, Rn ;(A)<-(A)+(Rn)ADD A, direct ; (A)<-(A)+(direct)ADD A, @Ri ; (A)<-(A)+((Ri))ADD A, #data ; (A)<-(A)+data(2)带进位加法指令:ADDC A, Rn ;(A)<-(A) +Cy+(Rn)ADDC A, direct ; (A)<-(A) +Cy+(direct)ADDC A, @Ri ; (A)<-(A) +Cy+((Ri))ADDC A, #data ; (A)<-(A) +Cy+data(3)加1指令:INC A, ;(A)<-(A)+1INC Rn ;(Rn)<-(Rn)+1INC @Ri ;((Ri))<-((Ri))+1INC direct ;(direct)<-(direct)+1INC DPTR ;(FPTR)<-(DPTR)+1(八) 减法指令(1)带进位减法指令:SUBB A, Rn ;(A)<-(A) -Cy-(Rn)SUBB A, direct ; (A)<-(A) -Cy-(direct)SUBB A, @Ri ; (A)<-(A) -Cy-((Ri))SUBB A, #data ; (A)<-(A) -Cy-data(2)减1指令:DEC A ;(A)<-(A)-1DEC direct ;(direct)<-(durect)-1DEC Rn ;(Rn)<-(Rn)-1DEC @Ri ;((Ri))<-((Ri))-1(九) 乘除指令(1)乘法指令MUL AB ;(B)(A)<-(A)*(B)指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.(2)除法指令DIV AB ;A/B,商存入A,余数存入B指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.(十) 十进制调整指令DA A(十一) 逻辑运算指令(1) 逻辑与运算指令:ANL A, Rn ;(A)<-(A)∧(Rn)ANL A, direct ; (A)<-(A)∧(direct)ANL A, @Ri ; (A)<-(A)∧((Ri))ANL A, #data ; (A)<-(A)∧dataANL direct, A ;(direct)<-(A)∧(direct)ANL direct, #data;(direct<-(direct)∧data(2) 逻辑或运算指令:ORL A, Rn ;(A)<-(A)∨(Rn)ORL A, direct ; (A)<-(A)∨(direct)ORL A, @Ri ; (A)<-(A)∨((Ri))ORL A, #data ; (A)<-(A)∨dataORL direct, A ;(direct)<-(A)∨(direct)ORL direct, #data; (direct)<-(direct)∨data(3) 逻辑异或运算指令:XRL A, Rn ;(A)<-(A)⊙(Rn)XRL A, direct ; (A)<-(A)⊙(direct)XRL A, @Ri ; (A)<-(A)⊙((Ri))XRL A, #data ; (A)<-(A)⊙dataXRL direct, A ;(direct)<-(A)⊙(direct)XRL direct, #data; (direct)<-(direct)⊙data(4) 累加器清0和去反指令CLR A ;(A)<-0 (累加器清0指令)CLR A ;(A)<-(A) (累加器取反指令)(5) 累加器移位指令:不带进位Cy循环左移: RL A ;Dn+1<-Dn,D0<-D7D7D6D5D4D3D2D1D0不带进位Cy循环右移: RR A :Dn+1->Dn,D0<-D7D7D6D5D4D3D2D1D0带进位Cy循环左移: RLC A ;Cy<-D7,Dn+1<-Dn,D0<-CyD7D6D5D4D3D2D1D0带进位Cy循环右移: RRC A ;Cy->D7,Dn+1->Dn,D0->Cy(十二) 控制转移指令[1] 无条件转移指令:(1) 长转移指令LJMP addr16 ;(PC)<-addr16(2) 绝对转移指令AJMP addr11 ;(PC)<-(PC)+2,(PC)10~0<-addr11(3) 短转移指令SJMP rel ;(PC)<-(PC)+2+rel(4) 变址寻址转移指令JMP @A+DPTR ;(PC)<-(A)+(DPTR)[2] 条件转移指令:(1) 累加器判0转移指令:JZ rel ;如果(A)=0,跳转到目标语句,否则顺序执行JNZ rel ;如果(A)≠0,跳转到目标语句,否则顺序执行(2) 比较转移指令:CJNZ A, #data, rel ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ A direct, rel ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行CJNZ Rn #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ @Ri #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行(3) 循环控制转移指令:DJNZ Rn, rel ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行DJNZ firect, rel ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行(十三) 子程序调用和返回指令(1) 绝对调用指令:ACALL addr11(2) 长调用指令:LCALL addr16(3) 返回指令:RET 子程序返回RETI 中断服务程序返回(十四) 空操作指令NOP 空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等(十五) 位操作类指令(1) 位传送指令:MOV C,bit ;(Cy)<-(bit),bit位的状态不变MOV bit,C ; (bit) <- (Cy),Cy位的状态不变(2) 位置位和复位指令:SETB C ;(Cy)<-1SETB bit ;(bit)<-1CLR C ;(Cy)<-0CLR bit ;(bit)<-0(3) 位运算指令:ANL C,bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给Cy ANL C,/bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给CyORL C,bit ;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,结果赋给Cy ORL C,/bit ;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,结果赋给CyCPL C ; (Cy)<-(Cy),Cy位取反CPL bit ;(bit)<-(bit),bit位取反(4) 位测试转移指令:(1) 以Cy位状态为条件的转移指令JC rel ;如果Cy位=1,跳转到目标语句,否则顺序执行JNC rel ;如果Cy位=0,跳转到目标语句,否则顺序执行(2) 以指定位状态为条件的转移指令:JB bit, rel ;如果bit=1,跳转到目标语句,否则顺序执行JNB bit, rel ;如果bit=0,跳转到目标语句,否则顺序执行JBC bit, rel ;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行。
51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集
1.MOV
MOV指令把源操作数的值复制到目的操作数。
格式如下:
MOV dest,src
dest :用于存储源操作数值的目的操作数。
src :用于取源操作数值的源操作数。
MOV指令可以把源操作数的值复制到目的操作数里,其中它的源操作数和目的操作数可以是内存单元,寄存器或立即数。
2.MVI
MVI指令把单字节立即数的值复制到其中一寄存器或内存单元。
格式如下:
MVI dest,data
dest :用于存放单字节立即数值的目的操作数。
data :用于取立即数值的立即数。
MVI指令可以把数据(data)复制到dest所指向的存储单元。
它的目的操作数可以是内存单元或寄存器,源操作数只能是8位立即数。
3.LXI
LXI指令可以把16位数据装载到左边和右边双字节寄存器中。
格式如下:
LXI rp,data
rp :用接受16位数据的双字节寄存器,它可以是BC,DE,HL或SP。
data :用于取16位立即数的立即数。
LXI指令可以把16位立即数data复制到双字节寄存器rp里。
4.LDA
LDA指令可以把存储单元中的数据装载到A寄存器中,格式如下:
LDA addr
addr :用于取存储单元数据值的存储单元地址。
LDA指令可以把存储单元addr中的数据复制到A寄存器中。
5.STA
STA指令可以把A寄存器的值存入指定的存储单元中,格式如下:
STA addr。
51单片机汇编指令总结

51单片机汇编指令总结数据传输指令一.片内ram数据传输指令1.以累加器a为目的操作数的指令:mova,rnmova,directmova,@rimova,#data2.以寄存器rn为目的操作数的指令:movrn,amovrn,directmovrn,data3.以轻易地址为目的操作数的指令:movdirect,amovdirect,rnmovdirect1,derect2movdirect,@rimovdirect,#data4.间接地址为目的操作数的指令:mov@ri,amov@ri,directmov@ri,#data5.十六位数据传送指令:movdptr,#data16二.累加器a与片外ram数据传输指令:movxa,@rimovxa,@dptrmovx@ri,amovx@dptr,a三.换算串行:movca,@a+dptr(先pc←(pc)+1,后a←((a)+(dptr)))+movca,@a+pc(先pc←(pc)+1,后a←((a)+(pc)))四.互换指令:1.字节交换指令:xcha,rnxcha,directxcha,@ri2.半字节交换指令:xchda,@ri3.累加器半字节交换指令:swapa五.栈操作指令:1.push(入栈指令)pushdirect2.pop(出栈指令)popdirect算术运算指令:一.乘法加法指令:1.加法指令:adda,rnadda,directadda,@riadda,#data2.拎位次乘法指令:addca,rna←(a)+(rn)+cyaddca,directa←(a)+(direct)+cyaddca,@ria←(a)+((ri))+cyaddca,#dataa←(a)+(data)+cy3.带借位减法指令:subba,rna←(a)-cy-(rn)subba,directa←(a)-cy-(direct)subba,@ria←(a)-cy-((ri))subba,#dataa←(a)-cy-#data二.乘法乘法指令:1.乘法指令:mulabba←(a)×(b)高字节放到b中,低字节放到a中2.乘法指令:divaba←(a)÷(b)的商,(b)←(a)÷(b)的余数三.加1减1指令:1.提1指令:incaa←(a)+1incrnrn←(rn)+1incdirectdirect←(direct)+1inc@ri(ri)←((ri))+1incdptrdptr←(dptr)+12.减至1指令:decadecrndecdirectdec@ri四.十进制调制指令:daa调整累加器a的内容为bcd码逻辑操作方式指令:一.逻辑与、或、异或指令:1.逻辑与指令:anla,rnanla,directanla,@rianla,#data2.逻辑或这而令:orla,rnorla,directorla,@riorla,#dataorldirect,aorldirect,#data3.逻辑异或指令:xrla,rnxrla,directxrla,@rixrla,#dataxrldirect,axrldirect,#data二.清零、row指令:1.累加器a清零指令:crla2.累加器arow指令:cpla三.循环位移指令:1.累加器a循环左移指令:rla2.累加器a循环右移指令:rra3.累加器a连同进位位循环左移指令:rlca4.累加器a连同进位位循环右移指令:rrca控制转移指令:一.无条件迁移指令:1.绝对转移指令:ajmpaddr11(先pc+2,然后将addr11的高十位托付给pc,pc的高六位维持不变)2.长转移指令:ljmpaddr16(用addr16的值替代pc的值)3.相对迁移(长迁移)指令:sjmprel(带符号的偏移字节数)(pc+2,再加rel赋值给pc)4.间接转移指令:jmp@a+dptr(a)+(dptr)→(pc)二.条件转移指令:1.累加器判零迁移指令:jzrel先pc+2;后判断,a为0时转移,pc+rel赋值给pc;否则顺序继续执行jnzrel先pc+2,后判断,a不为0时转移,pc+rel赋值给pc;否则顺序执行2.比较转移指令:cjne目的操作数,源操作数,relcjnea,direct,rel先pc+3传回pc,再比较目的操作数和原操作数cjnea,#data,rel目>源时,程序转移,pc+rel传回pc且cy=0cjnern,#data,rel目=源时,程序顺序执行cjne@ri,#data,rel目djnzrn,rel先pc\\+2,rn-1,当rn为0时程序顺序继续执行,否则pc+rel传到pcdjnzdirect,rel先pc+3,direct-1,direct为0时程序顺序继续执行,否则pc+rel传到pc二.子程序调用、返回指令:1.绝对调用指令acall:acalladdr11先pc+2,sp+1将pc的低八位存入sp;sp+1,将pc的高八位取走sp。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
32
NOP
空操作
1
1
00
直接字节与A 交换
2
1
C5
XCH A,@Ri
间接Rn 与A 交换
1
1
C6;C7
XCHD A,@Ri
间接Rn 与A 低半字节交换
1
1
D6;D7
2.逻辑运算指令(35条)
ANL A,Rn
寄存器与到A
1
1
58—5F
ANL A,data
直接字节与到A
2
1
55
ANL A,@RANL A,#data
51单片机汇编语言指令集
指 令 集(111条)
助 记 符
说明
字节
周期
代 码
1.数据传送指令(30条)
MOV A,Rn
寄存器送 A
1
1
E8--EF
MOV A,data
直接字节送A
2
1
E5
MOV A,@Ri
间接RAM 送A
1
1
E6--E7
MOV A,#data
立接数送 A
2
1
74
MOV Rn,A
A 送寄存器
1
1
96;97
SUBB A,#data
从A 中减去立即数和进位
2
1
94
INC A
A加1
1
1
04
INC Rn
寄存器加 1
1
1
08—0F
INC data
直接字节加1
2
1
05
INC @Ri
间接RAM 加1
1
1
06;07
INC DPTR
数据指针加1
1
2
A3
DEC A
A减1
1
1
14
DEC Rn
寄存器减 1
1
1
JBC bit,rel
若直接位=1 则转移且清除
3
2
10
CJNE A,data,rel
直接数与 A 比较,不等转移
3
2
B5
CJNE A,#data,rel
立即数与 A 比较,不等转移
3
2
B4
CJNE @Ri,#data,rel
立即数与间接RAM比较,不等转移
3
2
B6;B7
CJNE Rn,#data,rel
直接位送进位位
2
1
A2
MOV bit,C
进位位送直接位
2
2
92
MOVC A,@A+DPTR
A+DPTR 寻址程序存贮字节送 A
3
2
93
MOVC A,@A+PC
A+PC 寻址程序存贮字节送A
1
2
83
MOVX A,@Ri
外部数据送A(8 位地址)
1
2
E2;E3
MOVX A,@DPTR
外部数据送A(16 位地址)
立即数与到A
2
1
54
ANL data,A
A与到直接字节
2
1
52
ANL data,#data
立即数与到直接字节
3
2
53
ANL C,bit
直接位与到进位位
2
2
82
ANL C,/bit
直接位的反码与到进位位
2
2
B0
ORL A,Rn
寄存器或到A
1
1
48—4F
ORL A,data
直接字节或到A
2
1
45
ORL A,@Ri
1
D2
CLR A
A清0
1
1
E4
CLR C
进位位清 0
1
1
C3
CLR bit
直接位清 0
2
1
C2
CPL A
A求反码
1
1
F4
CPL C
进位位取反
1
1
B3
CPL bit
直接位取反
2
1
B2
RL A
A循环左移一位
1
1
23
RLC A
A 带进位左移一位
1
1
33
RR A
A右移一位
1
1
03
RRC A
A 带进位右移一位
18—1F
DEC data
直接字节减1
2
1
15
DEC @Ri
间接RAM 减1
1
1
16;17
MUL AB
A乘B
1
4
A4
DIV AB
A被B除
1
4
84
DA A
A十进制调整
1
1
D4
4.转移指令(22条)
AJMP addr 11
绝对转移
2
2
*1
LJMP addr 16
长转移
3
2
02
SJMP rel
短转移
2
2
80
1
2
E0
MOVX @Ri,A
A 送外部数据(8 位地址)
1
2
F2;F3
MOVX @DPTR,A
A 送外部数据(16 位地址)
1
2
F0
PUSH data
直接字节进栈道,SP 加1
2
2
C0
POP data
直接字节出栈,SP 减1
2
2
D0
XCH A,Rn
寄存器与 A 交换
1
1
C8—CF
XCH A,data
JMP @A+DPTR
相对于DPTR 间接转移
1
2
73
JZ rel
若A=0 则转移
2
2
60
JNZ rel
若A≠0 则转移
2
2
70
JC rel
若C=1 则转移
2
2
40
JNC rel
若C≠1 则转移
2
2
50
JB bit,rel
若直接位=1 则转移
3
2
20
JNB bit,rel
若直接位=0 则转移
3
2
30
1
1
13
SWAP A
A 半字节交换
1
1
C4
3.算术运算指令(24条)
ADD A,Rn
寄存器加到A
1
1
28—2F
ADD A,data
直接字节加到A
2
1
25
ADD A,@Ri
间接RAM 加到A
1
1
26;27
ADD A,#data
立即数加到A
2
1
24
ADDC A,Rn
寄存器带进位加到 A
1
1
38—3F
ADDC A,data
立即数与寄存器比较不等转移
3
2
B8—BF
DJNZ Rn,rel
寄存器减 1 不为0 转移
2
2
D8—DF
DJNZ data,rel
直接字节减1 不为 0 转移
3
2
D5
ACALL addr 11
绝对子程序调用
2
2
*1
LCALL addr 16
子程序调用
3
2
12
RET
子程序调用返回
1
2
22
RETI
中断程序调用返回
XRL A,data
直接字节异或到A
2
1
65
XRL A,@Ri
间接RAM异或到A
1
1
66;67
XRL A,#data
立即数异或到A
2
1
64
XRL data,A
A异或到直接字节
2
1
62
XRL data,#data
立即数异或到直接字节
3
2
63
SETB C
进位位置 1
1
1
D3
SETB bit
直接位置 1
2
2
2
86;87
MOV data,#data
立即数送直接字节
3
2
75
MOV @Ri,A
A 送间接 Rn
1
2
F6;F7
MOV @Ri,data
直接字节送间接Rn
1
1
A6;A7
MOV @Ri,#data
立即数送间接 Rn
2
2
76;77
MOVDPTR,#data16
16 位常数送数据指针
3
1
90
MOV C,bit
1
1
F8--FF
MOV Rn,data
直接数送寄存器
2
2
A8--AF
MOV Rn,#data
立即数送寄存器
2
1
78--7F
MOV data,A
A 送直接字节
2
1
F5
MOV data,Rn
寄存器送直接字节
2
1
88—8F
MOV data,data
直接字节送直接字节
3
2
85
MOV data,@Ri
间接 Rn 送直接字节
间接RAM或到A
1
1
46;47
ORL A,#data
立即数或到A