控制指令是将程序跳转到某个指定的地址,在顺序执行
控制指令是通过修改PC的内容来实现跳转的功能
PC的内容是将要执行的下一跳指令的地址
LJMP英文全称:Absolute Jump
AJMP英文全称:Long Jump
SJMP英文全称:Short Jump
JMP英文全称:Jump
指令名称:长转移指令
目的:程序无条件转向64KB程序存储器地址空间的任何单元
源操作数:16位跳转目标地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
LJMP addr16 | addr16 -> PC | × | × | × | × | 3 | 2 |
指令名称:绝对转移指令
目的:程序无条件转向2KB程序存储器地址空间的任何单元
源操作数:11位跳转目标地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
AJMP addr16 | (PC) + 2 -> PC, addr11 -> PC* | × | × | × | × | 2 | 2 |
注:PC* 表示 PC10 ~ 0,共计11位;
例 若AJMP指令地址为2FFEH,跳转的范围为
例 若AJMP指令地址为2FFDH,跳转的范围为
指令名称:相对短转移指令
目的:程序无条件转向256B程序存储器地址空间的任何单元
源操作数:8位跳转相对地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
SJMP rel | (PC) + 2 -> PC, (PC) + rel -> PC | × | × | × | × | 2 | 2 |
例 (PC) = 0100H
例 SJMP RELADR,其中RELADR的标号为0123H,(PC) = 0100H;
指令名称:间接移指令/散转指令
目的:程序无条件转向DPTR和A之和的目标地址空间单元
源操作数:16位的DPTR和8位的累加器A
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
JMP @A + DPTR | (A) + (DPTR) -> PC | × | × | × | × | 1 | 2 |
例 (DPTR) = 1000H,修改A中的内容
SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP
AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP
LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP
JZ英文全称:Jump if Zero
JNZ英文全称:Jump if Not Zero
CJNE英文全称:Compare Jump if Not Equal
DJNE英文全称:Compare Jump if Not Equal
指令名称:判零转移指令
目的:对累加器A中的内容进行零的判定
源操作数:8位跳转相对地址
指令名称:判零转移指令
目的:对累加器A中的内容进行零的判定,同JZ
源操作数:8位跳转相对地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
JZ rel | (PC) + 2 -> PC; 若 A = 0,则 (PC) + rel -> A;若 A != 0,则 顺序执行,不跳转 | × | × | × | × | 2 | 2 |
JNZ rel | (PC) + 2 -> PC; 若 A != 0,则 (PC) + rel -> A;若 A = 0,则 顺序执行,不跳转 | × | × | × | × | 2 | 2 |
例 (PC) = 0100H
指令名称:比较转移指令
目的:对指定的目的字节和源字节进行比较,不等转移,相等继续执行
源操作数:8位跳转相对地址,累加器A,直接地址direct,立即数#data,间接寄存器@Ri,寄存器Rn
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
CJNE A, direct, rel | (PC) + 3 -> PC; 若(direct) < (A),则 (PC) + rel -> PC且 0 -> CY;若(direct) > (A),则 (PC) + rel -> PC且 1 -> CY;若 (direct) = (A),则顺序执行,不跳转且 0 -> CY; | × | × | × | √ | 3 | 2 |
CJNE A, #data, rel | (PC) + 3 -> PC; 若#data < (A),则 (PC) + rel -> PC且 0 -> CY;若#data > (A),则 (PC) + rel -> PC且 1 -> CY;若 #data = (A),则顺序执行,不跳转且 0 -> CY; | × | × | × | √ | 3 | 2 |
CJNE Rn, #data, rel | (PC) + 3 -> PC; 若#data < (Rn),则 (PC) + rel -> PC且 0 -> CY;若#data > (Rn),则 (PC) + rel -> PC且 1 -> CY;若 #data = (Rn),则顺序执行,不跳转且 0 -> CY; | × | × | × | √ | 3 | 2 |
CJNE @Ri, #data, rel | (PC) + 3 -> PC; 若#data < ((Ri)),则 (PC) + rel -> PC且 0 -> CY;若#data > ((Ri)),则 (PC) + rel -> PC且 1 -> CY;若 #data = ((Ri)),则顺序执行,不跳转且 0 -> CY; | × | × | × | √ | 3 | 2 |
(A) = 03H,(10) = 04H,CY = 0,rel = 30H,(PC) = 0100H
指令名称:循环转移指令
目的:以直接地址或寄存器Rn的单元内容作为循环控制寄存器使用,利用其进行循环
源操作数:8位跳转相对地址,寄存器Rn,直接地址direct
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
DJNZ Rn, rel | (PC) + 2 -> PC;(Rn) - 1 -> Rn;当(Rn) != 0时,则(PC) + rel -> PC;当(Rn) = 0时,则结束循环,程序往下执行 | × | × | × | × | 2 | 2 |
DJNZ direct, rel | (PC) + 3 -> PC;(direct) - 1 -> direct;当(direct) != 0时,则(PC) + rel -> PC;当(direct) = 0时,则结束循环,程序往下执行 | × | × | × | × | 3 | 2 |
例 设(R1)= 07H,rel = 10H,(PC) = 0100H
ACALL英文全称:Absolute subroutine Call
LCALL英文全称:Long subroutine Call
RET英文全称:Return from Subroutine
RETI英文全称:Return from Interruption
调用和返回之间的过程:
指令名称:短调用指令
目的:调用2KB范围内的所指定的子程序
源操作数:11位目的地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
ACALL addr11 | (PC) + 2 -> PC;(SP) + 1 -> (SP), (PCL) -> (SP),(SP) + 1 -> (SP), (PCH) -> (SP),addr(10~0) -> PC(10~0); | × | × | × | × | 2 | 2 |
注:
例 (SP) = 40H,(PC) = 0100H,子程序ADD1首地址 0110H;
指令名称:长调用指令
目的:调用64KB范围内的所指定的子程序
源操作数:16位目的地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
ACALL addr11 | (PC) + 3 -> PC;(SP) + 1 -> (SP), (PCL) -> (SP),(SP) + 1 -> (SP), (PCH) -> (SP),addr(15~0) -> PC; | × | × | × | × | 3 | 2 |
注:
例 (SP) = 07H,(PC) = 0123H,子程序ADD1首地址 5678H;
ACALL是你调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K
指令名称:子程序返回指令
目的:从子程序返回
指令名称:中断返回指令
目的:从中断返回
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
RET | ((SP)) -> PCH,(SP) - 1 -> SP,((SP)) -> PCL,(SP) - 1 -> SP | × | × | × | × | 1 | 2 |
RETI | ((SP)) -> PCH,(SP) - 1 -> SP,((SP)) -> PCL,(SP) - 1 -> SP | × | × | × | × | 1 | 2 |
注:
例 (SP) = 09H,(09H) = 01H,(08H) = 26H,(PC) = 5678H
JC英文全称:Jump if the Carry flag is set
JNC英文全称:Jump if Not Carry
JB英文全称:Jump if the Bit is set
JNB英文全称:Jump if the Bit is Not set
JBC英文全称:Jump if the Bit is set and Clear the bit
指令名称:判布尔累加器C转移指令
操作数:8位目的地址
指令名称:判布尔累加器C转移指令
操作数:8位目的地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
JC rel | (PC) + 2 -> PC,若(C) = 1,则(PC) + rel -> PC;若(C) = 0,则顺序执行 | × | × | × | × | 2 | 2 |
JNC rel | (PC) + 2 -> PC,若(C) = 0,则(PC) + rel -> PC;若(C) = 1,则顺序执行 | × | × | × | × | 2 | 2 |
指令名称:判位变量转移指令
操作数:位变量,8位目的地址
指令名称:判位变量转移指令
操作数:位变量,8位目的地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
JB bit rel | (PC) + 3 -> PC,若(bit) = 1,则(PC) + rel -> PC;若(bit) = 0,则顺序执行 | × | × | × | × | 3 | 2 |
JNB bit rel | (PC) + 3 -> PC,若(bit) = 0,则(PC) + rel -> PC;若(bit) = 1,则顺序执行 | × | × | × | × | 3 | 2 |
指令名称:判位变量并清零转移指令
操作数:位变量,8位目的地址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
JBC bit rel | (PC) + 3 -> PC,若(bit) = 1,则(PC) + rel -> PC,0 -> CY;若(bit) = 0,则顺序执行 | × | × | × | × | 3 | 2 |
NOP英文全称:No Operation
指令名称:空操作指令
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
NOP | 空操作 | × | × | × | × | 1 | 1 |
51单片机之系统指令
51单片机之逻辑运算指令ANL、ORL、XRL等
51单片机之数据转移指令MOV、MOVX、MOVC等
51单片机之位操作指令SETB、CPL等
51单片机之算术运算指令ADDC、SUBB等
参考
由本人水平有限,文章难免有错误,望告知