返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

MCS-51指令详解

 ;说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数 及;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的<<MCS-51八位高档单片计算机及其应用>>一书145页指令手册查看,更详细资料请阅 第四章 MCS-51指令系统" 及124页指令系统摘要。并在仿真器上装入;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。

        ORG     0000H

        NOP                 ;空操作指令

        AJMP    L0003   ;绝对转移指令

L0003:  LJMP    L0006   ;长调用指令

L0006:  RR      A       ;累加器A内容右移 (先置A为88H)

      INC     A           ; 累加器A 内容加1

       INC     01H     ;直接地址(字节01H)内容加1

       INC     @R0     ; R0的内容 (为地址) 的内容即间接RAM加1

                        ;(设R0=02H,02H=03H,单步执行后02H=04H)

       INC     @R1     ; R1的内容 (为地址) 的内容即间接RAM加1

                         ;(设R1=02H,02H=03H,单步执行后02H=04H)

       INC     R0      ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少)

       INC     R1      ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少)

        INC     R2      ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少)

       INC     R3      ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少)

        INC     R4      ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少)

        INC     R5      ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少)

        INC     R6      ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少)

        INC     R7      ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少)

        JBC     20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位

L0017:         ACALL   S0019   ;绝对调用

S0019:  LCALL   S001C   ;长调用

S001C:  RRC     A       ;累加器A的内容带进位位右移(设A=11H,C=0

                         ;单步执行后查A和C内容为多少)

        DEC     A       ;A的内容减1

        DEC     01H     ;直接地址(01H)内容减1

        DEC     @R0     ;R0间址减1,即R0的内容为地址,该地址的内容减1

        DEC     @R1     ; R1间址减1

        DEC     R0      ; R0内容减1

        DEC     R1      ; R1内容减1

        DEC     R2      ; R2内容减1

        DEC     R3      ; R3内容减1

        DEC     R4      ; R4内容减1

        DEC     R5      ; R5内容减1

        DEC     R6      ; R6内容减1

        DEC     R7      ; R7内容减1

        JB      20H,L002D;如果位(20H,即24H的0位)为1则转移

L002D:  AJMP    L0017    ;绝对转移

        RET                 ;子程序返回指令

        RL      A       ;A左移

        ADD     A,#01H  ;A的内容与立即数(01H)相加

        ADD     A,01H   ; A的内容与直接地址 (01H内容)相加

        ADD     A,@R0   ; A的内容与寄存器R0的间址内容相加

        ADD     A,@R1   ; A的内容与寄存器R1的间址内容相加

        ADD     A,R0        ; A的内容与寄存器R0的内容相加

        ADD     A,R1        ; A的内容与寄存器R1的内容相加

        ADD     A,R2        ; A的内容与寄存器R2的内容相加

        ADD     A,R3        ; A的内容与寄存器R3的内容相加

        ADD     A,R4        ; A的内容与寄存器R4的内容相加

        ADD     A,R5        ; A的内容与寄存器R5的内容相加

        ADD     A,R6        ; A的内容与寄存器R6的内容相加

        ADD     A,R7        ; A的内容与寄存器R7的内容相加

        JNB     30H,L0041   ;直接位(30H)为0相对转移

L0041:  ACALL   S0100   ;绝对调用

        RETI                ;中断返回指令

        RLC     A       ;带进位位左移

        ADDC    A,#02H  ;A带进位位与立即数(#02H)相加

        ADDC    A,02H   ; A带进位位与直接地扯(02H内容)相加

        ADDC    A,@R0   ; A带进位位与R0间扯内容相加

        ADDC    A,@R1   ; A带进位位与R1间扯内容相加

        ADDC    A,R0        ; A带进位位与R0内容相加

        ADDC    A,R1        ; A带进位位与R1内容相加

        ADDC    A,R2        ; A带进位位与R2内容相加

        ADDC    A,R3        ; A带进位位与R3内容相加

        ADDC    A,R4        ; A带进位位与R4内容相加

        ADDC    A,R5        ; A带进位位与R5内容相加

        ADDC    A,R6        ; A带进位位与R6内容相加

        ADDC    A,R7        ; A带进位位与R7内容相加

        JC      L0095   ;进位为1转移

        NOP                

        AJMP    L0017   ;绝对转移

        ORL     02H,A   ;直接地址内容与A或

        ORL     02H,#02H    ; 直接地址内容与立即数或

        ORL     A,#44H  ;A与立即数或

        ORL     A,02H   ; A与直接地址内容或

        ORL     A,@R0   ; A与R0间址内容或

        ORL     A,@R1   ; A与R1间址内容或

        ORL     A,R0        ; A与R0内容或

        ORL     A,R1        ; A与R1内容或

        ORL     A,R2        ; A与R2内容或

        ORL     A,R3        ; A与R3内容或

        ORL     A,R4        ; A与R4内容或

        ORL     A,R5        ; A与R5内容或

        ORL     A,R6        ; A与R6内容或

        ORL     A,R7        ; A与R7内容或

        JNC     L0017   ;进位为0转移

        ACALL   L0017   ;绝对调用

        ANL     02H,A   ; 直接地址与A与

        ANL     02H,#02H    ; 立即数与直接地址与

        ANL     A,#02H  ; A与立即数与

        ANL     A,02H   ;A与直接地址与

        ANL     A,@R0   ; A与R0间址与

        ANL     A,@R1   ; A与R1间址与

        ANL     A,R0        ; A与R0与

        ANL     A,R1        ; A与R1与

        ANL     A,R2        ; A与R2与

        ANL     A,R3        ; A与R3与

        ANL     A,R4        ; A与R4与

        ANL     A,R5        ; A与R5与

        ANL     A,R6        ; A与R6与

        ANL     A,R7        ; A与R7与

        JZ      L0084   ;A为零转移

L0084:  AJMP    L0017   ;绝对转移

        XRL     01H,A   ;直接地址与A异或

        XRL     02H,#01H    ; 直接地址与立即数异或

        XRL     A,#01H  ;A与立即数异或

        XRL     A,01H   ; A与直接地址异或

        XRL     A,@R0   ; A与R0间址址异或

        XRL     A,@R1   ; A与R1间址址异或

        XRL     A,R0        ; A与R0异或

        XRL     A,R1        ; A与R1异或

        XRL     A,R2        ; A与R2异或

        XRL     A,R3        ; A与R3异或

        XRL     A,R4        ; A与R4异或

L0095:  XRL     A,R5        ; A与R5异或

        XRL     A,R6        ; A与R6异或

        XRL     A,R7        ; A与R7异或

        JNZ     L0084   ;A不为零转

L009A:  ACALL   L0084   ;绝对调用

        ORL     C,01H   ;直接位或到进位

        JMP     @A+DPTR;相对于DPTR间接转

        MOV     A,#01H  ;立即数送A

        MOV     01H,#02H    ;立即数送直接地址

        MOV     @R0,#01H    ;立即数送间址R0

        MOV     @R1,#02H    ; 立即数送间址R1

        MOV     R0,#01H ; 立即数送R0

        MOV     R1,#01H ; 立即数送R1

        MOV     R2,#01H ; 立即数送R2

        MOV     R3,#01H ; 立即数送R3

        MOV     R4,#01H ; 立即数送R4

        MOV     R5,#01H ; 立即数送R5

        MOV     R6,#01H ; 立即数送R6

        MOV     R7,#01H ; 立即数送R7

        SJMP    L00BA   ;短转移

L00BA:  AJMP    L0095   ;绝对转移

        ANL     C,02H   ;直接地址与进位与

        ORG     00C0H   ;

        MOV     02H,01H ;直接地址送直接地址

        MOV     01H,@R0;间址R0送直接地址

        MOV     01H,@R1; 间址R1送直接地址

        MOV     01H,R0  ; R0送直接地址

        MOV     01H,R1  ; R1送直接地址

        MOV     01H,R2  ; R2送直接地址

        MOV     01H,R3  ; R3送直接地址

        MOV     01H,R4  ; R4送直接地址

        MOV     01H,R5  ; R5送直接地址

        MOV     01H,R6  ; R6送直接地址

        MOV     01H,R7  ; R7送直接地址

        NOP    

        MOV     DPTR,#1234H;建立数据指针地址为1234H

        ACALL   L00BA   ;绝对调用

        MOV     03H,C   ;进位送03H位(即20H的03位)

        MOVC    A,@A+DPTR   ;由A+DPTR寻扯的程序存贮器字节送A

        SUBB    A,#01H  ;A减去立即数和进位位

        SUBB    A,02H   ; A减去直接地址内容和进位位

        SUBB    A,@R0   ; A减去R0间接RAM和进位位

        SUBB    A,@R1   ; A减去R1间接RAM和进位位

        SUBB    A,R0        ; A减去R0和进位位

        SUBB    A,R1        ; A减去R1和进位位

        SUBB    A,R2        ; A减去R2和进位位

        SUBB    A,R3        ; A减去R3和进位位

        SUBB    A,R4        ; A减去R4和进位位

        SUBB    A,R5        ; A减去R5和进位位

        SUBB    A,R6        ; A减去R6和进位位

        SUBB    A,R7        ; A减去R7和进位位

        ORL     C,/00H  ;直接位的反或到进位

        AJMP    L0084   ;绝对转移

        MOV     C,03H   ;直接位数送进位

        INC     DPTR        ;数据指针加1

        MUL     AB      ;A乘以B

        NOP               ;A5H为二字节空操作指令

        NOP

        MOV     @R0,05H ;直接字芯送R0间接RAM

        MOV     @R1,05H ; 直接字芯送R1间接RAM

        MOV     R0,05H  ; 直接字芯送R0

        MOV     R1,05H  ; 直接字芯送R1

S0100:  MOV     R2,05H  ; 直接字芯送R2

        MOV     R3,05H  ; 直接字芯送R3

        MOV     R4,05H  ; 直接字芯送R4

        MOV     R5,05H  ; 直接字芯送R5

        MOV     R6,05H  ; 直接字芯送R6

        MOV     R7,05H  ; 直接字芯送R7

        ANL     C,/04H  ; 直接位的反与到进位

        ACALL   S0100   ;绝对调用

        CPL     04H     ;直接位取反

        CPL     C       ;进位取反

        CJNE    A,#01H,L0139    ;立即数与A比较,不相等则转移

        CJNE    A,01H,L0139     ; 直接字节与A比较,不相等则转移

        CJNE    @R0,#01H,L0139  ; 立即数与R0间接RAM比较,不相等则转移

        CJNE    @R1,#01H,L0139  ; 立即数与R1间接RAM比较,不相等则转移

        CJNE    R0,#01H,L0139   ; 立即数与R0比较,不相等则转移

        CJNE    R1,#01H,L0139   ; 立即数与R1比较,不相等则转移

        CJNE    R2,#01H,L0139   ; 立即数与R2比较,不相等则转移

        CJNE    R3,#01H,L0139   ; 立即数与R3比较,不相等则转移

        CJNE    R4,#01H,L0139   ; 立即数与R4比较,不相等则转移

        CJNE    R5,#01H,L0139   ; 立即数与R5比较,不相等则转移

        CJNE    R6,#01H,L0139   ; 立即数与R6比较,不相等则转移

        CJNE    R7,#01H,L0139   ; 立即数与R7比较,不相等则转移

        PUSH    00H     ;直接字节进栈,SP加1

L0139:  AJMP    L0084   ;绝对转移

        CLR     04H     ;直接位清零

        CLR     C       ;清零进位

        SWAP    A       ;A左环移四位(A的二个半字节交换)

        XCH     A,05H   ;交换A和直接字节

        XCH     A,@R0   ; 交换A和R0间接RAM

        XCH     A,@R1   ; 交换A和R1间接RAM

        XCH     A,R0        ; 交换A和R0

        XCH     A,R1        ; 交换A和R1

        XCH     A,R2        ; 交换A和R2

        XCH     A,R3        ; 交换A和R3

        XCH     A,R4        ; 交换A和R4

        XCH     A,R5        ; 交换A和R5

        XCH     A,R6        ; 交换A和R6

        XCH     A,R7        ; 交换A和R7

        POP     00H     ;直接字节出栈,SP减1

        ACALL   L0139   ;绝对调用

        SETB    03H     ;置位直接位

        SETB    C       ;置位进位

        DA      A       ;A的十进制加法调熊

        DJNZ    01H,L0139       ;直接字节减1,不为零则转移

        XCHD    A,@R0   ;交换A和R0间接RAM的低4位

        XCHD    A,@R1   ; 交换A和R1间接RAM的低4位

L0158:  DJNZ    R0,L0139                ; R0减1,不为零则转移

        DJNZ    R1,L0158                ; R1减1,不为零则转移

        DJNZ    R2,L0158                ; R2减1,不为零则转移

        DJNZ    R3,L0158                ; R3减1,不为零则转移

        DJNZ    R4,L0158                ; R4减1,不为零则转移

        DJNZ    R5,L0158                ; R5减1,不为零则转移

        DJNZ    R6,L0158                ; R6减1,不为零则转移

        DJNZ    R7,L0158                ; R7减1,不为零则转移

        MOVX    A,@DPTR     ;外部数据(16位地址)送A

L0169:  NOP    

        AJMP    L0139           ;绝对转移

        MOVX    A,@R0       ;R0间址即外部数据(8位地址)送A

        MOVX    A,@R1       ; R1间址即外部数据(8位地址)送A

        CLR     A           ;清零A

        MOV     A,05H       ;直接字节送A

        MOV     A,@R0       ;R0间接RAM送A

        MOV     A,@R1       ; R1间接RAM送A

        MOV     A,R0        ; R0送A

        MOV     A,R1        ; R1送A

        MOV     A,R2        ; R2送A

        MOV     A,R3        ; R3送A

        MOV     A,R4        ; R4送A

        MOV     A,R5        ; R5送A

        MOV     A,R6        ; R6送A

        MOV     A,R7        ; R7送A

        MOVX    @DPTR,A     ;A送外部数据(16位地址)

        NOP    

        ACALL   L0169   ;绝对调用

        MOVX    @R0,A   ;A送R0间址即外部数据(8位地址)

        MOVX    @R1,A   ; A送R1间址即外部数据(8位地址)

        CPL     A       ;A取反

        MOV     05H,A   ;A送直接字节

        MOV     @R0,A   ; A送R0间址即间接RAM

        MOV     @R1,A   ; A送R1间址即间接RAM

        MOV     R0,A        ; A送R0

        MOV     R1,A        ; A送R1

        MOV     R2,A        ; A送R2

        MOV     R3,A        ; A送R3

        MOV     R4,A        ; A送R4

        MOV     R5,A        ; A送R5

        MOV     R6,A        ; A送R6

        MOV     R7,A        ; A送R7

        END

51的汇编控制指令详细列表
 
8051 INSTRUCTION SET

1.Arithmetic operations:
   
    Mnemonic            Byte    Cyc
    ADD   A,@Ri 1 1
    ADD   A,Rn 1 1        
    ADD   A,direct 2 1        
    ADD   A,#data 2 1        
    ADDC  A,@Ri 1 1           
    ADDC  A,Rn 1 1     
    ADDC  A,direct 2 1           
    ADDC  A,#data 2 1     
    SUBB  A,@Ri 1 1     
    SUBB  A,Rn 1 1     
    SUBB  A,direct 2 1     
    SUBB  A,#data 2 1     
    INC   A 1 1
    INC   @Ri 1 1
    INC   Rn 1 1
    INC   DPTR 1 1
    INC   direct 2 1
    INC   direct 2 1
    DEC   A 1 1
    DEC   @Ri 1 1
    DEC   Rn 1 1
    DEC   direct 2 1
    MUL    AB 1 4
    DIV   AB 1 4
    DA      A 1 1

8051的汇编控制指令,占用字节,执行周期列表

3.Data transfer:
    Mnemonic            Byte Cyc
    MOV   A,@Ri 1 1
    MOV   DPTR,#data16 3 2
    MOV   A,Rn 1 1
    MOVC  A,@A+DPTR 1 2
    MOV   A,direct          2 1   
    MOVC  A,@A+PC          1 2
    MOV   A,#data          2 1    
    MOVX  A,@Ri 1 2
    MOV   @Ri,A 1 1
    MOVX  A,@DPTR          1 2
    MOV   @Ri,direct 2 2   
    MOVX  @Ri,A 1 2
    MOV   @Ri,#data 2 1   
    MOVX  @DPTR,A          1 2
    MOV   Rn,A 1 1    
    PUSH  direct          2 2
    MOV   Rn,direct 2 2    
    POP   direct          2 2
    MOV   Rn,#data          2 1  
    XCH   A,@Ri 1 1
    MOV   direct,A     2 1   
    XCH   A,Rn 1 1
    MOV   direct,@Ri 2 2   
    XCH   A,direct   2 1
    MOV   direct,Rn 2 2   
    XCHD  A,@Ri 1 1
    MOV   direct,direct     3 2
    MOV   direct,#data 3 2

8051的汇编控制指令,占用字节,执行周期列表2.

Logical opreations:
    ANL   A,@Ri 1 1
    XRL   A,@Ri 1 1
    ANL   A,Rn 1 1
    XRL   A,Rn 1 1
    ANL   A,direct          2 1
    XRL   A,direct   2 1
    ANL   A,#data          2 1   
    XRL   A,#data          2 1
    ANL   direct,A   2 1   
    XRL   direct,A          2 1
    ANL   direct,#data 3 2
    XRL   direct,#data 3 2
    ORL   A,@Ri 1 1
    CLR   A 1 1
    ORL   A,Rn 1 1
    CPL   A 1 1
    ORL   A,direct  2 1    
     RL   A 1 1
    ORL   A,#data 2 1
    RLC   A 1 1
    ORL   direct,A 2 1  
    RR   A 1 1
    ORL   direct,#data 3 2
    RRC   A 1 1
    SWAP  A 1 1

8051的汇编控制指令,占用字节,执行周期列表4.Boolean variable manipulation:
    Mnemonic            Byte Cyc
    CLR   C 1 1
    ANL   C,bit 2 2
    SETB  C 1 1
    ANL   C,/bit          2 2
    CPL   C 1 1  
   ORL   C,bit 2 2
    CLR   bit 2 1
    ORL   C,/bit          2 2
    SETB  bit 2 1  
   MOV   C,bit 2 1
    CPL   bit 2 1  
   MOV   bit,C 2 2

8051的汇编控制指令,占用字节,执行周期列表

5.Program and machine control:
    Mnemonic            Byte Cyc
    NOP 1 1
    JZ    rel 2 2
    RET 1 2
    JNZ   rel 2 2
    RETI          1 2  
    JC    rel 2 2
    ACALL addr11          2 2   
    JNC   rel 2 2
    AJMP  addr11     2 2     
    JB    bit,rel          3 2
    LCALL addr16          3 2   
    JNB   bit,rel          3 2
    LJMP  addr16          3 2  
    JBC   bit,rel          3 2
    SJMP  rel 2 2  
   CJNE  A,direct,rel 3 2
    JMP   @A+DPTR          1 2
    CJNE  A,#data,rel 3 2
    DJNZ  Rn,rel          2 2  
   CJNE  @Ri,#data,rel 3 2
    DJNZ  direct,rel 3 2  
   CJNE  Rn,#data,rel 3 2