技术论坛

 回复:JPZ指令前为什么要+0

返回主题列表
作者 主题
老学童
奇侠

经验值:8218
发帖数:765
精华帖:32
楼主    2013-11-16 17:33:50
主题:JPZ指令前为什么要+0
最近一段时间读了一些德国人写的程序,发现一个不理解的编程方式,就是凡是在执行‘JPZ’这个跳转指令前,经常要将前面计算的DWORD或DINT类型值进行一个+0计算后,再执行JPZ这个指令,有点匪夷所思,例如:
...
NULL: L #l_z_sp; // DWORD类型
+D ;
T #l_z_sp; // = IN1 + IN2 in ms
L 0;
+D ;
JPZ pos;
...
又例如:
...
T #l_date; // DINT类型
JU kdgr;
grl: TAK ;
L 0;
+D ;
JPZ kdgr;
...
在执行+0前,累加器1中肯定是一个32位值,加上一个16位的0值能起什么作用呢?难道只是为了将原先的数值暂存到累加器2中?临时变量里有啊!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
n次看你的背影
奇侠

经验值:7974
发帖数:2321
精华帖:73
1楼    2013-11-16 19:27:47
精华帖  主题:回复:JPZ指令前为什么要+0
老学童大侠,我是这样理解的:JPZ(大于等于0跳转指令),它是根据程序状态字中的CC1和CC0这两个位的状态判断是否执行跳转,如果CC 1=0/CC 0=0 or CC 1=1/CC 0=0那么执行跳转,否则不跳转;而只有在进行算术运算后CC 1和CC 0的状态才会被刷新。所以编程者做了一条空加法指令(其实用减去0也可以),这样就刷新了程序状态字中的CC1和CC0的状态,然后用了这条JPZ指令来判断是否跳转。

另外直接装载0用>=比较指令,判断程序状态字的RLO位,用JC或者JNC来跳转也是一样的。
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。