×
单片机 > 单片机程序设计 > 详情

111条单片机汇编指令注解汇总

发布时间:2020-09-02 发布时间:
|
 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)

    MOV            A,   direct     ;(A)

    MOV            A,   Rn         ;(A)

    MOV            A,   @Ri       ;(A)        

    (2) 以通用寄存器Rn为目的的传送指令:

    MOV            Rn,                  ;(Rn)

    MOV            Rn,              direct     ; (Rn)

    MOV            Rn,        #data:     ; (Rn)

    (3) 以直接地址为目的的传送指令:

    MOV            direct,              ;(direct)

    MOV            direct,    Rn         ; (direct)

    MOV            direct,    direct2   ; (direct)

    MOV            direct,    @Ri       ; (direct)

    MOV            direct,    #data      ; (direct)

    (4) 以寄存器间接地址为目的的传送指令:

    MOV            @Ri,                ;((Ri))

    MOV            @Ri,      direct     ;((Ri))

    MOV            @Ri,      #data      ;((Ri))

    (二) 数据指针赋值指令(16位数据传送指令)

    MOV            DPTR,   #data16;

    (三) 片外数据传送指令

    MOVX          A,          @Ri       ;(A)

    MOVX          A,          @DPTR ;(A)

    MOVX          @Ri,                ;((Ri))片外

    MOVX          @DPTR, A           ;((DPTR))片外

    (四) ROM数据访问指令(查表指令)

    MOVC          A,          @A+DPTR    ;(A)

    MOVC          A,          @A+PC        ;(PC)

    (五) 堆栈操作指令

    PUSH            direct     ;(SP)

                        堆栈指针先加1,将数据压入栈顶

    POP              direct     ;(direct)

                        将数据从栈顶弹出存入direct,SP再减1

    (六) 数据交换指令

    (1)整字节(8位)交换指令:

    XCH             A,   Rn  ;A和Rn中的数互换

    XCH             A,   direct     ;A和direct单元中的数互换

    XCH             A,   @Ri       ;A和Ri间址单元中的数互换

    (2)半字节交换指令:

    XCHD           A,   @Ri       ;A的低4位Ri间接单元的低4位互换,高4位不动

    (3)累加器高低半字节交换指令:

    SWAP           A,                 ;A的高4位(D7~D4)和低4位(D3~D0)互换

    (七) 加法指令

    (1)不带Cy加法指令:

    ADD             A,   Rn         ;(A)

    ADD             A,   direct     ; (A)

    ADD             A,   @Ri       ; (A)

    ADD             A,   #data      ; (A)

    (2)带进位加法指令:

    ADDC           A,   Rn         ;(A)

    ADDC           A,   direct     ; (A)

    ADDC           A,   @Ri       ; (A)

    ADDC           A,   #data      ; (A)

    (3)加1指令:

    INC              A,                 ;(A)

    INC              Rn                ;(Rn)

    INC              @Ri              ;((Ri))

    INC              direct            ;(direct)

    INC              DPTR           ;(FPTR)

    (八) 减法指令

    (1)带进位减法指令:

    SUBB            A,   Rn         ;(A)

    SUBB            A,   direct     ; (A)

    SUBB            A,   @Ri       ; (A)

    SUBB            A,   #data      ; (A)

    (2)减1指令:

    DEC                              ;(A)

    DEC             direct            ;(direct)

    DEC             Rn                ;(Rn)

    DEC             @Ri              ;((Ri))

    (九) 乘除指令

    (1)乘法指令

    MUL             AB                ;(B)(A)

    指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.

    (2)除法指令

    DIV              AB                ;A/B,商存入A,余数存入B

    指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.

    (十) 十进制调整指令

    DA               A
 

(十一) 逻辑运算指令

    (1)   逻辑与运算指令:

    ANL             A,   Rn         ;(A)

    ANL             A,   direct     ; (A)

    ANL             A,   @Ri       ; (A)

    ANL             A,   #data      ; (A)

    ANL             direct,       ;(direct)

    ANL             direct,    #data;(direct

    (2)   逻辑或运算指令:

    ORL             A,   Rn         ;(A)

    ORL             A,   direct     ; (A)

    ORL             A,   @Ri       ; (A)

    ORL             A,   #data      ; (A)

    ORL             direct,       ;(direct)

    ORL             direct,    #data; (direct)

    (3)   逻辑异或运算指令:

    XRL             A,   Rn         ;(A)

    XRL             A,   direct     ; (A)

    XRL             A,   @Ri       ; (A)

    XRL             A,   #data      ; (A)

    XRL             direct,       ;(direct)

    XRL             direct,    #data; (direct)

    (4)   累加器清0和去反指令

    CLR                        ;(A) (累加器清0指令)

    CLR                        ;(A)

    (5)   累加器移位指令:

    不带进位Cy循环左移:  RL              ;Dn+1

                 

D7

D6

D5

D4

D3

D2

D1

D0

    不带进位Cy循环右移:       RR            :Dn+1->Dn,D0

     

D7

D6

D5

D4

D3

D2

D1

D0

    带进位Cy循环左移:    RLC                   ;Cy

     

D7

D6

D5

D4

D3

D2

D1

D0

    带进位Cy循环右移:          RRC                ;Cy->D7,Dn+1->Dn,D0->Cy

    (十二) 控制转移指令

    [1] 无条件转移指令:

    (1) 长转移指令    LJMP            addr16          ;(PC) 

    (2) 绝对转移指令AJMP            addr11           ;(PC)            

    (3) 短转移指令    SJMP            rel                 ;(PC)

    (4) 变址寻址转移指令JMP              @A+DPTR    ;(PC)    

    [2] 条件转移指令:

    (1) 累加器判0转移指令:

    JZ          rel          ;如果(A)=0,跳转到目标语句,否则顺序执行

    JNZ       rel          ;如果(A)≠0,跳转到目标语句,否则顺序执行

    (2) 比较转移指令:

    CJNZ     A,   #data,     rel   ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行

    CJNZ        direct,    rel   ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行

    CJNZ     Rn  #data,     rel   ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行

    CJNZ     @Ri       #data,     rel   ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行

    (3) 循环控制转移指令:

    DJNZ     Rn, rel   ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行

    DJNZ     firect,     rel   ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行

    (十三) 子程序调用和返回指令

    (1) 绝对调用指令:

    ACALL         addr11    

    (2) 长调用指令:

    LCALL          addr16

    (3) 返回指令:

    RET       子程序返回

    RETI     中断服务程序返回

    (十四) 空操作指令

    NOP      空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等

    (十五) 位操作类指令

    (1) 位传送指令:

    MOV     C,bit                    ;(Cy)

    MOV     bit,C                    ; (bit)

    (2) 位置位和复位指令:

    SETB                      ;(Cy)

    SETB     bit                 ;(bit)

    CLR                        ;(Cy)

    CLR       bit                 ;(bit)

    (3) 位运算指令:

    ANL      C,bit                    ;(Cy)

    ANL      C,/bit            ;(Cy)

    ORL      C,bit                    ;(Cy)

    ORL      C,/bit            ;(Cy)

    CPL                        ; (Cy)

    CPL       bit                 ;(bit)

    (4) 位测试转移指令:

    (1) 以Cy位状态为条件的转移指令

    JC         rel                 ;如果Cy位=1,跳转到目标语句,否则顺序执行

    JNC       rel                 ;如果Cy位=0,跳转到目标语句,否则顺序执行

    (2) 以指定位状态为条件的转移指令:

    JB          bit,  rel          ;如果bit=1,跳转到目标语句,否则顺序执行

    JNB       bit,  rel          ;如果bit=0,跳转到目标语句,否则顺序执行

    JBC       bit,  rel          ;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍