文档视界 最新最全的文档下载
当前位置:文档视界 › 51单片机汇编指令集

51单片机汇编指令集

51单片机汇编指令集
51单片机汇编指令集

1)数据传送类指令(7种助记符)

MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;

MOVC(Move Code)读取程序存储器数据表格的数据传送;

MOVX (Move External RAM) 对外部RAM的数据传送;

XCH (Exchange) 字节交换;

XCHD (Exchange low-order Digit) 低半字节交换;

PUSH (Push onto Stack) 入栈;

POP (Pop from Stack) 出栈;

(2)算术运算类指令(8种助记符)

ADD(Addition) 加法;

ADDC(Add with Carry) 带进位加法;

SUBB(Subtract with Borrow) 带借位减法;

DA(Decimal Adjust) 十进制调整;

INC(Increment) 加1;

DEC(Decrement) 减1;

MUL(Multiplication、Multiply) 乘法;

DIV(Division、Divide) 除法;

(3)逻辑运算类指令(10种助记符)

ANL(AND Logic) 逻辑与;

ORL(OR Logic) 逻辑或;

XRL(Exclusive-OR Logic) 逻辑异或;

CLR(Clear) 清零;

CPL(Complement) 取反;

RL(Rotate left) 循环左移;

RLC(Rotate Left throught the Carry flag) 带进位循环左移;

RR(Rotate Right) 循环右移;

RRC (Rotate Right throught the Carry flag) 带进位循环右移;

SWAP (Swap) 低4位与高4位交换;

(4)控制转移类指令(17种助记符)

ACALL(Absolute subroutine Call)子程序绝对调用;

LCALL(Long subroutine Call)子程序长调用;

RET(Return from subroutine)子程序返回;

RETI(Return from Interruption)中断返回;

SJMP(Short Jump)短转移;

AJMP(Absolute Jump)绝对转移;

LJMP(Long Jump)长转移;

CJNE (Compare Jump if Not Equal)比较不相等则转移;

DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;

JZ (Jump if Zero)结果为0则转移;

JNZ (Jump if Not Zero) 结果不为0则转移;

JC (Jump if the Carry flag is set)有进位则转移;

JNC (Jump if Not Carry)无进位则转移;

JB (Jump if the Bit is set)位为1则转移;

JNB (Jump if the Bit is Not set) 位为0则转移;

JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;

(5)位操作指令(1种助记符)

SETB(Set Bit) 位置1。

MCS-51系列单片机指令以A开头的指令有18条,分别为:

ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn

ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ANL C,bit ANL C,/bit

1、ACALL addr11

指令名称:绝对调用指令

指令代码:A10 A9 A9 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0

指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),

取代PC的低11位,PC的高5位不变。

操作内容:

PC←(PC)+2

SP←(SP)+1

(SP)←(PC)7~0

SP←(SP)+1

(SP)←(PC)15~8

PC10~0←addrl0~0

字节数: 2

机器周期:2

使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。

2、ADD A,Rn

指令名称:寄存器加法指令

指令代码:28H~2FH

指令功能:累加器内容与寄存器内容相加

操作内容:A←(A)+(Rn), n=0~7

字节数: 1

机器周期;1

影响标志位:C,AC,OV

3、ADD A,direct

指令名称:直接寻址加法指令

指令代码:25H

指令功能:累加器内容与内部RAM单元或专用寄存器内容相加

操作内容:A←(A)+(direct)

字节数: 2

机器周期:1

影响标志位:C,AC,OV

4、ADD A,@Ri ’

指令名称:间接寻址加法指令

指令代码:26H~27H

指令功能:累加器内容与内部RAM低128单元内容相加

操作内容:A←(A)+((Ri)), i=0,1

字节数: 1

机器周期:1

影响标志位:C,AC,OV

5、ADD A,#data

指令名称:立即数加法指令

指令代码:24H

指令功能:累加器内容与立即数相加

操作内容:A←(A)+data

字节数: 2

机器周期:1

影响标志位:C,AC,OV

6、ADDC A,Rn

指令名称:寄存器带进位加法指令

指令代码:38H~3FH

指令功能:累加器内容、寄存器内容和进位位相加

操作内容:A←(A)+(Rn)+(C), n=0~7

字节数: 1

机器周期:1

影响标志位:C,AC,OV

7、ADDC A,direct

指令名称:直接寻址带进位加法指令

指令代码:35H

指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)

字节数: 2

机器周期:1

影响标志位:C,AC,OV

8、ADDC A,@Ri

指令名称:间接寻址带进位加法指令

指令代码:36H~37H

指令功能:累加器内容、内部RAM低128单元内容及进位位相加

操作内容:A←(A)+((Ri))+(C), i=0,1

字节数: 1

机器周期:1

影响标志位:C,AC,OV

9、ADDC A,#data

指令名称:立即数带进位加法指令

指令代码:34H

指令功能:累加器内容、立即数及进位位相加

操作内容:A←(A)+data+(C)

字节数: 2

机器周期:1

影响标志位:C,AC,OV

10、AJMP addr11

指令名称:绝对转移指令

指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0

指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。

操作内容:PC←(PC)+2

PCl0~0←addrll

字节数: 2

机器周期:2

使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB。

11、ANL A,Rn

指令名称:寄存器逻辑与指令

指令代码:58H~5FH

指令功能:累加器内容逻辑与寄存器内容

操作内容:A←(A)∧(Rn), n=0~7

字节数: 1

机器周期:1

12、ANL A,direct

指令名称:直接寻址逻辑与指令

指令代码:55H

指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容

操作内容:A←(A)∧(diret)

字节数: 2

机器周期:1

13、ANL A,@Ri

指令名称:间接寻址逻辑与指令

指令代码:56H~57H

指令功能:累加器内容逻辑与内部RAM低128单元内容

操作内容:A←(A)∧((Ri)) i=0,1

字节数: 1

机器周期:1

14、ANL A,#data

指令名称:立即数逻辑与指令

指令代码:54H

指令功能:累加器内容逻辑与立即数

操作内容:A←(A)∧data

字节数: 2

机器周期:1

15、ANL direct,A

指令名称:累加器逻辑与指令

指令代码:52H

指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容

操作内容:direct←(A)∧(direct)

字节数: 2

机器周期:1

16、ANL direct, #data

指令名称:逻辑与指令

指令代码:53H

指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数

操作内容:direct←(direct)∧data

字节数: 3

机器周期:2

17、ANL C,bit

指令名称:位逻辑与指令

指令代码:82H

指令功能:进位标志逻辑与直接寻址位

操作内容:C←(C)∧(bit)

字节数: 2

机器周期:2

18、ANL C,/bit

指令名称:位逻辑与指令

指令代码:B0H

指令功能:进位标志逻辑与直接寻址位的反

操作内容:C←(C)∧(bit)

字节数: 2

机器周期:2

MCS-51系列单片机指令以C开头的指令有10条,分别为:

CJNE A,dircet,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel CLR A CLR C CLR bit CPL A CPL C CPL bit

1、CJNE A,dircet,rel

指令名称:数值比较转移指令

指令代码:B5H

指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移。

操作内容:若(A)=(direct),则PC←(PC)+3,C←0

若(A)>(direct),则PC←(PC)+3+rel,C←0

若(A)<(direct),则PC←(PC)+3+rel,C←1

字节数: 3

机器周期:2

2、CJNE A,#data,rel

指令名称:数值比较转移指令

指令代码:B4H

指令功能:累加器内容与立即数比较,不等则转移。

操作内容:若(A)=data,则PC←(PC)+3,C←0

若(A)>data,则PC←(PC)+3+rel,C←0

若(A)<data,则PC←(PC)+3+rel,C←1

字节数: 3

机器周期:2

3、CJNE Rn,#data,rel

指令名称:数值比较转移指令

指令代码:B8H~BFH

指令功能:寄存器内容与立即数比较,不等则转移。

操作内容:若(Rn)=data,则PC←(PC)+3,C←0

若(Rn)>data,则PC←(PC)+3+rel,C←0

若(Rn)<data,则PC←(PC)+3+rel,C←1

字节数: 3

机器周期:2

4、CJNE @Ri,#data,rel

指令名称:数值比较转移指令

指令代码:B6H~B7H

指令功能:内部RAM低128单元内容与立即数比较,不等则转移。操作内容:若((Ri))=data,则PC←(PC)+3,C←0

若((Ri))>data,则PC←(PC)+3+rel,C←0

若((Ri))<data,则PC←(PC)+3+rel,C←1

字节数: 3

机器周期:2

5、CLR A

指令名称:累加器清0指令

指令代码:E4H

指令功能:累加器清0

操作内容:A←0

字节数: 1

机器周期:1

6、CLR C

指令名称:进位标志清0指令

指令代码:C3H

指令功能:进位位清0

操作内容:C←0

字节数: 1

机器周期:1

7、CLR bit

指令名称:直接寻址位清0指令

指令代码:C2H

指令功能:直接寻址位清0

操作内容:bit←0

字节数: 2

机器周期:1

8、CPL A

指令名称:累加器取反指令

指令代码:F4H

指令功能:累加器取反

操作内容:A←(A)

字节数: 1

机器周期:1

9、CPL C

指令名称:进位标志取反指令

指令代码:B3H

指令功能:进位标志位状态取反

操作内容:C←(c取反)

字节数: 1

机器周期:1

10、 CPL bit

指令名称:直接寻址位取反指令

指令代码:B2H

指令功能:直接寻址位取反

操作内容:bit←(bit取反)

字节数: 2

机器周期:1

MCS-51系列单片机指令以D开头的指令有8条,分别为:

DA A DEC A DEC Rn DEC direct DEC @Ri DIV AB DJNZ Rn,rel DJNZ direct,rel

1、DA A

指令名称:十进制调整指令

指令代码:D4H

指令功能:对BCD码加法运算的结果进行有条件的修正

操作内容:若(A)3~0>9∨(AC)=1,则A3~0←(A)3~0+6

若(A)7~4>9∨(C)=1,则A7~4←(A)7~4+6

若(A)7~4=9∧(A)3~0>9,则A7~4←(A)7~4+6

字节数: 1

机器周期:1

使用说明:DA指令不影响溢出标志

2、DEC A

指令名称:累加器减1指令

指令代码:14H

指令功能:累加器内容减1

操作内容:A←(A)-1

字节数: 1

机器周期:1

3、DEC Rn

指令名称:寄存器减1指令

指令代码:18H~1FH

指令功能:寄存器内容减1

操作内容:Rn←(Rn)-1,n=0~7

字节数: 1

机器周期:1

4、DEC direct

指令名称:直接寻址减1指令

指令代码:15H

指令功能:内部RAM低128单元及专用寄存器内容减1

操作内容:direct←(direct)-1

字节数: 2

机器周期:1

5、DEC @Ri

指令名称:间接寻址减1指令

指令代码:16H~17H

指令功能:内部RAM低128单元内容减1

操作内容:(Ri)←((Ri))-1, i=0,1

字节数: 1

机器周期:1

6、DIV AB

指令名称:无符号数除法指令;

指令代码:84H

指令功能:A的内容被B的内容除。指令执行后,商存于A中,余数存于B中。操作内容:A←(A)/(B)的商

B←(A)/(B)的余数

字节数: 1

机器周期:4

影响标志位:C被清0;若B=00H,除法无法进行,并使OV=1;否则OV=0。

7、DJNZ Rn,rel

指令名称:寄存器减1条件转移指令

指令代码:D8H~DFH

指令功能:寄存器内容减1。不为0转移;为0顺序执行。

操作内容:Rn←(Rn)-l,n=0~7

若(Rn)≠0,则PC←(PC)+2+rel

若(Rn)=0,则PC←(PC)+2

字节数: 2

机器周期:2

8、DJNZ direct,rel

指令名称:直接寻址单元减1条件转移指令

指令代码:D5H

指令功能:内部RAM低128单元内容减1。不为0转移;为0顺序执行。操作内容:direct←(direct)-1

若(direct)≠0,则PC←(PC)+3+rel

若(direct)=0,则PC←(PC)+3

字节数: 3

机器周期:2

MCS-51系列单片机指令以I开头的指令有5条,分别为:

INC A INC Rn INC direct INC @Ri INC DPTR

1、INC A

指令名称:累加器加1指令

指令代码:04H

指令功能:累加器内容加1

操作内容:A←(A)+1

字节数: 1

机器周期:1

2、INC Rn

指令名称:寄存器加1指令

指令代码:08H~0FH

指令功能:寄存器内容加1

操作内容:Rn←(Rn)+1,n=0~7

字节数: 1

机器周期:1

3、INC direct

指令名称:直接寻址单元加1指令

指令代码:05H

指令功能:内部BAM低128单元或专用寄存器内容加1

操作内容:direct←(direct)+1

字节数: 2

机器周期:1

4、INC @Ri

指令名称:间接寻址单元加1指令

指令代码:06H~07H

指令功能:内部RAM低128单元内容加1

操作内容:(Ri)←((Ri))+1;i=0,l

字节数:1

机器周期:1

5、INC DPTR

指令名称:16位数据指针加1指令

指令代码:A3H

指令功能:数据指针寄存器DPTR内容加1

操作内容:DPTR←(DPTR)+1

字节数:1

机器周期:2

MCS-51系列单片机指令以J开头的指令有8条,分别为:

JB bit,rel JBC bit,rel JC rel JMP @A+DPTR JNB bit,rel JNC rel JNZ rel JZ rel

1、JB bit,rel

指令名称:位条件转移指令。

指令代码:20H

指令功能:根据指定位的状态,决定程序是否转移。若为1则转移;否则顺序执行。

操作内容:若(bit)=1,则PC←(PC)+3+rel

若(bit)≠1,则PC←(PC)+3

字节数:3

机器周期:2

2、JBC bit,rel

指令名称:位条件转移清0指令

指令代码:10H

指令功能:对指定位的状态进行测试。若为1,则把该位清0并进行转移;否则程序顺序执行。

操作内容:若(bit)=1,则PC←(PC)+3+rel,bit←0

若(bit)≠1,则PC←(PC)+3

字节数:3

机器周期:2

3、JC rel

指令名称:累加位条件转移指令

指令代码:40H

指令功能:根据累加位(C)的状态决定程序是否转移,若为1则转移,否则顺序执行。

操作内容:若(C)=1,则PC←(PC)+2+rel

若(C)≠1,则PC←(PC)+2

字节数:2

机器周期:2

4、JMP @A+DPTR

指令名称:无条件间接转移指令

指令代码:72H

指令功能:A内容与DPTR内容相加作为转移目的地址,进行程序转移。

操作内容:PC←(A)+(DPTR)

字节数:1

机器周期;2

5、JNB bit,rel

指令名称:位条件转移指令

指令代码:30H

指令功能:根据指定位的状态,决定程序是否转移。若为0则转移;否则顺序执行。操作内容:若(bit)=0,则PC←(PC)+3+rel

若(bit)≠0,则PC←(PC)+3

字节数:3

机器周期:2

6、JNC rel

指令名称:累加位条件转移指令

指令代码:50H

指令功能:根据累加位(C)的状态决定程序是否转移。若为o则转移;否则顺序执行。操作内容:若(C)=0,则PC←(PC)+2+rel

若(C)≠0,则PC←(PC)+2

字节数:2

机器周期:2

7、JNZ rel

指令名称:判0转移指令

指令代码:70H

指令功能:累加位(A)的内容不为0,则程序转移;否则程序顺序执行。

操作内容:若(A)≠0,则PC←(PC)+2+rel

若(A)=0,则PC←(PC)+2

字节数:2

机器周期:2

8、JZ rel

指令名称:判0转移指令

指令代码:60H

指令功能:累加位(A)的内容为o,则程序转移;否则程序顺序执行。

操作内容:若(A)=0,则PC←(PC)+2+rel

若(A)≠0,则PC←(PC)+2

字节数:2

机器周期:2

MCS-51系列单片机指令以L开头的指令就2条,分别为:

LCALL addr16 LJMP addrl6

1、LCALL addr16

指令名称:长调用指令

指令代码:12H

指令功能:按指令给定地址进行子程序调用

操作内容:PC←(PC)+3

SP←(SP)+1

(SP)←(PC)7~0

SP←(SP)+1

(SP)←(PC)15~8

PC←addrl6

字节数:3

使用说明:在64KB的范围内调用子程序

2、LJMP addrl6

指令名称:长转移指令

指令代码:02H

指令功能:使程序按指定地址进行无条件转移

操作内容:PC←addrl6

字节数:3

机器周期:2

MCS-51系列单片机指令以M开头的指令有24条,分别为:

MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data MOV direct,A MOV direct,Rn MOV direct2,direct1 MOV direct, @Ri MOV direct,#data MOV @Ri,A MOV @Ri,direct MOV @Ri,data MOV C,bit MOV bit,C MOV DPTR,#datal6 MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A MUL AB

1、MOV A,Rn

指令名称:寄存器数据传送指令

指令代码:E8H~EFH

指令功能:寄存器内容送累加器

操作内容:A←(Rn),n=0~7

字节数:1

机器周期:1

2、MOV A,direct

指令名称:直接寻址数据传送指令

指令代码:E5H

指令功能:内部RAM低126单元或专用寄存器内容送累加器

操作内容:A←(direct)

字节数:2

机器周期:1

3、MOV A,@Ri

指令名称:间接寻址数据传送指令

指令代码:E6H~E7H

指令功能:内部RAM低128单元内容送累加器

操作内容:A←((Ri)),i=0,1

字节数:1

机器周期:1

4、MOV A,#data

指令名称:立即数据传送指令

指令代码:74H

指令功能:立即数送累加器

操作内容:A←data

字节数:2

5、MOV Rn,A

指令名称:累加器数据传送指令

指令代码:F8H~FFH

指令功能:累加器内容送寄存器

操作内容:Rn←(A)

字节数:1

机器周期:1

6、MOV Rn,direct

指令名称:直接寻址数据传送指令

指令代码:A8H~AFH

指令功能:内部RAM低128单元或专用寄存器内容送累加器操作内容:Rn←(direct),n=0~7

字节数:2

机器周期:2

7、MOV Rn,#data

指令名称:立即数据传送指令

指令代码:78H~7FH

指令功能:立即数送寄存器

操作内容:Rn←data,n=0~7

字节数:2

机器周期:1

8、MOV direct,A

指令名称:累加器数据传送指令

指令代码:F5H

指令功能:累加器内容送内部RAM低128单元或专用寄存器操作内容:direct←(A)

字节数:2

机器周期:1

9、MOV direct,Rn

指令名称:寄存器数据传送指令

指令代码:88H~8FH

指令功能:寄存器内容送内部RAM低128单元或专用寄存器操作内容:direct←(Rn),n=0~7

字节数:2

机器周期:2

10、MOV direct2,direct1

指令名称:直接寻址数据传送指令

指令代码:85H

指令功能:内部RAM低123单元或专用寄存器之间的相互传送操作内容:direct2←(direct1)

字节数:3

机器周期:2

11、MOV direct, @Ri

指令名称:间接寻址数据传送指令

指令代码:86H~87H

指令功能:内部RAM低128单元内容送内部RAM低128单元或专用寄存器操作内容:direct←((Ri)),i=0,1

字节数:2

机器周期:2

12、MOV direct,#data

指令名称:立即数传送指令

指令代码:75H

指令功能:立即数送内部RAM低128单元或专用寄存器

操作内容:direct←data

字节数:3

机器周期:2

13、MOV @Ri,A

指令名称:累加器数据传送指令

指令代码:F6H~F7H

指令功能:累加器内容送内部RAM低128单元

操作内容:(Ri)←(A),i=0,1

字节数:1

机器周期:1

14、MOV @Ri,direct

指令名称:直接寻址数据传送指令

指令代码:A6H~A7H

指令功能:内部RAM低128单元或专用寄存器内容送内部RAM低128单元操作内容:(Ri)←(direct),i=0,1

字节数:2

机器周期:2

15、MOV @Ri,data

指令名称:立即数传送指令

指令代码:76H~77H

指令功能:立即数送内部RAM低128单元

操作内容:(Ri)←data,i=0,1

字节数:2

机器周期:1

16、MOV C,bit

指令名称:位数据传送指令

指令代码:A2H

指令功能:内部RAM可寻址位或专用寄存器的位状态送累加位C

操作内容:C←(bit)

字节数:2

机器周期:1

17、MOV bit,C

指令名称:累加位数据传送指令

指令代码:92H

指令功能:累加器状态送内部RAM可寻址位或专用寄存器的指定位

操作内容:bit←(C)

字节数:2

机器周期:2

18、MOV DPTR,#datal6

指令名称:+六位数据传送指令

指令代码:90H

指令功能:十六位立即数送数据指针

操作内容:DPH←datal5~8

DPL←data7~0

字节数:3

机器周期:2

19、MOVC A,@A+DPTR

指令名称:程序存储器读指令

指令代码:93H

指令功能:读程序存储器单元内容送累加器

操作内容:A←((A)+(DPTR))

字节数:1

机器周期:2

使用说明:变址寄存器A内容加基址寄存器DPTR内容时,低8位产生的进位直接加到高位,不影响进位标志。

20、MOVC A,@A+PC

指令名称:程序存储器读指令

指令代码:83H

指令功能:读程序存储器单元内容送累加器

操作内容:A←((A)+(PC))

字节数:1

机器周期:2

使用说明:同MOVC A,@A+DPTR指令(序号70)

21、MOVX A,@Ri

指令名称:寄存器间接寻址外部RAM读指令

指令代码:E2H~E3H

指令功能:读外部RAM低256单元数据送累加器

字节数:1

机器周期:2

22、MOVX A,@DPTR

指令名称:数据指针间接寻址外部RAM读指令

指令代码:E0H

指令功能:读外部RAM单元数据送累加器

操作内容:A1←((DPTR))

字节数:1

机器周期:2

23、MOVX @Ri,A

指令名称:寄存器间接寻址外部RAM写指令

指令代码:F2H~F3H

指令功能:把累加器内容写入外部RAM低256单元

操作内容:(Ri)←(A),i=1,0

字节数:1

机器周期:2

24、MOVX @DPTR,A

指令名称:数据指针间接寻址外部RAM写指令

指令代码:F0H

指令功能:把累加器内容写入外部RAM单元

操作内容:(DPTR)←(A)

字节数:1

机器周期:2

25、MUL AB

指令名称:乘法指令

指令代码:A4H

指令功能:实现8位无符号数乘法运算。两个乘数分别放在累加器A和寄存器B中。乘积为16位,低8位在B中,高8位在A中。

操作内容:AB←(A)×(B)

字节数:1

机器周期:4

影响标志位:进位标志复位。若乘积大于255,则OV标志置位;否则复位。

MCS-51系列单片机指令以N开头的指令只有1条,就是:

1、NOP

指令名称:空操作指令

指令代码;00H

指令功能:不执行任何操作,常用于产生一个机器周期的时间延迟。

操作内容:PC←(PC)+l

字节数:1

机器周期:1

MCS-51系列单片机指令以O开头的指令有8条,分别为:

ORL A,Rn ORL A,direct ORL A,@Ri ORL A,#data ORL direct,A ORL direct,#data ORL C,bit ORL C,/bit

1、ORL A,Rn

指令名称:逻辑或操作指令

指令代码:48H~4FH

指令功能:累加器内容与寄存器内容进行逻辑或操作

操作内容:A1←(A)∨(Rn),n=0~7

字节数:1

机器周期:1

2、ORL A,direct

指令名称:逻辑或操作指令

指令代码:45H

操作内容:A←(A)∨(direct)

字节数:2

机器周期:1

3、ORL A,@Ri

指令名称:逻辑或操作指令

指令代码:46H~47H

指令功能:累加器内容与内部RAM低128单元内容进行逻辑或操作

操作内容:A←(A)∨((Ri));i=0,1

字节数:1

机器周期:1

4、ORL A,#data

指令名称:逻辑或操作指令

指令代码:44H

指令功能:累加器内容与立即数进行逻辑或操作

操作内容:A←(A)∨data

字节数:2

机器周期:1

5、ORL direct,A

指令名称:逻辑或操作指令

指令代码:42H

指令功能:内部RAM低128单元或专用寄存器内容与累加器内容进行逻辑或操作

操作内容:direct←(direct)∨(A)

字节数:2

机器周期:1

6、ORL direct,#data

指令名称:逻辑或操作指令

指令代码:43H

指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑或操作。

操作内容:direc t←(direct)∨data

字节数:3

机器周期:2

7、ORL C,bit

指令名称:位逻辑或操作指令

指令代码:72H

指令功能:累加位C状态与内部RAM可寻址位或专用寄存器指定位进行逻辑或操作

操作内容:C←(C)∨(bit)

字节数:2

机器周期:2

8、ORL C,/bit

指令名称:位反逻辑或操作指令

指令代码:A0H

指令功能:累加位C状态与内部RAM可寻址位或专用寄存器指定位的反进行逻辑或操作操作内容:C←(C)∨(bit非)

机器周期:2

使用说明:指定位的状态取反后进行逻辑或操作,但并不改变指定位的原来状态。

MCS-51系列单片机指令以P开头的指令有2条,分别为:

POP direct PUSH direct

1、POP direct

指令名称:出栈指令

指令代码:D0H

指令功能:堆栈栈顶单元的内容送内部RAM低128单元或专用寄存器

操作内容:direct←(SP)

SP←(SP)-1

字节数:2

机器周期:2

2、PUSH direct

指令名称:进栈指令

指令代码:C0

指令功能:内部RAM低128单元或专用寄存器内容送堆栈栈顶单元

操作内容:SP←(SP)+1

(SP)←(direct)

字节数:2

机器周期:2

MCS-51系列单片机指令以R开头的指令有6条,分别为:

RET RETI RL A RLC A RR A RRC A

1、RET

指令名称:子程序返回指令

指令代码:22H

指令功能:子程序返回

操作内容:PC15~8←((SP))

SP←(SP)-1

PC7~0←((SP))

SP←(SP)-1

字节数:1

机器周期:2

2、RETI

指令名称:中断返回指令

指令代码:32H

指令功能:中断服务程序返回

操作内容’:PC15?/FONT>8←((SP))

SP←(SP)-l

PC7~0←((SP))

字节数:1

机器周期:2

3、RL A

指令名称:循环左移指令

指令代码:23H

指令功能:累加器内容循环左移一位

操作内容:An+1←(An);n=0~6

A0←(A7)

字节数:1

机器周期:1

4、RLC A

指令名称:带进位循环左移指令

指令代码:33H

指令功能:累加器内容连同进位标志位循环左移一位

操作内容:An-1←(An);n=0~6

A0←(C)

C←(A7)

字节数:1

机器周期:1

5、RR A

指令名称:循环右移指令

指令代码:03H

指令功能:累加器内容循环右移一位

操作内容:An←(An+1);n=0~6

A7←(A0)

字节数:1

机器周期:1

6、RRC A

指令名称:带进位循环右移指令

指令代码:13H

指令功能:累加器内容连同进位标志位循环右移一位

操作内容:An←(An+1);n=0~6

A7←(C)

C←(A0)

字节数:1

机器周期:1

MCS-51系列单片机指令以S开头的指令有8条,分别为:

SETB c SETB bit SJMP rel SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data SW AP A

1、SETB c

指令名称:进位标志置位指令

指令代码:D.H

指令功能:进位标志位置位

操作内容:C←1

字节数:1

机器周期:1

2、SETB bit

指令名称:直接寻址位置位指令

指令代码:D2H

指令功能:内部RAM可寻址位或专用寄存器指定位置位

操作内容:bit←1

字节数:2

机器周期:1

3、SJMP rel

指令名称:短转移指令

指令代码:80H

指令功能:按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;

操作内容:PC←(PC)+2

PC←(PC)+rel

字节数:2

机器周期:2

使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC一26)一(PC+129)。其中PC值为本指令的地址。

4、SUBB A,Rn

指令名称:寄存器寻址带进位减法指令

指令代码:98H~9FH

指令功能:累加器内容减寄存器内容和进位标志位内容

操作内容:A←(A)-(Rn)-(C);n=0~7

字节数:1

机器周期:1

影响标志位:当够减时,进位标志位复位;不够减时,进位标志置位。当位3发生借位,AC置位;否则AC复位。当位6及位7不同时发生借位时,OV置位;否则OV复位。5、SUBB A,direct

指令名称:直接寻址带进位减法指令

指令代码:95H

指令功能:累加器内容减内部RAM低128单元或专用寄存器和进位标志位内容

操作内容:A←(A)-(diret)-(C)

字节数:2

机器周期:1

影响标志位:同SUBB A,Rn指令(序号97)

6、SUBB A,@Ri

指令名称:间接寻址带进位减法指令

指令代码:96H~97H

指令功能:累加器内容减内部RAM低128单元内容及进位标志位内容

操作内容:A←(A)-((Ri))-(C);i=0,1

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

(完整版)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的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV 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条)

51单片机常用汇编语言助记符英文全称

51单片机常用汇编语言助记符英文全称 (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1;DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零;CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用;

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

51单片机汇编指令集(附记忆方法)

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1; MUL(Multiplication 、Multiply) 乘法; DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符) ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移; AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移; CJNE (Compare Jump if Not Equal) 比较不相等则转移; DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

51单片机汇编指令及伪指令小结

51单片机汇编指令小结

二、算术运算类指令

四、控制转移类指令类

五、位操作类指令 逻辑操作与字节中的一致

51汇编常用伪指令 https://www.docsj.com/doc/507485981.html, 16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址; 2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG:DB 88H,100,``7" , ``C"; 3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB:DW 1234H, 7BH 名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。例如:COUNT=10或SPACE EQU 10H 5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。例如:ERROR DATA 80H 6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。例如:IO_POTR XDATA OCF04H 7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H 8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

51单片机汇编指令

按功能分为五大类: (1)数据传送类指令(7种助记符) MOV(Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

51单片机汇编指令集

1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011

PIC16系列单片机汇编指令集-包括部分伪指令-很有帮助(整理的)2011.txt大人物的悲哀在于他们需要不停地做出选择;而小人物的悲哀在于他们从来没有选择的机会。男人因沧桑而成熟,女人因成熟而沧桑。男人有了烟,有了酒,也就有了故事;女人有了钱,有了资色,也就有了悲剧。 当D不写时默认是放到F中吗?好像是. 更新:1,PIC16没有同或指令; 面向字节 ADDWF F,D ;寄存器加法指令,F+W→D 影响C,DC,Z 进位C为1表示有进位 INCF F,D ;寄存器加1指令F+1→D SUBWF F,D ;减法指令F-W→D 影响C,DC,Z 进位C为0表示有借位.则F

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

汇编51单片机考试常见试题

汇编51单片机考试常见试题

一、填空题 1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。 2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。 3.计算机的系统总线有地址总线、控制总线和数据总线。 4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。 6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。 8.通常、单片机上电复位时PC= 0000H,SP=07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。 9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。 12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。 13.半导体存储器的最重要的两个指标是存储容量和存储速度。 14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。 15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。 16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。 17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。 18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。19.若A中的内容为63H,那么,P标志位的值为0。 20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。 21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。 22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。 23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。 24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。 25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。 26.12根地址线可寻址4 KB存储单元。 27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。 29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。 30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

51单片机汇编语言带进位加法指令

51单片机汇编语言带进位加法指令 带进位加法指令(4 条)这4 条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。ADDC A,data ;(A)+(data)+(C)(A)累加器A 中的内容与直接地址单元的内容连同进位位相加,结果存在A 中ADDC A,#data ;(A)+#data +(C)(A)累加器A 中的内容与立即数连同进位位相加,结果存在A 中ADDC A,Rn ;(A)+Rn+(C)(A)累加器A 中的内容与工作寄存器Rn 中的内容、连同进位位相加,结果存在A 中ADDC A,@Ri ;(A)+((Ri))+(C)(A)累加器A 中的内容与工作寄存器Ri 指向地址单元中的内容、连同进位位相加,结果存在A 中用途:将A 中的值和其后面的值相加,并且加上进位位C 中的值。说明:由于51 单片机是一种8 位机,所以只能做8 位的数学运算,但8 位的运算范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2 个8 位的数学运算合起来,成为一个16 位的运算,这样,可以表达的数的范围就可以到达0-65535。如何合并呢?其实很简单,让我们看一个十进制数的例子吧:66+78 这两个数相加,我们根本不在意这个过程,但事实上我们是这样做的:先做6+8(低位),然后再做 6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法 来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范围(0-9)。在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法时将这一点加进去。那么计算机中做16 位加法时同样如此,先做低8 位的,如果两数相加 后产生了进位,也要点一下做个标记,这个标记就职进位位C,在程序状态字PSW 中。在进行高位加法是将这个C 加进去。例如:1067H+10A0H,先做 67H+A0H=107H,而107H 显然超过了0FFH,因此,最终保存在A 中的数是

51汇编指令大全

Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的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)<-data MOV 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; (三) 片外数据传送指令

51单片机汇编指令大全

51汇编指令大全 Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的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)<-data MOV 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) 以寄存器间接地址为目的的传送指令:

C51单片机汇编语言指令集

51汇编语言指令集 符号定义表 符号含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3, IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 指令介绍 指令字 节周 期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果 存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结 果存回累加器 3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结 果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加 器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相 加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C 相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C 相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果 存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借 位C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借 位C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借 位C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结 果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相 乘,乘积的低位字节存回累加器, 高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果 的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻 辑判断,结果存回累加器 ANL A,direct 2 1 将累加器的值与直接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判 断,结果存回累加器 ANL direct,A 2 1 将直接地址的内容与累加器的值做AND 的逻辑判断,结果存回该直接地址 ANL direct,#data 3 2 将直接地址的内容与常数值做AND 的逻辑判断,结果存回该直接地址ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻 辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR 的逻辑判断,结果存回累加器33.ORL 1 1 将累加器的值与间接地址的内容做OR

相关文档