语句表中的逻辑控制指令包括跳转指令和循环指令(见表3-10)。在没有执行跳转指令和循环指令时,各条指令按从上到下的先后顺序逐条执行。执行逻辑控制指令时(不包括无条件跳转指令),根据当时状态字中有关位的状态,决定是否跳转。满足条件则跳转到跳转标号(LABEL)所在的跳转目标,不满足条件则不跳转。
表3-10 跳转指令与状态位触点指令
跳转时不执行跳转指令与对应的标号之间的程序,跳转到标号处后,程序继续顺序执行。允许向前跳转和向后跳转。只能在同一个逻辑块内跳转,在块内同一个标号只能出现一次。
跳转或循环指令的地址为跳转标号,后者用于指示跳转指令的跳转目标,它由最多4个字符组成,第一个字符必须是字母或下划线,其余的可以是字母、数字和下划线。在语句表中,跳转标号与它右边的指令用冒号分隔(见图3-76)。
1.无条件跳转指令
无条件跳转(Jump Unconditional)指令的格式为“JU<跳转标号>”,语句表中逻辑控制指令的格式相同。JU指令无条件中止程序的线性扫描,跳转到跳转标号指定的跳转目标。是否跳转与状态字的内容无关。
图3-76 有溢出的语句表程序状态监控
2.多分支跳转指令
多分支跳转指令JL的下面是若干条无条件跳转指令JU,根据累加器1的最低字节中跳转标号的编号(0~255),决定具体的跳转目标。实际上很少使用JL指令。
3.与RLO有关的跳转指令
JC、JCN、JCB、JNB指令检查逻辑运算结果(RLO位)的状态,满足表3-10中的条件则中止程序的线性扫描,跳转到指定的标号处,不满足条件则不跳转。JCB和JNB指令在跳转的同时,将RLO位的值复制到BR位。
4.与BR、OV、OS有关的跳转指令
指令JBI、JNBI、JO和JOS分别检查BR(二进制结果位)、OV(溢出位)和OS(存储溢出位)的状态,决定是否跳转到指定的标号处(见表3-10)。
5.与条件码CC0和CC1有关的跳转指令
这些指令根据状态字中的条件码CC0和CC1的状态,即指令的执行结果与0的关系(见表3-10),确定是否跳转到指定的标号处。(www.xing528.com)
如果CC0=CC1=1,表示指令执行出错(除数为0、使用了非法的指令、浮点数比较时使用了无效的格式),跳转指令JUO将跳转到指定的标号处。
图3-76的左边的“*I”是16位整数乘法指令(见随书光盘中的例程“逻辑控制”),如果MW10的值为10,乘积没有超出上限值32767,没有溢出,不会跳转。如果MW10的值为11,乘法指令执行后有溢出(见图3-76),溢出位OV(状态字的第5位)为1。执行JO指令后,跳转到标号OVER处。被跳过的指令的监控值用普通字体显示,被执行的指令的监控值用加粗的字体显示。
6.梯形图中的跳转指令
梯形图中的无条件跳转指令与条件跳转指令均用JMP(Jump)线圈表示(见表3-11),无条件跳转指令(见图3-78中的程序段5)直接与右边的垂直电源线相连,执行无条件跳转指令后马上跳转到线圈上面的目标标号M004处。
表3-11 梯形图中的跳转指令
图3-78程序段3中的条件跳转指令的JMP线圈受触点电路的控制,JMP线圈“通电”时,将跳转到指令给出的标号M003处。
JMPN线圈指令在它右边的电路断开(即RLO为0)时跳转。
目标标号必须位于程序段的起始处。放置跳转标号时,将指令浏览器窗口的“跳转”文件夹中的“LABEL”(标号)图标“拖放”到程序段开始的地方。双击标号中的“???”,输入标号的名称。
梯形图中的状态位指令以触点的形式出现。这些触点的通断取决于状态位BR、OV、OS、CC0和CC1的状态(见表3-10)。
指令列表的“状态位”文件夹中的状态位触点是专用的触点,不能在普通触点上面输入状态位的名称来代替它们。
图3-77是图3-78中的程序的流程图。整数乘法指令“MUL_I”的运算如果有溢出(乘积大于16位整数能表示的最大正数32767),程序段3中标有OV的状态位触点闭合,将跳转到标号M003处。如果乘法运算没有溢出,OV触点断开,JMP线圈断电,不会跳转,将顺序执行程序段4。执行完后,在程序段5无条件跳转到标号M004处。
图3-77 流程图
图3-78 状态位触点指令与跳转指令的应用
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。