这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 51绘编基本指令

共1条 1/1 1 跳转至

51绘编基本指令

菜鸟
2007-12-24 16:37:31     打赏

MCS-51 汇编指令集

   CJNE        A,direct,rel        ;if(direct)<(A),PC←(PC)+3+rel,and CY←0   ;CJNE compare instruction
;                                   ;if(direct)>(A),PC←(PC)+3+rel,and CY←1
;                                   ;if(direct)=(A),PC←(PC)+3,and CY←0
;   CJNE        A,#data,rel         ;ifdata<(A),PC←(PC)+3+rel,and CY←0
;                                   ;ifdata>(A),PC←(PC)+3+rel,and CY←1
;                                   ;ifdata=(A),PC←(PC)+3,and CY←0
;   CJNE        Rn,#data,rel        ;ifdata<(Rn),PC←(PC)+3+rel,and CY←0
;                                   ;ifdata>(Rn),PC←(PC)+3+rel,and CY←1
;                                   ;ifdata=(Rn),PC←(PC)+3,and CY←0
;   CJNE        @Ri,#data,rel       ;ifdata<((Ri)),PC←(PC)+3+rel,and CY←0
;                                   ;ifdata>((Ri)),PC←(PC)+3+rel,and CY←1
;                                   ;ifdata=((Ri)),PC←(PC)+3,and CY←0

CJNE是比较转移指令,该指令通过比较前面两个操作数的大小,如果它们的值不相等则转移,相等则继续执行。指令执行后要影响进位位CY,若操作数1小于操作数2,则CY1;若操作数1大于操作数2,则CY0

8种常用伪指令

1.ORG   16位地址                         ;此指令用在原程序或数据块的开始,指明此语句后                                                             

                                             面目标程序或数据块存放的起始地址。

2.[标号:] DB   字节数据项表             ;将项表中的字节数据存放到从标号开始的连续字                                     

                                            节单元中。例如:SEG: DB 88H,100,“7”,“C”

3.[标号:]DW   双字节数据项表            ;定义16位地址表,16地址按低位地址存低位字                                    

                                             节,高位地址存高位字节。                                     

                                             例如:TAB: DW  1234H,7BH

4.名字 EQU 表达式  或名字=表达式         ;用与给一个表达式赋值或给字符串起名字。之                                                     

                                           后名字可用做程序地址,数据地址或立即数地址                                          

                                           使用。名字必须是一字母开头的字母数字串。                                     

                                           例如:COUNT=10 或 SPACE  EQU  10H

5.名字 DATA 直接字节地址                 ;给8位内部RAM单元起个名字,名字必须是一                                        

                                           字母开头的字母数字串。同一单元可起多个名字。                                    

                                            例如:ERROR  DATA  80H

6.名字 XDATA 直接字节地址                 ;给8位外部RAM起个名字,名字规定同DATA                                    

                                              伪指令。例如:IO_PORT  XDATA  0CF04H

7.名字 BIT 位指令                        ;给一可位寻址的位单元起个名字,规定同DATA                                      

                                             伪指令。例如:SWT BIT 30H

8.[标号:] END            ;指出源程序到此结束,汇编对其后的程序语句不                   

                                        予理睬.源程序只在主程序最后使用一个END

定义指令符号

符号

说明

Rn

目前所选定的寄存器组中的R0-R7寄存器

Ri

当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)

Direct

8位直接寻址地址,可以是内存RAM地址(00H--7FH)或SFR(80H--FFH)

@Ri

通过R0或R1做间接寻址内部RAM的地址(00H--FFH)的前缀

#data

8位立即数

#data16

16位立即数,只有DPTR中才用到

Addr 16

只用在LCALL(长指令调用,三字节)和LJMP(无条件长转移指令)指令中的16位目的地地址,可寻址64K存储器中的任何地址

Addr 11

使用在ACALL(绝对调用指令,双字节)和AJMP(无条件绝对转移指令)指令中的11位目的地地址,可寻址下一个指令算起2K内的任何地址,即目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间

DPTR

数据指针

rel

有符号的8位偏移地址(Offset Address),其范围是从下一个指令算起的-128到+128字节中。负值表示地址向前推算,正值表示地址向后推算。使用在SJMP和所有条件式跳转指令中

bit

可直接位寻址的内部数据RAM(20H--2FH),其中地址范围为(00H--7FH)或特殊功能积存器(80H--FFH)

A

累加器

B

累加器,用于乘法和除法

(X)

某地址单元X中的内容

((X))

某地址单元X内存放一地址信息,此命令为寻址地址信息所指地址中存放的数据

 

MCS51汇编指令

 

指令格式(助记符)

指令功能说明

字节

周期

MOV  A,direct

(direct)→(A) 直接单元地址中的数据→累加器A

1

1

MOV  A,#data

 #data→(A)  8位立即数→累加器A

2

1

MOV  A,Rn

(Rn )→(A) Rn寄存器中的数据→累加器A

1

1

MOV  A,@Ri

((Ri))→(A) Ri中的数据指向的地址单元中的数据 →累加器A

1

1

MOV  Rn,direct

(direct)→(Rn) 直接寻址单元中的数据 —> 寄存器Rn

2

2

MOV  Rn,#data

 #data→(Rn) 8位立即数 —> 寄存器Rn

2

1

MOV  Rn,A 

(A)→(Rn) 累加器A中的数据 —> 寄存器Rn

1

1

MOV direct,direct

(direct)→(direct) 直接地址单元中的数据→直接地址单元direct

3

2

MOV direct,#data

#data→(direct) 立即数→直接地址单元direct

3

2

MOV direct,A

(A)→(direct) 累加器A中的数据→直接地址单元direct

2

2

MOV direct,Rn

(Rn)→(direct) 寄存器Rn中的数据→直接地址单元direct

2

2

MOV direct,@Ri

((Ri))→(direct) 寄存器Ri中的数据指定的地址单元中数据→直接地址单元direct

2

2

MOV  @Ri,direct

(direct)→((Ri)) 直接地址单元中的数据→以Ri中的内容为地址的RAM单元

2

2

MOV  @Ri,#data

#data→((Ri)) 立即数→以Ri中的内容为地址的RAM单元

2

1

MOV  @Ri,A

(A)→((Ri)) 累加器A中的数据→以Ri中的内容为地址的RAM单元

1

1

MOVC A,@A+DPTR

((A))+(DPTR)→(A) 表格地址单元中的数据→累加器A

3

2

MOVC  A,@A+PC

((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的数据→累加器A

1

2

MOVX  @DPTR,A

(A)→((DPTR)) 累加器中的数据→数据指针指向片外RAM地址中

3

2

MOVX  A, @DPTR

(A)→((DPTR)) 累加器中的数据 → 数据指针指向片外RAM地址中

3

2

MOVX  A, @Ri

((Ri))→(A) 寄存器Ri指向片外RAM地址中的数据→累加器A中

1

2

MOVX  @Ri,A

(A)→((Ri)) 累加器中的数据→寄存器Ri指向片外RAM地址中

1

2

PUSH  direct

(SP)+1→(SP),(direct)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中

2

2

PUSH  A

将累加器A中的数据→堆栈顶端

2

2

POP  direct

(SP)→(direct)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作

2

2

POP A

将堆栈顶端的数据→累加器A

2

2

XCH  A,Rn

(A)←→(Rn)累加器与工作寄存器Rn中的数据互换

1

1

XCH  A,@Ri

(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的数据互换

1

1

XCH  A, direct

(A)←→(direct)累加器与直接地址单元中的内容互换

2

2

XCHD  A,@Ri

(A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的数据低半字节互换

1

1

SWAP  A

(A3-0)←→(A7-4)累加器中的内容高低半字节互换

1

1

MOV DPTR,#data16

#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL

3

2

ADD  A,#data

A)+#data→(A) 累加器A中的数据与立即数#data相加,结果存在A中

ADD  A,direct

A)+(direct)→(A) 累加器A中的数据与直接地址单元中的数据相加,结果存在A中

指令格式(助记符)

指令功能说明

字节

周期

ADD  A,Rn

(A)+(Rn)→(A) 累加器A中的数据与工作寄存器Rn中的数据相加,结果存在A中

ADD  A,@Ri

(A)+((Ri))→(A) 累加器A中的数据与工作寄存器Ri所指向地址单元中的数据相加,结果存在A中

ADDC  A,direct

(A)+(direct)+(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中

SUBB  A,direct

(A)-(direct)-(C)→(A) 累加器A中的数据与直接地址单元中的数据、连同借位位相减,结果存在A中

SUBB  A,#data

(A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相减,结果存在A中

SUBB  A,Rn

(A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相减,结果存在A中

SUBB  A,@Ri

(A)-((Ri))-(C)→(A) 累加器A中的数据与工作寄存器Ri指向的地址单元中的数据、连同借位位相减,结果存在A中

MUL  AB

(A)×(B)→(A)和(B) 累加器A中的数据乘以寄存器B中的数据,结果高字节存入寄存器B,底字节存入累加器A

 DIV  AB

(A)÷(B)→(A)和(B) 累加器A中的数据除以寄存器B中的数据,结果的商存入累加器A,余数存入寄存器B中

INC  A

+1¡ú(A) 累加器A中的数据加1,结果存在A中

INC  direct

(direct)+1→(direct) 直接地址单元中的数据加1,结果送回原地址单元中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作

INC  @Ri

((Ri))+1→((Ri)) 寄存器的数据指向的地址单元中的数据加1,结果送回原地址单元中

NC  Rn 

Rn)+1→(Rn)寄存器Rn的数据加1,结果送回原地址单元

INC  DPTR

(DPTR)+1→(DPTR)数据指针的数据加1,结果送回数据指针中

DEC  A

(A)-1→(A)累加器A中的数据减1,结果送回累加器A

DEC  direct

(direct)-1→(direct)直接地址单元中的数据减1,结果送回直接地址单元中

DEC  @Ri

((Ri))-1→((Ri))寄存器Ri指向的地址单元中的数据减1,结果送回原地址单元中

DEC  Rn

(Rn)-1→(Rn)寄存器Rn中的数据减1,结果送回寄存器Rn中

DA  A

累加器A中的数据做BCD调整

RL  A

累加器A中的数据左移一位,bit7¡úbit0

RR  A

累加器A中的数据右移一位,bit7¡úbit7

RLC  A

累加器A中的数据连同进位标志位CY左移一位,bit7¡úCY,CY¡úbit0

RRC  A

累加器A中的数据连同进位CY位CY右移一位,bi0¡úCY,CY¡úbit7

SWAP  A 

累加器中的数据高低半字节互换

CPL  A

累加器中的数据按位取反,即0¡ú1,1¡ú0

CLR  A

0¡ú(A),累加器中的数据清0H

ANL  A,direct

累加器A中的数据和直接地址单元中的数据执行与操作。结果存在寄存器A中

ANL  direct,#data

直接地址单元中的数据和立即数执行与操作。结果存在直接地址单元中

指令格式(助记符)

指令功能说明

字节

周期

NL  A,#data

累加器A的数据和立即数执行与操作。结果存在累加器A中

NL  A,Rn

累加器A的数据和寄存器Rn中的数据执行与操作。结果存在累加器A中

ANL  direct,A

直接地址单元中的数据和累加器A的数据执行与操作。结果存在直接地址单元中

ANL  A,@Ri

累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行与操作。结果存在累加器A中

ORL  A,direct

累加器A中的数据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中

ORL  direct,#data

累加器A中的数据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中

ORL  A,#data

累加器A的数据和立即数执行逻辑或操作。结果存在累加器

ORL  A,Rn

累加器A的数据和寄存器Rn中的数据执行逻辑或操作。结果存在累加器A中

ORL  direct,A

直接地址单元中的数据和累加器A的数据执行逻辑或操作。结果存在直接地址单元中

ORL  A,@Ri

累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行逻辑或操作。结果存在累加器A中

XRL  A,direct

累加器A中的数据和直接地址单元中的数据执行逻辑异或操作。结果存在寄存器A中

XRL  direct,#data

直接地址单元中的数据和立即数执行逻辑异或操作。结果存在直接地址单元中

XRL  A,#data

累加器A的数据和立即数执行逻辑异或操作。结果存在累加器A中

XRL  A,Rn

累加器A的数据和寄存器Rn中的数据执行逻辑异或操作。结果存在累加器A中

XRL  data,A

直接地址单元中的数据和累加器A的数据执行逻辑异或操作。结果存在直接地址单元中

XRL  A,@Ri

累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行逻辑异或操作。结果存在累加器A中

CLR C

清除进位标志CY为0

1

1

CLR bit

清除bit为0

2

1

SETB C

设定进位标志CY为1

1

1

SETB bit

设定bit为1

2

1

CPL C

将进位标志CY反相

1

1

CPL bit

将bit反相

2

1

ANL C,bit

将进位标志CY AND bit值¡ú进位标志位CY

2

2

ANL C,/bit

将进位标志CY AND bit反相值¡ú进位标志位CY

2

2

ANL A,#data

将累加器A的各位与立即数的相对位置做AND¡úA累加器

2

2

ORL C,bit

将进位标志CY OR bit值¡ú进位标志位CY

2

2

ORL C,/bit

将进位标志CY OR bit反相值¡ú进位标志位CY

2

2

ORL A,#data

将累加器A的各位与立即数的相对位置做OR¡úA累加器

2

2

MOV C,bit

将bit值¡ú进位标志位CY

2

1

MOV bit,C

将进位标志位CY¡úbit值

2

2

JC rel

当进位标志位CY=1就跳至rel,否则执行下一条指令

2

2

JNC rel

当进位标志位CY=0就跳至rel,否则执行下一条指令

2

2

JB bit rel

当进bit=1就跳至rel,否则执行下一条指令

3

3

JNB bit rel

当进bit=0就跳至rel,否则执行下一条指令

3

3

JBC bit rel

当进bit=1跳至rel,并且清除此bit为0,否则执行下一条指令

3

3

ACALL addr11

2K范围内子程序调用

2

2

LCALL addr16

64K范围内子程序调用

3

3

RET

子程序返回

1

2

RET1

中断服务程序结束返回

1

2

指令格式(助记符)

指令功能说明

字节

周期

AJMP addr11

2K范围内无条件跳转

2

2

LJMP addr16

64K范围内无条件跳转

2

2

SJMP rel

在此指令的前128或后128范围内无条件跳转

2

2

JMP @A+DPTR

跳至@A+DPTR所指定的地址

1

2

JZ rel

如A的内容为0,则短跳转,负责执行下一条指令

2

2

JNZ rel

如A的内容不为0,则短跳转,负责执行下一条指令

2

2

CJNE A,direct,rel

如A的内容与直接地址内的数据不同,则短跳转

3

2

CJNE A,#data,rel

如A的内容与立即数不同,则短跳转

3

2

CJNE Rn,#data,rel

如Rn寄存器中的数据与立即数不同,则短跳转

3

2

CJNE @Ri,#data,rel

如间接地址的数据与立即数不同,则短跳转

3

2

DJNZ Rn,rel

Rn寄存器中的数据减1,若不为0,则短跳转,否则执行下条指令

2

2

DJNZ direct,rel

直接地址中的数据减1,若不为0,则短跳转,负责执行下条指令

3

2

NOP

CPU仅仅作取指令,不动作

1

1

 

 




关键词: 绘编     基本     指令     direct     #data     执行         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]