精华内容
下载资源
问答
  • 在进行汇编程序设计时,MSP430的指令系统是程序的主体,但为了方便程序编制,还定义了一些指令,这些指令不参与和影响程序的执行,也不在计算机中运行,这类指令称为伪指令。 一般汇编器伪指令能帮助用户完成以下...

        在进行汇编程序设计时,MSP430的指令系统是程序的主体,但为了方便程序编制,还定义了一些指令,这些指令不参与和影响程序的执行,也不在计算机中运行,这类指令称为伪指令。

    一般汇编器伪指令能帮助用户完成以下事情:

    ·将代码和数据汇编到规定的段中

    ·在存储器中用未初始化的变量保留空间

    ·控制汇编后列表文件的格式

    ·初始化存储器

    ·汇编条件块

    ·定义全局变量

    ·规定汇编器可以从中获得宏的库

    ·产生符号化的调试信息

    模块控制伪指令:

    NAME,PROGRAM—程序模块的开始

    MODULE,LIBRARY—库模块的开始

    ENDMOD—当前汇编模块的结束

    END—汇编文件的结束

    符号控制伪指令:EXTERN(IMPORT)-引入外部符号PUBLIC(EXPORT)-输出符号

    段控制伪指令: ASEG—绝对段的开始RSEG—相对段的开始STACK—定义堆栈 段COMMON—定义公共段ORG—定位指针ALIGN—校准PC
    EVEN—PC对准偶地址

    数值分配伪指令:

    SET(ASSIGN,VAR)—赋临时值

    EQU(=)—赋永久值,当前模块内有效

    DEFINE—定义文件内有效的值

    数据定义与分配伪指令::

    DB—定义字节(8bit)

    DW—定义字(16bit)

    DL—定义32bit整数

    DF—定义32bit float

    DS n—定义n个连续的字节

    DC8 DB 生成(8位)常量/字符串

    DC16 DW 生成(16位)常量

    DC32 DL 生成32位常量

    DC64 生成32位常量

    DF32 DF 生成32位浮点常量

    DF64 生成64位浮点常量

    .double 生成48位TI格式的 浮点常量

    .float 生成32位TI格式的 浮点常量

    DS8 DS 分配8位整数空间DS16 DS 2 分配16位整数空间
    DS32 DS 4 分配32位整数空间
    DS64 DS 8 分配64位整数空间

     MSP430汇编指令集

    http://wenku.baidu.com/view/62e1336bb84ae45c3b358cfe.html

    http://wenku.baidu.com/view/6a27141ca300a6c30c229f4a.html?from=related&hasrec=1

    MCS-51指令详解

    http://www.51c51.com/web/zhilin.htm

     ;说明:为了使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 SET1.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

    展开全文
  • 单片机汇编指令

    千次阅读 2017-01-16 13:33:17
    一个单片机所需执行指令的集合即为单片机指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码, 单片机才能执行之。现在有很多半导体厂商都推出了自己的...

    http://lib.csdn.net/article/embeddeddevelopment/57614

    一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码, 单片机才能执行之。现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不 完全相同。但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。

    所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。但单片机并 不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识 别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。所以现在基本上都不会直接使用机器语言来编写单片机的程序。最好的办法就是使用易于阅读和辨 认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英 文单词和拼音字母来表示。

    每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。

    MCS-51共有111条指令,可分为5类:

    [1].数据传送类指令(共29条)

    [2].算数运算类指令(共24条)

    [3].逻辑运算及移位类指令(共24条)

    [4].控制转移类指令(共17条)

    [5].布尔变量操作类指令(共17条)

    一些特殊符号的意义

    在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。

    Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。

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

    direct—内部数据存储单元的8位地址。包含0—127(255)内部存储单元地址和特殊功能寄存地址。

    #data—指令中的8位常数。

    #data16—指令中的16位常数。

    addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。

    #addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。

    rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。

    @—间接寄存器寻址或基址寄存器的前缀。

    /—为操作的前缀,声明对该位操作书取反。

    DPTR—数据指针。

    bit—内部RAM和特殊功能寄存器的直接寻址位。

    A—累加器。

    B—累加器B。用于乘法和除法指令中。

    C—进位标志位。

    (x)—某地址单元中的内容。

    ((x))—由X寻址单元中的内容。

    MCS-51的寻址方式

    寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?最易想到的就是告诉CPU操作数所在的地址 单元,从那里可取得响应的操作数,这便是“寻址”之意。MCS-51的寻址方式很多,使用起来也相当方便,功能也很强大,灵活性强。这便是MCS-51指 令系统“好用”的原因之一。下面我们分别讨论几种寻址方式的原理。

    [1].直接寻址

    指令中操作数直接以单元地址形式出现,例如:

    MOV A,68H

    这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于 内部RAM进行寻址。低128位单元在指令中直接以单元地址的形式给出。对于特殊功能寄存器可以使用其直接地址进行访问,还可以以它们的符号形式给出,只 是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。

    [2].寄存器寻址

    寄存器寻址对选定的8个工作寄存器R0-R7进行操作,也就是操作数在寄存器中,因此指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来表示寄存器,例如:

    MOV A,R1

    这条指令的意义是把所用的工作寄存器组中的R1的内容送到累加器A中。

    值得一提的是工作状态寄存器的选择是通过程序状态字寄存器来控制的,在这条指令前,应通过PSW设定当前工作寄存器组。

    [3].寄存器间接寻址

    寄存器寻址方式,寄存器中存放的是操作数,而寄存器间接寻址方式,寄存器中存放的则为操作数的地址,也即操作数是通过寄存器指向的地址单元得到的,这便是寄存器间接寻址名称的由来。

    例如指令:

    MOV A,@R0

    这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。假如R0=#56H,那么是将56H单元中的数据送到累加器A中。

    寄存器间接寻址方式可用于访问内部RAM或外部数据存储器。访问内部RAM或外部数据存储器的低256字节时,可通过R0和R1作为间接寄存器。然而有必要指出,内部RAM的高128字节地址与专用积存器的地址是重叠的,所以这种寻址方式不能用于访问特殊功能寄存器。

    外部数据存储器的空间为64kB,这时可采用DPTR作为间址寄存器进行访问,指令如下:

    MOVX A,@DPTR

    这条指令的意义是与上述类似,不再赘述。

    [4].立即寻址

    立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数,因此而得名。为了与直接寻址方式相区别,在立即数前加上“#”符号,例如:

    MOVX A,#0EH

    这条指令的意义是将0EH这个操作数送到累加器A中。

    [5].变址寻址

    变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成16位地址形成操作数的实际地址。例如:

    MOV A,@A+DPTR

    MOVX A,@A+PC

    JMP @A+DPTR

    在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。其中前两条是程序存储器读指令,后一条是无条件转移指令。

    [6].位寻址

    在MCS-51单片机中,RAM中的20H—2FH字节单元对应的位地址为00H—7FH,特殊功能寄存器中的某些位也可进行为寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。

    [7].相对寻址

    相对寻址方式是为了程序的相对转移而设计的,其夜里是以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。转移的目的地址可参见如下表达式:

    目的地址=转移指令地址+转移指令字接数+偏移量

    值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128—+127之间。

    MCS-51数据传送指令

    数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进 行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影 响。

    [1]. 以累加器A为目的操作数类指令(4条)

    这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:

    MOV A,data ;(data)→(A)直接单元地址中的内容送到累加器A

    MOV A,#data ;#data→(A)立即数送到累加器A中

    MOV A,Rn ;(Rn)→(A) Rn中的内容送到累加器A中

    MOV A,@Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A

    [2]. 以寄存器Rn为目的操作数的指令(3条)

    这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:

    MOV Rn,data ;(data)→(Rn)直接寻址单元中的内容送到寄存器Rn中

    MOV Rn,#data ;#data→(Rn)立即数直接送到寄存器Rn中

    MOV Rn,A ;(A)→(Rn)累加器A中的内容送到寄存器Rn中

    [3]. 以直接地址为目的操作数的指令(5条)

    这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:

    MOV data,data ;(data)→(data)直接地址单元中的内容送到直接地址单元

    MOV data,#data ;#data→(data)立即数送到直接地址单元

    MOV data,A ;(A)→(data)累加器A中的内容送到直接地址单元

    MOV data,Rn ;(Rn)→(data)寄存器Rn中的内容送到直接地址单元

    MOV data,@Ri ;((Ri))→(data)寄存器Ri中的内容指定的地址单元中数据送到直接地址单元

    [4]. 以间接地址为目的操作数的指令(3条)

    这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:

    MOV @Ri,data ;(data)→((Ri))直接地址单元中的内容送到以Ri中的内容为地址的RAM单元

    MOV @Ri,#data ;#data→((Ri))立即数送到以Ri中的内容为地址的RAM单元

    MOV @Ri,A ;(A)→((Ri))累加器A中的内容送到以Ri中的内容为地址的RAM单元

    [5]. 查表指令(2条)

    这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:

    MOVC A,@A+DPTR ;((A))+(DPTR)→(A)表格地址单元中的内容送到累加器A中

    MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A)表格地址单元中的内容送到累加器A中

    [6]. 累加器A与片外数据存储器RAM传送指令(4条)

    这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:

    MOVX @DPTR,A ;(A)→((DPTR))累加器中的内容送到数据指针指向片外RAM地址中

    MOVX A, @DPTR ;((DPTR))→(A)数据指针指向片外RAM地址中的内容送到累加器A中

    MOVX A, @Ri ;((Ri))→(A)寄存器Ri指向片外RAM地址中的内容送到累加器A中

    MOVX @Ri,A ;(A)→((Ri))累加器中的内容送到寄存器Ri指向片外RAM地址中

    [7]. 堆栈操作类指令(2条)

    这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一 条常称为入栈操作指令,第二条称为出栈操作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈 的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。

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

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

    [8]. 交换指令(5条)

    这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。

    XCH A,Rn ;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换

    XCH A,@Ri ;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换

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

    XCHD A,@Ri ;(A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换

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

    [9]. 16位数据传送指令(1条)

    这条指令的功能是把16位常数送入数据指针寄存器。

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

    MCS-51算术运算指令

    算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和 调整,我们都归类为运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的 运算。同时利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。这在使用中 应特别注意。

    [1]. 加法指令(4条)

    这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。

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

    ADD A,data ;(A)+(data)→(A)累加器A中的内容与直接地址单元中的内容相加,结果存在A中

    ADD A,Rn ;(A)+(Rn)→(A)累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中

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

    [2]. 带进位加法指令(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中

    [3]. 带借位减法指令(4条)

    这组指令包含立即数、直接地址、间接地址及工作寄存器与累加器A连同借位位C内容相减,结果送回累加器A中。

    这里我们对借位位C的状态作出说明,在进行减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结 果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道借位标志位C的状态,则应先对CY进行清零操作。

    SUBB A,data ;(A)-(data) - (C)→(A)累加器A中的内容与直接地址单元中的内容、连同借位位相减,结果存在A中

    SUBB A,#data ;(A)-#data -(C)→(A)累加器A中的内容与立即数、连同借位位相减,结果存在A中

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

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

    [4]. 乘法指令(1条)

    这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个结果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,说明乘积大于FFH,否则OV=0,但进位标志位CY总是等于0。

    MUL AB ;(A)×(B)→(A)和(B)累加器A中的内容与寄存器B中的内容相乘,结果存在A、B中

    [5]. 除法指令(1条)

    这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。如果OV=1,表明寄存器B中的内容为00H,那么执行结果为不确定值,表示除法有溢出。

    DIV AB ;(A)÷(B)→(A)和(B)累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。

    [6]. 加1指令(5条)

    这5条指令的的功能均为原寄存器的内容加1,结果送回原寄存器。上述提到,加1指令不会对任何标志有影响,如果原寄存器的内容为FFH,执行加1后,结果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址方式:

    INC A ;(A)+1→(A)累加器A中的内容加1,结果存在A中

    INC data ;(data)+1→(data)直接地址单元中的内容加1,结果送回原地址单元中

    INC @Ri ;((Ri))+1→((Ri))寄存器的内容指向的地址单元中的内容加1,结果送回原地址单元中

    INC Rn ;(Rn)+1→(Rn)寄存器Rn的内容加1,结果送回原地址单元中

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

    在INC data这条指令中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作。

    [7]. 减1指令(4条)

    这组指令的作用是把所指的寄存器内容减1,结果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算结果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址方式,当直接地址是I/O口锁存器时,“读—修改—写”操作与加1指令类似。

    DEC A ;(A)-1→(A)累加器A中的内容减1,结果送回累加器A中

    DEC data ;(data)-1→(data)直接地址单元中的内容减1,结果送回直接地址单元中

    DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,结果送回原地址单元中

    DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的内容减1,结果送回寄存器Rn中

    [8]. 十进制调整指令(1条)

    在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功能是将执行加法运算后存于累加器A中的结果进行调整和修正。

    DA A

    MCS-51逻辑运算及移位指令

    逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。这类指令一般不影响程序状态字(PSW)标志。

    [1]. 循环移位指令(4条)

    这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。

    RL A ;累加器A中的内容左移一位

    RR A ;累加器A中的内容右移一位

    RLC A ;累加器A中的内容连同进位位CY左移一位

    RRC A ;累加器A中的内容连同进位位CY右移一位

    [2]. 累加器半字节交换指令(1条)

    这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。

    SWAP A ; 累加器中的内容高低半字节互换

    [3]. 求反指令(1条)

    这条指令将累加器中的内容按位取反。

    CPL A ; 累加器中的内容按位取反

    [4]. 清零指令(1条)

    这条指令将累加器中的内容清0。

    CLR A ; 0→(A),累加器中的内容清0

    [5]. 逻辑与操作指令(6条)

    这组指令的作用是将两个单元中的内容执行逻辑与操作。如果直接地址是I/O地址,则为“读—修改—写”操作。

    ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。

    ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。

    ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。

    ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。

    ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。

    ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。

    [6]. 逻辑或操作指令(6条)

    这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。

    ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。

    ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。

    ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。

    ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。

    ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。

    ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。

    [7]. 逻辑异或操作指令(6条)

    这组指令的作用是将两个单元中的内容执行逻辑异或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。

    XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。

    XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。

    XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。

    XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。

    XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。

    XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中。

    MCS-51控制转移指令

    控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进 行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一 般都不会对标志位有影响。

    [1]. 无条件转移指令(4条)

    这组指令执行完后,程序就会无条件转移到指令所指向的地址上去。长转移指令访问的程序存储器空间为16地址64kB,绝对转移指令访问的程序存储器空间为11位地址2kB空间。

    LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)

    AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变

    SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值

    JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值

    [2]. 条件转移指令(8条)

    程序可利用这组丰富的指令根据当前的条件进行判断,看是否满足某种特定的条件,从而控制程序的转向。

    JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行

    JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行

    CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行

    CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

    CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

    CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

    DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行

    DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行

    [3]. 子程序调用指令(1条)

    子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我 们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。

    LCALL addr16 ; 长调用指令,可在64kB空间调用子程序。此时(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分别从堆栈中弹出调用子程序时压入的返回地址

    ACALL addr11 ; 绝对调用指令,可在2kB空间调用子程序,此时(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)

    RET ; 子程序返回指令。此时(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)

    RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替

    [4]. 空操作指令(1条)

    这条指令将累加器中的内容清0。

    NOP ; 这条指令除了使PC加1,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时

    MCS-51布尔变量操作指令

    布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。

    在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。

    既然有布尔处理机功能,所以也就有相应的布尔操作指令集,下面我们分别谈论。

    [1]. 位传送指令(2条)

    位传送指令就是可寻址位与累加位CY之间的传送,指令有两条。

    MOV C,bit ;bit→CY,某位数据送CY

    MOV bit,C ;CY→bit,CY数据送某位

    [2]. 位置位复位指令(4条)

    这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。

    CLR C ; 0→CY,清CY

    CLR bit ; 0→bit,清某一位

    SETB C ; 1→CY,置位CY

    SETB bit ; 1→bit,置位某一位

    [3]. 位运算指令(6条)

    位运算都是逻辑运算,有与、或、非三种指令,共六条。

    ANL C,bit ;(CY)∧(bit)→CY

    ANL C,/bit ;(CY)∧()→CY

    ORL C,bit ;(CY)∨(bit)→CY

    ORL C,/bit ;(CY)∧()→CY

    CPL C ;()→CY

    CPL bit ;()→bir

    [4]. 位控制转移指令(5)

    位控制转移指令是以位的状态作为实现程序转移的判断条件,介绍如下:

    JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。

    JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。

    JB bit, rel ; 位状态为1转移。

    JNB bit, rel ; 位状态为0转移。

    JBC bit, rel ; 位状态为1转移,并使该位清“0”。

    后三条指令都是三字节指令,如果条件满足,(PC)+3+rel→PC,否则程序往下执行,(PC)+3→PC。


    展开全文
  • 51单片机汇编指令字节数与周期数,统计介绍51单片机汇编指令的字节数与周期数
  • AVR单片机汇编指令系统

    千次阅读 2019-11-21 17:11:54
    AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令...

    AVR单片机指令系统

    计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。

    AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。

    SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。

         AVR器件(指令速查表) 118条指令器件

    AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/8515,AT90S8534/8535

    算术和逻辑指令

    BRCC k

    C清零转

    位指令和位测试指令

    ADD Rd,Rr

    加法

    BRSH k

    ≥转

    SBI P,b

    置位I/O

    ADC Rd,Rr

    带进位加

    BRLO k

    小于转(无符号)

    CBI P,b

    清零I/O

    ADIW Rdl,K

    加立即数

    BRMI k

    负数转移

    LSL Rd

    左移

    SUB Rd,Rr

    减法

    BRPL k

    正数转移

    LSR Rd

    右移

    SUBI Rd,Rr

    减立即数

    BRGE k

    ≥转(带符号)

    ROL Rd

    带进位左循环

    SBC Rd,Rr

    带进位减

    BRLT k

    小于转(带符号)

    ROR Rd

    带进位右循环

    SBCI Rd,K

    C减立即数

    BRHS k

    H置位转移

    ASR Rd

    算术右移

    SBIW Rdl,K

    减立即数

    BRHC k

    H清零转移

    SWAP Rd

    半字节交换

    AND Rd,Rr

    BRTS k

    T置位转移

    BSET s

    置位SREG

    ANDI Rd,K

    与立即数

    BRTC k

    T清零转移

    BCLR s

    清零SREG

    OR Rd,Rr

    BRVS k

    V置位转移

    BST Rr,b

    Rrb位送T

    ORI Rd,K

    或立即数

    BRVC k

    V清零转移

    BLD Rd

    TRrb

    EOR Rd,Rr

    异或

    BRIE k

    中断位置位转移

    SEC

    置位C

    COM Rd

    取反

    BRID k

    中断位清零转移

    CLC

    清零C

    NEG Rd

    取补

    数据传送指令

    SEN

    置位N

    SBR Rd,K

    寄存器位置位

    MOV Rd,Rr

    寄存器传送

    CLN

    清零N

    CBR Rd,K

    寄存器位清零

      LDI Rd,K

    装入立即数

    SEZ

    置位Z

    INC Rd

    1

      LD Rd, X

    X间接取数

    CLZ

    清零Z

    DEC Rd

    1

      LD Rd, X+

    X间接取数后+

    SEI

    置位I

    TST Rd

    测试零或负

      LD Rd,-X

    X间接取数先-

    CLI

    清零I

    CLR Rd

    寄存器清零

      LD Rd,Y

    Y间接取数

    SES

    置位S

    SER Rd

    寄存器置FF

      LD Rd,Y+

    Y间接取数后+

    CLS

    清零S

    条件转移指令

      LD Rd,–Y

    Y间接取数先-

    SEV

    置位V

    RJMP k

    相对转移

      LDD Rd,Y+q

    Y间接取数+q

    CLV

    清零V

      IJMP

    间接转移(Z)

      LD Rd, Z

    Z间接取数

    SET

    置位T

     RCALL k

    相对调用

    LD Rd,  Z+

    Z间接取数后+

    CLT

    清零T

      ICALL

    间接调用(Z)

    LD Rd,–Z

    Z间接取数先-

    SEH

    置位H

    RET

    子程序返回

    LDD Rd, Z+q

    Z间接取数+q

    CLH

    清零H

    RETI

    中断返回

    LDS Rd,K

    SRAM装入

    NOP

    空操作

    CPSE Rd,Rr

    比较相等跳行

      ST X ,Rr

    X间接存数

    SLEEP

    休眠指令

    CP Rd,Rr

    比较

      ST X+ ,Rr

    X间接存数后+

    WDR

    看门狗复位

    CPC Rd,Rr

    带进位比较

      ST –X ,Rr

    X间接存数先-

    90条指令为Attiny11/12/15/22=

    +89条基本指令是AT90S1200

    CPI Rd,K

    与立即数比较

      ST Y ,Rr

    Y间接存数

    SBRC Rr,b

    位清零跳行

     ST Y+ ,Rr

    Y间接存数后+

    SBRS Rr,b

    位置位跳行

      ST –Y ,Rr

    Y间接存数先-

    SBIC P,b

    I/O位清零跳行

    STD Y+q ,Rr

    Y间接存数+q

    SBIS P,b

    I/O位置位跳行

    ST Z ,Rr

    Z间接存数

    BRBS s,k

    SREG位置位转

      ST Z+ ,Rr

    Z间接存数后+

    118条指令器件=

    + 90条指令器件

    BRBC s,k

    SREG位清零转

      ST –Z ,Rr

    Z间接存数先-

    BREQ k

    相等转移

      STD Z+q ,Rr

    Z间接存数+q

    BRNE k

    不相等转移

      STS k,,Rr

    数据送SRAM

     

    BRCS k

    C置位转

      LPM

    从程序区取数

     

     

     

    IN Rd,P

    I/O口取数

     

     

     

      OUT P, Rdr

    存数I/O

     

     

     

    PUSH Rr

    压栈

     

     

     

    POP Rd,

    出栈

     

    展开全文
  • 轩儿的51单片机汇编指令详解

    千次阅读 2020-11-07 13:39:13
    51单片机汇编指令一、寻址方式1、立即寻址(直接给操作数)2、直接寻址(给操作数所在地址)3、寄存器寻址4、寄存器间接寻址5、变址寻址二、数据传送与交换指令三、算术运算和逻辑运算四、控制转移指令五、位操作...

    51单片机汇编指令

    一、寻址方式

    1、立即寻址(直接给操作数)

    MOV A,#80H;     80H→A    将80H这一数据送给累加器A
    MOV DPTR,#2000H;   2000H→DPTR    将2000H送给16位寄存器DPTR   DPTR分为DPL和DPH 用于存放低八位和高八位数据
    

    2、直接寻址(给操作数所在地址)

    直接寻址的寻址对象为RAM,SFR(特殊功能寄存器)

    MOV A,25H;   内部RAM(25H)→A  注意#25H表示操作数,25H表示的是RAM内的存储空间地址,此指令表示将内部RAM的25H地址内数据传给A
    MOV P0,#45H;   45H→P0
    MOV 30H,20H;内部RAM(20H)→(30H)
    

    3、寄存器寻址

    通用寄存器包括 A , B, DPTR, R0~R7

    以通用寄存器的内容为操作数的寻址方式为寄存器寻址

    A既可以寄存器寻址也可以直接寻址,直接寻址时写作ACC

    直接寻址和寄存器寻址间的差别:
    直接寻址是以操作数所在的字节地址(占用1字节)出现在指令码中
    寄存器寻址是寄存器编码出现在指令码中

    寄存器寻址优点:
    可寄存器寻址的寄存器少,编码位数少(少于3位二进制数),通常操作码和寄存器编码合用1字节
    因此寄存器寻址的指令机器码短,执行快

    但需要注意的一点是,除了上述所指明的通用寄存器外的其他SFR,一律为直接寻址

    MOV A,R0; R0->A
    MUL AB;  A*B->BA  无符号乘法指令 MUL,后面会具体介绍
    MOV B,R0; R0->B
    PUSH ACC;  A的内容压入堆栈,A在此处为直接寻址
    

    4、寄存器间接寻址

    以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址

    能用于寄存器间接寻址的寄存器有 R0, R1, DPTR,前面加@表示

    寄存器间接寻址的存储器空间包括内部RAM和外部RAM

    需要注意的一点是,因为内部RAM有128字节,因此用1字节的R0或R1即可间接寻址整个空间

    外部RAM拥有64KB的存储空间,仅用R0或R1无法寻址整个空间,因此,需要由P2端口提供外部RAM的高8位地址,由R0或R1提供低8位地址

    也可以用16位的DPTR作寄存器间接寻址64KB存储空间

    MOV @R0,A; A->以R0内容为地址的内部RAM
    MOVX A,@R1; 外部RAM(地址为P2 R1)的内容->A
    MOVX @DPTR,A; A->以DPTR内容为地址的外部RAM
    注意:在使用间接寻址指令前,需要先给作间址的寄存器赋值
    

    5、变址寻址

    由寄存器DPTR或PC(程序计数器,用于存放CPU将执行的下一条指令的地址)中内容加上A累加器内容之和,形成操作数地址的寻址方式称为变址寻址。

    变址寻址只能对ROM中的数据做寻址操作

    由于ROM是只读存储器,因此变址寻址只有读操作而无写操作。指令操作符为MOVC

    MOVC A,@A+DPTR; A+DPTR->A  传给A的应是A+DPTR地址空间内所含的数据
    MOVC A,@A+PC;  (A+PC)->A  
    

    6、相对寻址

    以当前程序计数器PC的内容为基值,加上指令给出的一字节补码数(偏移量)形成新的PC值

    相对寻址只用于修改PC值,主要用于程序的分支转移

    SJMP 08H; 当前PC+08H->PC  ,指令执行后,转到PC+08H处继续执行程序
    

    7、位寻址

    对位地址中的内容作位操作的寻址方式

    单片机内只有内部RAM和SFR部分寄存器单元可位寻址

    位寻址是一种直接寻址方式,由指令给出直接位地址。但不同的是,位寻址给出的是位地址,而不是字节地址

    注:
    位地址-----指向具体的一位
    字节地址-----指向具体的一个字节,8位

    SETB 20H;  1->20H位   SETB---寄存器置1指令
    MOV 32H,C;  进位标志位CY(由C表示)->32H位
    ORL C,5AH; CY或上5AH位->CY    ORL"按位或"操作指令,用来测试两个操作数是否同时为0,或者用来置位某些位(置位即或为1)
    

    小结:
    在直接寻址的内部RAM和SFR的操作数中,SFR操作数常采用符号字节地址(PSW,TMOD,P0,IE)和符号位地址(C,RS0,EA,P1.1)

    对内部RAM,采用直接字节地址/直接位地址

    二、数据传送与交换指令

    1、传送类指令

    (1)内部RAM和SFR间传送指令 MOV

    已知R1=20H,(20H)=55H,现有指令  MOV A,@R1; 此指令中@R1表示以R1内容为地址所指向的存储空间内存放的数据,因此该指令结果为  A=55H
    
    MOV A,#30H;  该指令属于直接给操作数,将30H直接赋给A
    
    已知(40H)=30H,现有指令 MOV A,40H; 指令将40H指向的内部RAM空间内所含数据送A
    
    已知 R0=50H,(50H)=10H,现有指令 MOV 35H,@R0; 指令将以R0内容为地址所指向的颞部RAM内所含数据送至35H所指向的内部RAM存储空间
    
    已知R0=50H ,现有指令  M0V @R0,#67H; 将操作数67H赋给以R0内数据为地址指向的内部RAM空间
    

    (2)外部存储器和A累加器之间的传送

    外部存储器及程序存储器只能和A之间进行传送,而不能与内部RAM和SFR之间进行传送。

    ①访问外部数据存储器指令(4条)
    外部RAM可读可写,和A可以互相传送,共4条指令

    注意 MOVX 用来访问外部RAM存储空间
    MOVX @Ri,A;   A->(P2Ri),因外部RAM为64KB地址空间,因此需要16位,P2存高8位,Ri存低8位
    
    MOVX @DPTR,A;    A->(DPTR)  将A中数据传至以DPTR内容为地址指向的外部RAM空间
    
    MOVX A,@Ri;    
    MOVX A,@DPTR;
    

    ②访问ROM指令 ROM只能读,不能写 这两条指令常用于查表

    MOVC A,@A+PC;  (A+PC)->A
    MOVC A,@A+DPTR;  (A+DPTR)->A
    
    例如:
    MOV A,#01H;  A=01H
    MOV DPTR,#M2;  M2地址->DPTR
    MOVC A,@DPTR; (A+DPTR)->A=(01+M2)->A
    M1: RET;  子程序返回指令
    M2: DB 66H,77H,88H,99H;定义字节数据
    
    程序解读:M2本来应该输出66H  但M2+01,因此送给A 的为77H
    

    ③堆栈操作

    堆栈–暂时存放需保留信息的存储区,地址必须用寄存器SP表示

    入栈操作:

    PUSH dir; SP+1->SP  (dir)->(SP) 指令含义--寄存器SP地址+1,数据地址给SP
    

    出栈操作

    POP dir; (SP)->(dir),SP-1->SP  SP内数据地址给dir  寄存器SP地址-1
    MOV A,#90H;  操作数90H送A
    MOV SP,#15;   SP地址初值指向15H
    PUSH ACC; SP->16H  ACC->SP  90H->(16H)  (16H)=90H  入栈操作  SP+1变为16H  A内数据送SP所指向的存储空间 也就是  操作数90H送至(16H)所指向的存储空间
    

    2、交换指令

    (1)字节交换指令 XCH

    例如已知 A=FFH  R1=30H  (30H)=87H
    XCH A,@R1; A=87H,(30H)=FFH  将A内数据和以R1内容为地址指向的存储空间内数据  进行交换
    

    (2)低半字节交换指令 XCHD

    例如已知 A=34H  (50H)=96H
    MOV R1,#50H;
    XCHD A,@R1; A=36H  (50H)=94H
    

    (3)A的高、低半字节交换 SWAP

    例如A=0FH
    SWAP A;  A= F0H
    

    三、算术运算和逻辑运算指令

    1、算数运算和逻辑运算对标志位的影响

    PSW中,4个测试标志位
    P 奇偶校验位
    OV 溢出标志位
    CY 进位
    AC 辅助进位

    ① P 仅对A操作的指令有影响
    ②传送指令,加1、减1指令、逻辑运算指令 不影响CY、OV、AC
    ③加减运算影响全部4个标志位
    ④乘除指令使CY=0,当乘积>255/除数为0时,OV=1

    2、以 A 为目的操作数的算数运算和逻辑运算指令

    每一类运算A对应4个源操作数 @Ri 、dir、Rn、#data

    加      ADD
    进位加  ADDC
    借位减  SUBB
    与      ANL      两数逻辑运算法则:  与 有0则0
    或      ORL                       或 有1则1
    异或    XRL                        异或  同为0 异为1   与0异或值不变  与1异或值取反
    
    具体指令说明:
    设A=97H  CY=1,有如下指令(具体标志位的变化,请自行换算为二进制,进行计算观察)
    ADD A,#95H;  A=97H+95H=2CH 进位溢出,不存A中,A只有8位  97H+95H=12CH
    ADDC A,#95H;  A=97H+95H+CY=12CH+CY=2CH+CY=2DH  此处有进位  CY=1
    
    设CY=1 A=95H
    SUBB A,#62H;   A=95H-62H-CY=32H  标志位CY=0,OV=1,P=1,AC=0
    
    设A=8BH  
    ADD A,ACC; A=8BH+8BH=16H
    
    设A=0FH (20H)=76H
    ORL A,#80H; A=8FH  或运算--有1则1
    ANL A,20H;   A=06H   与运算--有0则0
    

    3、以dir为目的操作数的逻辑运算指令 ANL 、ORL、XRL

    对应源操作数 A,#data

    设P1=0FH
    XPL P1,#0FFH;  P1=F0H,此处P1属于直接寻址dir  此处0FH和FFH异或  ,同为0异为1,因此为F0
    

    4、加一、减1指令----INC 、DEC

    加一指令是内部RAM或寄存器自增1指令
    减一指令是内部RAM或寄存器自减1指令

    INC A;     A+1->A
    INC @Ri;  (Ri)+1->(Ri)  Ri内容指向的存储空间数据+1,再存放到此地址空间
    INC dir;  表内数据+1,再放回表内原地址  dir--表---存放数据的连续地址
    INC Rn;
    INC DPTR;
    
    DEC A;
    DEC @Ri;
    DEC dir;
    DEC Rn;
    注:减1指令不支持DPTR
    

    5、十进制调整指令 DA

    计算完成二进制加法,和也为二进制

    但当十进制数相加(BCD码相加),要得到十进制,则要进行十进制调整(BCD码调整)

    DA A; 将A中二进制数相加和调整成BCD码
    指令调整原则:
    和  低4位大于9或者有半进位,则低4位+6
    和  高4位大于9或者有进位,则高4位+6
    
    指令根据  相加和  及  PSW中标志自行判断,因此该指令应紧跟在  加指令(ADD)之后,至少在 加指令和该指令之间  不能有影响标志位的指令
    
    注意: DA A;指令只对 一字节和 进行调整,如为多字节相加,须多次调整且不可对减法结果进行调整
    
    例如
    MOV A,#56H;    A=56H
    MOV B,#17H;    B=17H
    ADD A,B;     A=A+B=56H+17H=6DH  
    DA A;        56H=0101 0110   17H=0001 0111  6DH= 0110 1101  可以看出有半进位无进位,因此低半字节+6   A=73H
    SJMP $;
    

    6、专对A的指令

    循环移位指令长用于位测试、位统计、乘2、除2操作

    CPL A; A取反
    CLR A;  A清零
    
    RL A; A左环移
    RR A; A右环移
    
    RLC A;  A左大环移
    RRC A;  A右大环移
    
    例如A=84H   1000 0100
    RL A;  A=09H  0000 1001  左环移
    
    例如 A=84H  CY=1
    RRC A;  A=C2H   1100 0010  CY=0   环移指令是累加器A和进位标志CY一起进行移位
    

    7、乘除法指令

    (1)乘法指令 MUL

    MUL AB;  A×B->BA
    说明:本指令实现8位无符号乘法。A、B各放一个8位乘数,指令执行后,16位积的高8位在B中,低8位在A中
    
    例如A=50H   B=A0H
    MUL AB;    A×B=3200H   A=00H  B=32H  
    

    (2)除法指令 DIV

    DIV AB;  A÷B->商在A中,余数在B中
    本指令实现两个8位无符号数除法,A放被除数,B放除数,指令执行后,A中为商,B为余数。  若除数B=00H,则指令执行后,溢出标志OV=1,且A,B内容不变
    
    例如  A=28H  B=12H
    DIV AB;  A÷B=02H...04H   A=02H  B=04H
    
    例如 A=08H,B=09H
    DIV AB; A=00H  B=08H
    

    8、指令应用详解

    (1)编程将21H单元的低3位和20H单元中的低5位合并为一个字送30H单元,要求将(21H)的低3位放在高位上

    详解:因为要求分别将20H的低5位和21H的低3位送30H单元,因此可以通过 ANL (与运算,有0则0)取所需位,其他位置0,然后通过 SWAP(A高低字节交换指令)以及RL (左环移)将21H低3位变换至高3位,最后通过ORL(或运算,有1则1)将所需字节合并
    MOV 30H,20H; (20H)内容送(30H)
    ANL 30H,#1FH;  1FH=0001 1111  保留低5位
    MOV A,21H;   将(21H)内容送A,等待数据处理
    SWAP A;  对A的高低4位进行交换
    RL A; 低3位变到高3位位置  RL左环移1位
    ANL A,#0E0H;  1110 0000   保留高3位  此处E0H写为0E0H,是16进制的写法格式
    ORL 30H,A;  和(30H)低5位合并
    SJMP $;  动态停机
    
    

    (2)把在R4,R5中的两字节数取补(高位在R4中)

    详解:正数的补码=原码,负数的补码=反码+1。此题让求补码,因此R4,R5中存放的两字节数为负数。
    因此需要别将低字节放入A中,对A进行取反操作,再+1后,成为低字节补码。
    然后将高字节放入A中,进行取反后加上,低字节反码+1后产生的进位(高字节取反后 无须 +1)。
    CLR C;  CY清0  //此指令不清楚有何作用
    MOV A,R5;  低字节入A
    CPL A;   低字节取反
    ADD A,#O1H;  低字节+1
    MOV R5,A;    低字节补码入R5
    MOV A,R4;   高字节 入A
    CPL A;     高字节 取反
    ADDC A,#00H;   高字节 加  低位进位  此处是加低位可能产生的进位
    MOV R4,A;   高字节补码入  R4
    SJMP $;  动态停机
    

    (3)把R7中的无符号数扩大10倍

    详解,将R7中无符号数和乘数10分别存入A、B中,调用无符号乘法指令MUL进行计算,并将分别存放乘积的高8位和低8位的B和A中的数,送给R7和R6
    MOV A,R7;
    MOV B,#0AH;
    MUL AB;
    MOV R7,A;
    MOV R6,B;
    SJMP $;
    

    (4)把R1R0和R3R2中的两个4位BCD码数相加,结果送R5R4中,如有进位,则存于进位标志位C中

    详解:使用ADD 加指令进行BCD码数相加,然后使用DA 对BCD码进行十进制调整,将最后结果放入R5R4中
    CLR C;  清进位
    
    MOV A,R0;  
    ADD A,R2;  低字节相加
    DA A;     十进制调整
    MOV R4,A;   低字节结果送R4
    
    MOV A,R1;
    ADDC A,R3;  进位加  高字节相加
    DA A;     十进制调整
    MOV R5,A;    高字节结果送R5
    SJMP $;   动态停机
    

    四、控制转移指令

    1、调用指令和返回类指令

    (1)长调用

    LCALL addr16;  addr16->PC0~15
    说明:
    该指令功能是:保护断点,即当前PC(本指令的下一条将执行指令的首地址)压入堆栈,子程序入口地址addr16送PC,程序跳转至子程序执行
    
    本指令为64KB地址范围的调用子程序指令,子程序可在64KB地址空间的任意处。
    
    本指令的机器码为  3字节  
    

    (2)短调用

    ACALL addr11;  addr11->PC0~10
    功能:保护断点,当前PC入堆栈;addr11->PC0~10   PC 11~15原值不变
    本指令为2KB地址范围内的调子程序指令
    
    设addr11各位为 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
    则ACALL指令操作码为 a10 a9 a8 10001 a7 a6 a5 a4 a3 a2 a1 a0
    其中10001 是ACALL指令的操作码
    

    (3)子程序返回指令

    RET; 从调用子程序返回
    	功能:从栈顶弹出断点到PC,从子程序返回主程序
    RETI;从中断服务程序返回
    	功能:从栈顶弹出断点到PC,并恢复中断优先级状态触发器,从中断服务返回主程序
    

    2、转移指令

    (1)无条件转移指令

    ①短转移

    AJMP addr11; addr11->PC0~10
    转移范围:2KB地址范围
    机器码形式:a10 a9 a8 00001 a7 a6 a5 a4 a3 a2 a1 a0
    

    ②长转移

    LJMP addr16; addr16->PC0~15
    64KB程序空间全范围转移指令
    

    ③间接转移

    JMP @A+DPTR; A+DPTR->PC
    例如 A=02H  DPTR=2000H
    JMP @A+DPTR;  PC=2002H
    

    ④无条件相对转移

    STMP rel; PC+rel->PC
    功能:将PC当前 修改为  PC目的,即转到目的地址执行指令
    转移的偏移量 rel=PC目的-PC当前
    转移可前可后,rel可正可负 为一字节有符号数(补码表示)  -128~+127
    

    (2)条件转移指令—均为相对转移指令,rel的计算方法同SJMP rel

    ①累加器为0(非0)转移

    JZ rel; A=0 转移(PC+rel->PC),A不等于0,程序顺序执行
    JNZ rel; A不等于0则转移(PC+rel->PC),A=0,程序顺序执行
    

    ②减1非0转移

    DJNZ Rn,rel; Rn-1->Rn,Rn不等于0,则转移(PC+rel->PC),Rn=0,程序顺序执行
    DJNZ dir,rel;(dir)-1->(dir),(dir)不等于0,则转移(PC+rel->PC),(dir)=0,程序顺序执行
    
    说明:本指令有自动减1功能
    DJNZ Rn,rel;是2字节指令
    DJNZ dir,rel;是3字节指令
    

    ③比较转移指令

    CJNE A,dir,rel; A不等于dir ,转移(PC->rel->PC),A=dir,程序顺序执行
    CJNE A,#data,rel; A不等于#data,转移(PC->rel->PC),A=#data,程序顺序执行
    CJNE Rn,#data,rel;  Rn不等于#data,转移(PC->rel->PC),Rn=#data,程序顺序执行
    CJNE @Ri,#data,rel;  (Ri)不等于#data,转移(PC->rel->PC),Ri#data,程序顺序执行
    
    说明: CJNE 指令为3字节指令,做两数相减操作,不回送结果, 影响CY标志
    若 第一操作数 大于或等于 第二操作数,则标志CY=0,否则CY=1
    
    例如:
    CJNE R7,#34H,$+08H;  设R7=56H,则程序转移到放本条CJNE的指令的首地址($)加08H后的地址单元执行
    
    读P1端口上信息,若不为55H,则程序等待,知道P1为55H,程序顺序执行
    MOV A,#55H;
    CJNE A,P1,$;
    

    ④空指令操作

    NOP;  用于延时
    

    五、位操作指令

    1、位地址表达方式

    直接位地址表示,如 D4H

    用“.”操作符表示,如PSW.4或D0H.4

    用位名称表示,如 RS1

    用用户自定义名表示,如 ABC BIT D4H; 其中,ABC定义位D4H位位名,BIT为位定义 伪指令

    2、位清零、置一、取反指令

    清0
    CLR C;  0->CY
    CLR bit;  0->bit
    
    置1
    SETB C;  1->CY
    setb bit;  1->bit
    
    取反
    CPL C;  CY取反
    CPL bit;  bit 取反
    

    3、位与,位或指令

    与 
    ANL C,bit;   CY与上(bit)->CY
    ANL C,/bit;  CY与上(bit)的取反->CY
    
    或
    ORL C,bit; CY或上(bit)->CY
    ORL C,/bit; CY或上(bit)的取反->CY
    

    4、位传送指令

    MOV C,bit;  (bit)->CY
    MOV bit,C;   CY->bit
    

    5、位转移指令

    JC rel;  CY=1,则转移(PC->rel->PC),否则顺序执行
    JNC rel; CY=0,则转移(PC->rel->PC),否则顺序执行
    JB bit,rel;  (bit)=1,则转移(PC->rel->PC),否则顺序执行
    JNB bit rel;  (bit)=0,则转移(PC->rel->PC),否则顺序执行
    JBC bit,rel;  (bit)=1,则转移(PC->rel->PC),且该位清0,否则程序无法顺序执行
    

    水平有限,博客错误之处,还请各位斧正。
    QQ:2521798182

    展开全文
  • 51单片机汇编指令

    2021-01-11 21:41:31
    内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A,Rn 将Rn的内容传送给A 寄存器 1 1 MOV A,direct direct是一个地址单元,将该地址的内容传送给A 直接 1 2 MOV A @Ri Ri中存储了一个地址,...
  • 80C51单片机指令系统 具有255种操作码(00H~FFH)除A5H外的集合 只需数机42种助记符,代表33种功能 指令功能助记符与操作数各种寻址方式结合,构造出111中指令 80C51系统 寻址方式 立即寻址 直接寻址 寄存器寻址 ...
  • 51单片机汇编指令详解

    千次阅读 2015-03-18 14:36:31
    数据传递类指令  以累加器为目的操作数的指令  MOV A,Rn  MOV A,direct  MOV A,@Ri  MOV A,#data  第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是...
  • 说明:没有不带借位的单片机减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。 如果是小数减大数,进位C会被置1 ,使用JC rel 转到处理程序去就可以了 例如: CLR C SUB...
  •  说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。  2.看门狗定时器清零指令。  实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频...
  • 51单片机指令

    千次阅读 2013-11-20 15:09:53
    MCS-51单片机指令集 1、数据传送类指令 助记符 功能说明 字节数 振荡周期  MOV A,Rn 寄存器内容送入累加器 1 12 MOV A,direct 直接地址单元中的数据送入累加器 2 12 MOV A,@Ri 间接RAM中的数据送入累加器 1 ...
  • 内部传送指令 ( MOV ):片内数据存储器、寄存器数据(就是前面我们说到单片机内部RAM 128B,增强型的是256B,低128B是内部RAM区,高128B是SFR特殊功能寄存器区)传送 外部传送指令( MOVX ):片外数据存储器数据传送...
  • 51单片机汇编指令集 (指令集带英文翻译) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送;...
  • 常用单片机汇编指令

    2013-03-25 22:12:29
    一、赋值操作类指令: 1 .MOV A,Rn 寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,...
  • 51单片机汇编指令

    千次阅读 2015-05-29 11:27:41
    指令说明 字节数 周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 ...
  • 51系统指令中算术运算有加、进位加…等指令逻辑运算有与、或、异或等… 算术运算和逻辑运算指令对标志位的影响: PSW寄存器中有四个测试标志位: P(奇偶)、OV(溢出)、CY(进位)、AC(辅助进位) 对于奇偶校验来...
  • 51单片机汇编指令速查表指令格式 功能简述 字节数 周期一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1...
  • 指令字节和指令周期 指令字长有三种: 单字节 RET 双字节MOV A, #68H 三字节 MOV 30H, 46H 指令周期是指执行一条指令所需要的时间 1机器周期指令 2机器周期指令 4机器周期指令 4.3.1 数据传送指令: 1、...
  • MCS-51单片机汇编指令详解

    千次阅读 多人点赞 2015-12-09 19:37:26
    以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 这组指令功能是把源地址单元中的内容送入直接地址,源操作数不变。 第一条指令中,Rn代表的是R0-R7。 第二条指令中,direct...
  • 51单片机汇编指令

    千次阅读 2013-05-12 19:49:28
    一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM) 对外部RAM的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,627
精华内容 650
关键字:

单片机clr指令