控制转移类指令

控制转移类指令

一、无条件转移指令

LJMP addrl6

    指令名称:长转移指令

    指令代码:02H

    指令功能:使程序按指定地址进行无条件转移

    操作内容:PCaddrl6

    字节数: 3

    机器周期:2

    说明:

    addr16——LCALLLJMP使用的16位目的地址。目的地址可以是64K程序存储器空间内的任何位置。

AJMP addr11

    指令名称:绝对转移指令

    指令代码:

A10

A9

A8

1

0

0

0

1

A7

A6

A5

A4

A3

A2

A1

A0

    指令功能:构造目的地址,实现程序转移。其方法是以指令提供的11位地址,取代PC的低11位,.而PC的高5位保持不变。

    操作内容:PC(PC)+2

    PCl00addr11

    字节数: 2

    机器周期:2

    使用说明:由于addr11的最小值是000H,最大值是7FFH,因此地址转移范围是2KB

    说明:

    addr11——ACALLAJMP使用的11位目的地址。目的地址必须与下一条指令第一字节处于同一个2K字节的存储器页。

SJMP rel

    指令名称:短转移指令

    指令代码:80H

    指令功能:按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;

    操作内容:PC(PC)+2

    PC(PC)+rel

    字节数: 2

    机器周期:2

    使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC126)(PC+129)。其中PC值为本指令的地址。

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

JMP A+DPTR

    指令名称:无条件间接转移指令

    指令代码:72H

    指令功能:A内容与DPTR内容相加作为转移目的地址,进行程序转移。

    操作内容:PC(A)+(DPTR)

    字节数: 1

    机器周期;2

    说明:

    DPTR——是一个16位的数据指针寄存器,可以用来存放片内ROM的地址,也可以用来存放片外RAM和片外ROM的地址。

二、条件转移指令

1、累加器A判零指令

JZ rel

    指令名称:判0转移指令

    指令代码:60H

    指令功能:累加位(A)的内容为o,则程序转移;否则程序顺序执行。

    操作内容:若(A)0,则PC(PC)+2+rel

    (A)0,则PC(PC)+2

    字节数: 2

    机器周期:2

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

JNZ rel

    指令名称:判0转移指令

    指令代码:70H

    指令功能:累加位(A)的内容不为0,则程序转移;否则程序顺序执行。

    操作内容:若(A)0,则PC(PC)+2+rel

    (A)0,则PC(PC)+2

    字节数: 2

    机器周期:2

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

2、比较条件转移指令

CJNE A#datarel

    指令名称:数值比较转移指令

    指令代码:B4H

    指令功能:累加器内容与立即数比较,不等则转移。

    操作内容:若(A)data,则PC(PC)+3C0

    (A)data,则PC(PC)+3+relC0

CJNE Adircetrel

    指令名称:数值比较转移指令

    指令代码:B5H

    指令功能:累加器内容与内部RAM128字节或专用寄存器内容比较,不等则转移。

    操作内容:若(A)(direct),则PC(PC)+3C0

    (A)(direct),则PC(PC)+3+relC0

    (A)(direct),则PC(PC)+3+relC1

    字节数: 3

    机器周期:2

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

    direct——8位内部数据存储器地址。可以直接访问数据RAM地址(0x000x7F)或一

SFR地址(0x800xFF)。

    例:

    (A)data,则PC(PC)+3+relC1

说明:

    字节数: 3

    机器周期:2

    说明:

单片机先把累加器A和立即数data进行比较,若累加器A中内容和立即数data相等,则程序不发生转移,继续执行程序,Cy=0。若累加器A中的内容和立即数不相等则机器便根据累加器A和立即数#data大小形成Cy标志位状态,然后使程序发生转移。

    #data——8位立即数。

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

CJNE Rn#datarel

    指令名称:数值比较转移指令

    指令代码:B8HBFH

    指令功能:寄存器内容与立即数比较,不等则转移。

    操作内容:若(Rn)data,则PC(PC)+3C0

    (Rn)data,则PC(PC)+3+relC0

    (Rn)data,则PC(PC)+3+relC1

    字节数: 3

    机器周期:2

    说明:

单片机先把寄存器Rn和立即数data进行比较,若寄存器Rn中内容和立即数data相等,则程序不发生转移,继续执行程序,Cy=0。若寄存器Rn中的内容和立即数不相等则机器便根据寄存器Rn和立即数#data大小形成Cy标志位状态,然后使程序发生转移。

    #data——8位立即数。

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

CJNE Ri#datarel

    指令名称:数值比较转移指令

    指令代码:B6HB7H

    指令功能:内部RAM128单元内容与立即数比较,不等则转移。

    操作内容:若((Ri))=data,则PC(PC)+3C0

    ((Ri))data,则PC(PC)+3+relC0

    ((Ri))data,则PC(PC)+3+relC1

单片机先把以寄存器@Ri中地址数据中的数和立即数data进行比较,若寄存器Rn中内容和立即数data相等,则程序不发生转移,继续执行程序,Cy=0。若寄存器Rn中的内容和立即数不相等则机器便根据寄存器Rn和立即数#data大小形成Cy标志位状态,然后使程序发生转移。

    字节数: 3

    机器周期:2

    说明:

    @Ri——通过寄存器R0R1间接寻址地数据RAM地址。

    #data——8位立即数。

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

3、减1条件转移指令

DJNZ Rnrel

    指令名称:寄存器减1条件转移指令

    指令代码:D8HDFH

    指令功能:寄存器内容减1。不为0转移;为0顺序执行。

    操作内容:Rn(Rn)-ln07

    (Rn)0,则PC(PC)+2+rel

    (Rn)0,则PC(PC)+2

说明:

单片机执行时先把Rn中的内容减1,再判断Rn中的内容是否为0,若它不为0,则程序发生转移;若为0,则程序不转移,继续执行。

    字节数: 2

    机器周期:2

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

    Rn——当前选择的寄存器区的寄存器R0R7

DJNZ directrel

    指令名称:直接寻址单元减1条件转移指令

    指令代码:D5H

    指令功能:内部RAM128单元内容减1。不为0转移;为0顺序执行。

    操作内容:direct(direct)-1

    (direct)0,则转到PC(PC)+3+rel

    (direct)0,则顺序执行(PC(PC)+3

说明:

单片机执行时先把direct中的内容减1,再判断direct中的内容是否为0,若它不为0,则程序发生转移;若为0,则程序不转移,继续执行。

    字节数: 3

    机器周期:2

    说明:

    rel——相对于下一条指令第一个字节的8位有符号(2的补码)偏移量。SJMP和所有条件转移指令使用。

    direct——8位内部数据存储器地址。可以直接访问数据RAM地址(0x000x7F)或一个SFR地址(0x800xFF)。

三、子程序调用和反回指令

1、短调用指令

ACALL addr11

    指令名称:绝对调用指令

    指令代码:

 

A10

A9

A8

1

0

0

0

1

A7

A6

A5

A4

A3

A2

A1

A0

 

    指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0a0)

    取代PC的低11位,PC的高5位不变。

    操作内容:

    PC(PC)+2

  SP(SP)+1

  (SP)(PC)70

  SP(SP)+1

  (SP)(PC)158

  PC100addrl00

    字节数: 2

    机器周期:2

    使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB

    说明:

    addr11——ACALLAJMP使用的11位目的地址。目的地址必须与下一条指令第一字节处于同一个2K字节的存储器页。

2、长调用指令

LCALL addr16

    指令名称:长调用指令

    指令代码:12H

    指令功能:按指令给定地址进行子程序调用

    操作内容:PC(PC)+3

    SP(SP)+1

    (SP)(PC)70

    SP(SP)+1

    (SP)(PC)158

    PCaddrl6

    字节数: 3

    机器周期:2

    使用说明:在64KB的范围内调用子程序

    说明:

    addr16——LCALLLJMP使用的16位目的地址。目的地址可以是64K程序存储器空间内的任何位置。

3、反回指令

RET

    指令名称:子程序返回指令

    指令代码:22H

    指令功能:子程序返回

    操作内容:PC158((SP))

    SP(SP)-1

    PC70((SP))

    SP(SP)-1

    字节数: 1

    机器周期:2

RETI

    指令名称:中断返回指令

    指令代码:32H

    指令功能:中断服务程序返回

    操作内容’:PC15?/FONT>8((SP))

    SP(SP)-l

    PC70((SP))

    SP(SP)-1

    字节数: 1

    机器周期:2

4、空操作指令

NOP

    指令名称:空操作指令

    指令代码;00H

    指令功能:不执行任何操作,常用于产生一个机器周期的时间延迟。

    操作内容:PC(PC)+l

    字节数: 1

    机器周期:1

你可能感兴趣的:(电子技术)