JM:当为负时跳转,执行后并不断开二进制逻辑链
JM并不是根据累加器1的值来进行判断跳转,他是根据CC0和CC1这2个状态位的状态来进行的跳转。当程序执行逻辑运算时会根据运算结果,改变这2个状态位的值。比如执行过0-2运算时,累加器1结果为-2,CC0=TRUE,CC1=FALSE,此时跳转条件成立。如果将-2直接载入累加器1,虽然累加器1结果也为-2,此时CC0和CC1没有改变,跳转条件不成立。
STL代码
逐行解读:
1、A #in1
检查IN1的状态是否为TRUE,将/FC置为true,IN1状态保存到RLO。
2、L #int1
3、L #int2
4、-I
5、JM _001
执行IN1-IN2之后,系统会根据数学运算结果,改变CC0和CC1的状态,当CC0为1,CC1为0时跳转。
6、A #in2
7、= #OUT1
8、JU _002
当结果大于零不执行跳转时,从第6行继续执行程序扫描,二进制逻辑链为A #in1——>A#in2;
等于赋值指令,将RLO状态赋值到OUT1,就相当于输出线圈;
跳转到_002结尾处。
9、_001: AN #in2
10、= #OUT2
当第4行运算结果小于零时,JM跳转到此处。二进制逻辑链为A #in1——>AN #in2,将RLO状态赋值到OUT2。
11、_002: NOP 0
空操作指令
SCL代码
总结:JC,JNB等指令执行过后,就会将/FC状态位置1,会开始新的二进制逻辑,JM/JP/JZ/JMP/JMZ之类的条状不会影响状态位,只是对程序的扫描顺序。大家在进行STL代码解读的时候一定要注意。
本文暂时没有评论,来添加一个吧(●'◡'●)