《汇编语言指令大全》

文章目录

  • 指令的分类
  • 指令中常用符号的说明
  • 指令系统
  • 数据传送指令
  • MOV类指令及功能
  • MOVC类指令及功能
  • MOVX类指令及其功能
  • 交换指令机器功能
  • 堆栈操作指令及其功能
  • 算术运算指令
  • ADD类指令
  • ADDC类指令
  • SUBB类指令
  • MUL和DIV指令
  • INC指令和DEC指令
  • 十进制加法调整指令
  • 逻辑运算指令
  • ANL类指令
  • ORL类指令
  • XRL类指令
  • 循环移位指令
  • 取反、清0指令
  • 控制转移类指令
  • 无条件转移指令
  • 条件转移指令
  • 调用、返回、空操作指令
  • 位操作指令
  • 位数据传送类指令
  • 位修正指令
  • 位逻辑运算指令
  • 位条件转移指令
  • 指令的分类

    51系列单片机共111条指令,常见的分类方式有以下几种。

    按寻址方式分为以下7种:

  • 立即寻址。

  • 直接寻址。

  • 寄存器寻址。

  • 寄存器间接寻址。

  • 相对寻址。

  • 变址寻址。

  • 位寻址。

  • 按功能分为以下4种:

  • 数据传送指令。
  • 算术、逻辑运算指令。
  • 控制转移类指令。
  • 位操作指令(布尔指令)。
  • 按字节分类:

  • 单字节指令。
  • 双字节指令。
  • 三字节指令。
  • 指令中常用符号的说明

    符号 含义
    Rn 当前寄存器区的8个工作寄存器R0~R7(n=0-7)
    Ri 可作地址寄存器的2个工作寄存器R0和R1
    direct 内部数据存储单元的地址及特殊功能寄存器的地址
    #data 表示8位立即数
    #data16 表示16位立即数
    add16 表示16位地址
    addrll 表示11位地址
    rel 8位带符号的地址偏移量
    bit 表示位地址
    @ 间接寻址寄存器或基址寄存器的前缀
    ( ) 表示括号中单元的内容
    (( )) 表示间接寻址的内容

    指令系统

    数据传送指令

    MOV类指令及功能

    功能:从源操作数到目的操作数的数据传送。

    指令 功能
    MOV A,Rn 将寄存器Rn中的内容送到累加器A
    MOV A,direct 直接地址中内容送累加器A
    MOV A,@Ri Ri中的间址内容送累加器A
    MOV A,#data 将立即数送到累加器A
    MOV Rn, 累加器A中的内容送到寄存器Rn
    MOV Rn,direct 直接地址中的内容送Rn
    MOV Rn,#data 立即数送Rn
    MOV direct,A 累加器A的内容送入直接地址中
    MOV direct,Rn 寄存器R内容送入直接地址中
    MOV direct,direct 源操作数直接地址的内容送入目的操作数的直接地址中
    MOV direct,@Ri Ri间址内容送入直接地址中
    MOV direct,#data 立即数送入直接地址中
    MOV @Ri,A A中内容送入Ri间址单元中
    MOV @Ri,direct 直接地址中内容送入Ri间址单元中
    MOV @Ri,#data 立即数送入Ri间址单元中
    MOV DPTR,direct16 16位立即数送入数据指针DPTR中,高8位送入DPH,第8位送入DPL中

    MOVC类指令及功能

    功能: 这两条指令属于查表指令,可以查找放在程序存储器中的数据表格的内容。

    指令 功能
    MOVC A,@A+PC PC+1→PC,(A+PC)→A
    MOVC A,@A+DPTR (A+DPTR)→A

    MOVX类指令及其功能

    功能:用来与外部数据存储器区传送数据。

    指令 功能
    MOVX A,@DPTR DPTR间址单元内容送入累加器A
    MOVX @DPTR,A 累加器A中的内容诵读DPTR间址单元
    MOVX A,@Ri Ri间址单元内容送A
    MOVX @Ri,A A中内容送Ri间址单元

    交换指令机器功能

    指令 功能
    XCH A,Rn​ Rn与A内容交换
    XCH A,direct 直接地址内容与A内容交换
    XCH A,@Ri Ri间址内容与A内容交换
    XCHD A,@Ri Ri间址内容低4位与A中低四位内容交换
    SWAP A A中高4位与低4位内容交换

    堆栈操作指令及其功能

    指令 功能
    PUSH direct 栈顶指针SP+1,然后将直接地址中的内容压入栈
    POP direct 将堆栈栈顶内容弹出堆栈,栈顶指针SP-1

    算术运算指令

    ADD类指令

    不带进位的加法运算指令。

    指令 功能
    ADD A,Rn A与Rn中内容相加后再送到A
    ADD A,direct A与直接地址中内容相加后再送到A
    ADD A,@Ri A与Ri间址内容相加后再送到A
    ADD A,#data A与立即数相加后再送到A

    ADDC类指令

    带进位的加法运算指令。

    指令 功能
    ADDC A,Rn A与Rn中内容在进位状态相加后再送到A
    ADDC A,direct A与直接地址中内容在进位状态相加后再送到A
    ADDC A,@Ri A与Ri间址内容在进位状态相加后再送到A
    ADD A,#data A与立即数在进位状态相加后再送到A

    SUBB类指令

    指令 功能
    SUBB A,Rn A减Rn内容和进位标志
    SUBB A,direct A减直接地址内容和进位标志
    SUBB A,@Ri A减Ri间址单元内容和进位标志
    AUBB A,#data A减立即数和进位标志

    MUL和DIV指令

    MUL(乘法)、DIV(除法)

    指令 功能
    MUL AB A与B相乘,高八位存入B,第八位存入A
    DIV AB A与B相除,商存入A,余数存入B

    INC指令和DEC指令

    INC(加1)

    指令 功能
    INC A A+1
    INC Rn Rn中内容加1
    INC direct 直接地址中内容加1
    INC @Ri Ri间址中内容加1
    INC DPTR 数据指针加1

    DEC(减1)

    指令 功能
    DEC A A-1
    DEC Rn Rn中内容减1
    DEC direct 直接地址中内容减1
    DEC @Ri Ri间址单元中的内容减1

    十进制加法调整指令

    功能:将二进制码调整成BCD码

    指令 功能
    DA A 将A中二进制调整为BCD码

    逻辑运算指令

    ANL类指令

    功能:将源操作数的内容和目的操作数的内容按位“与”,结果存入目的操作数指定单元。

    指令 功能
    ANL A,Rn A和Rn中内容相与后的结果存入A
    ANL A,direct A和直接地址中内容相与后的结果存入A
    ANL A,@Ri A和Ri间址内容相与后的结果存入A
    ANL A,#data A和立即数相与后的结果存入A
    ANL direct,A A和直接地址中内容相与后的结果存入直接地址
    ANL direct,#data 直接地址内容和立即数相与后的结果存入直接地址

    ORL类指令

    功能:将源操作数内容和目的操作数内容按位“或”,结果存入目的操作数指定单元中。

    指令 功能
    ORL A,Rn A和Rn中内容相或后的结果存入A
    ORL A,direct A和直接地址中内容相或后的结果存入A
    ORL A,@Ri A和Ri间址内容相或后的结果存入A
    ORL A,#data A和立即数相或后的结果存入A
    ORL direct,A A和直接地址中内容相或后的结果存入直接地址
    OPL direct,#data 直接地址内容和立即数相或后的结果存入直接地址

    XRL类指令

    功能:将两个操作数指定内容按位“异或”,结果存入目的操作数指定单元中。

    指令 功能
    XRL A,Rn A和Rn中内容按位异或后的结果存入A
    XRL A,direct A和直接地址中内容按位异或后的结果存入A
    XRL A,@Ri A和Ri间址内容按位异或后的结果存入A
    XRL A,#data A和立即数按位异或后的结果存入A
    XRL direct,A A和直接地址中内容按位异或后的结果存入直接地址
    XPL direct,#data 直接地址内容和立即数按位异或后的结果存入直接地址

    循环移位指令

    功能:将累加器A中的内容循环位移或者和进位位一起移位。

    指令 功能
    RL A A中内容循环左移,执行该指令一次左移一位
    RR A A中内容循环右移,执行该指令一次右移一位
    RLC A A与进位位CY内容一起循环左移一位
    RRC A A与进位位CY内容一起循环右移一位

    取反、清0指令

    指令 功能
    CPL A 累加器A内容按位取反
    CLR A 累加器A清0

    控制转移类指令

    无条件转移指令

    指令 功能
    LJMP add16 无条件跳转到add16地址,可在64KB范围内转移,称为长转移指令
    AJMP add11 无条件转向add11地址,在2KB范围内转移
    SJMP rel 相对转移,rel是偏移量,8位有符号数,跳转范围-128~127
    JMP @A+DPTR 散转指令,无条件转向A与DPTR内容相加后形成的新地址

    条件转移指令

    功能:根据某种特定条件转移的指令,条件满足时转移,条件不满足时则按顺序执行下面的指令。

    指令 功能
    JZ rel A=0则转向PC+2+rel→PC;A≠0则顺序执行
    JNC rel A≠0则转向PC+2+rel→PC;A=0则顺序执行
    CJNE A,direct,rel A≠(direct),则转向PC+3+rel→PC;当A>(direct),CY=0;当A<(direct),CY=1;当A=(direct),PC+3→PC顺序执行
    CJNE A,#data,rel A≠data,则转向PC+3+rel→PC;当A>data,CY=0;当A<data,CY=1;当A=data,PC+3→PC顺序执行
    CJNE Rn,#data,rel Rn≠data,则转向PC+3+rel→PC;当Rn>data,CY=0;当Rn<data,CY=1;当Rn=data,PC+3→PC顺序执行
    CJNE @Ri,#data,rel (Ri)≠data,则转向PC+3+rel→PC,当(Ri)>data,CY=0,当(Ri)<data,CY=1,当(Ri)=data,PC+3→PC顺序执行
    DJNZ Rn,rel Rn-1→Rn,Rn≠0转向PC+2+rel→PC;Rn=0,PC+2→PC顺序执行
    DJNZ direct,rel (direct)≠0转向PC+2+rel→PC;(direct)=0,PC+2→PC顺序执行

    调用、返回、空操作指令

    指令 功能
    LCALL addr16 调用入口地址为addr16的子程序,可调用64KB范围内的子程序
    ACALL addr11 调用入口地址为addr11的子程序,可调用2KB范围内的子程序
    RET 放在子程序最后,是程序返回到主程序断点处
    RETI 中断返回指令,该指令用于中断服务程序,使中断结束后返回主程序断点处
    NOP 空操作,执行该指令CPU只进行取指令、译码,不进行其他操作

    位操作指令

    位数据传送类指令

    指令 功能
    MOV C,bit 寻址位的状态送入C
    MOV bit,C C的状态送入位地址中

    位修正指令

    C指累加器C即进位标志CY

    指令 功能
    CLP C 累加器清0
    CLP bit 寻址位清0
    CPL C 取反
    CPL bit 寻址位取反
    SETB C C置1
    SETB bit 寻址位置1

    位逻辑运算指令

    指令 功能
    ANL C,bit 寻址位和C“与”,结果存到C
    ANL C,/bit 寻址位的“非”和C“与”,结果存到C
    ORL C,bit 寻址位和C“或”,结果存到C
    ORL C,/bit 寻址位的“非”和C“或”,结果存到C

    位条件转移指令

    指令 功能
    JC rel C=1转向PC+2+ rel→PC;C=0顺序执行PC+2→PC
    JNC rel C=0转向PC+2+rel→PC;C=1顺序执行PC+2→PC
    JB bit,rel (bit)=1转向PC+3+rel→PC;(bit)=0顺序执行PC+3→PC
    JNB bit,rel (bit)=0转向PC+3+rel→PC;(bit)=1顺序执行PC+3→PC
    JBC bit,rel (bit)=1转向PC+3+rel→PC,同时0→(bit);(bit)=0顺序执行PC+3→PC
    物联沃分享整理
    物联沃-IOTWORD物联网 » 《汇编语言指令大全》

    发表评论